aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcontrib/ee/ee.c260
-rw-r--r--contrib/ee/ee.msg13
-rw-r--r--usr.bin/ee/Artistic117
-rw-r--r--usr.bin/ee/FREEBSD-upgrade28
-rw-r--r--usr.bin/ee/Makefile6
-rw-r--r--usr.bin/ee/README116
-rw-r--r--usr.bin/ee/ee.1623
-rw-r--r--usr.bin/ee/ee.c5313
-rw-r--r--usr.bin/ee/ee.i18n.guide158
-rw-r--r--usr.bin/ee/nls/en_US.US-ASCII/ee.msg185
10 files changed, 167 insertions, 6652 deletions
diff --git a/contrib/ee/ee.c b/contrib/ee/ee.c
index 9a08dc43312c..f727becf57a5 100755
--- a/contrib/ee/ee.c
+++ b/contrib/ee/ee.c
@@ -53,6 +53,9 @@
|
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
char *ee_copyright_message =
"Copyright (c) 1986, 1990, 1991, 1992, 1993, 1994, 1995, 1996 Hugh Mahon ";
@@ -66,39 +69,37 @@ char *version = "@(#) ee, version 1.4.1 $Revision: 1.96 $";
#ifdef NCURSE
#include "new_curse.h"
+#elif HAS_NCURSES
+#include <ncurses.h>
#else
#include <curses.h>
#endif
-#include <signal.h>
+#ifdef HAS_CTYPE
+#include <ctype.h>
+#endif
+#include <err.h>
+#include <errno.h>
#include <fcntl.h>
+#include <paths.h>
+#include <pwd.h>
+#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
-#include <errno.h>
-#include <string.h>
-#include <pwd.h>
-
#ifdef HAS_SYS_WAIT
#include <sys/wait.h>
#endif
-
-#ifdef HAS_STDLIB
-#include <stdlib.h>
-#endif
-
#ifdef HAS_STDARG
#include <stdarg.h>
#endif
-
+#ifdef HAS_STDLIB
+#include <stdlib.h>
+#endif
+#include <string.h>
#ifdef HAS_UNISTD
#include <unistd.h>
#endif
-#ifdef HAS_CTYPE
-#include <ctype.h>
-#endif
-
-
#ifndef NO_CATGETS
#include <locale.h>
#include <nl_types.h>
@@ -202,8 +203,11 @@ 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 = "lp"; /* string to use for the print command */
+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*/
+const char count_text_default[] = "===============================================================================";
+int count_text_len = sizeof(count_text_default); /* length of the line above */
+char count_text[sizeof(count_text_default)]; /* buffer for current position display */
int in; /* input character */
FILE *temp_fp; /* temporary file pointer */
@@ -219,6 +223,7 @@ WINDOW *com_win;
WINDOW *text_win;
WINDOW *help_win;
WINDOW *info_win;
+WINDOW *count_win;
#if defined(__STDC__) || defined(__cplusplus)
#define P_(s) s
@@ -298,7 +303,7 @@ void finish P_((void));
int quit P_((int noverify));
void edit_abort P_((int arg));
void delete_text P_((void));
-int write_file P_((char *file_name));
+int write_file P_((char *file_name, int warn_if_exists));
int search P_((int display_message));
void search_prompt P_((void));
void del_char P_((void));
@@ -339,6 +344,7 @@ char *is_in_string P_((char *string, char *substring));
char *resolve_name P_((char *name));
int restrict_mode P_((void));
int unique_test P_((char *string, char *list[]));
+void renumber_lines P_((struct text *firstline, int startnumber));
void strings_init P_((void));
#undef P_
@@ -535,28 +541,23 @@ char *more_above_str, *more_below_str;
char *chinese_cmd, *nochinese_cmd;
-#ifndef __STDC__
-#ifndef HAS_STDLIB
-extern char *malloc();
-extern char *realloc();
-extern char *getenv();
-FILE *fopen(); /* declaration for open function */
-#endif /* HAS_STDLIB */
-#endif /* __STDC__ */
int
main(argc, argv) /* beginning of main program */
int argc;
char *argv[];
{
- int counter;
-
- for (counter = 1; counter < 24; counter++)
- signal(counter, SIG_IGN);
+ /* Always read from (and write to) a terminal. */
+ if (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO)) {
+ fprintf(stderr, "ee's standard input and output must be a terminal\n");
+ exit(1);
+ }
signal(SIGCHLD, SIG_DFL);
signal(SIGSEGV, SIG_DFL);
signal(SIGINT, edit_abort);
+ signal(SIGHUP, edit_abort);
+
d_char = malloc(3); /* provide a buffer for multi-byte chars */
d_word = malloc(150);
*d_word = (char) NULL;
@@ -577,7 +578,7 @@ char *argv[];
scr_pos =0;
scr_vert = 0;
scr_horz = 0;
- bit_bucket = fopen("/dev/null", "w");
+ bit_bucket = fopen(_PATH_DEVNULL, "w");
edit = TRUE;
gold = case_sen = FALSE;
shell_fork = TRUE;
@@ -608,10 +609,23 @@ char *argv[];
while(edit)
{
- wrefresh(text_win);
+ if (info_window)
+ {
+ snprintf(count_text, count_text_len, "L: %d C: %d %s", \
+ curr_line->line_number, scr_horz + 1, count_text_default);
+ wmove(count_win, 0, 0);
+ if (!nohighlight)
+ wstandout(count_win);
+ wprintw(count_win, count_text);
+ wstandend(count_win);
+ wnoutrefresh(count_win);
+ }
+
+ wnoutrefresh(text_win);
+ doupdate();
in = wgetch(text_win);
if (in == -1)
- exit(0);
+ continue;
resize_check();
@@ -810,6 +824,7 @@ int disp;
if (temp_buff->next_line != NULL)
temp_buff->next_line->prev_line = curr_line;
curr_line->next_line = temp_buff->next_line;
+ renumber_lines(curr_line->next_line, curr_line->line_number + 1);
temp2 = temp_buff->line;
if (in == 8)
{
@@ -943,13 +958,13 @@ int column;
}
else
{
- waddch(window, (char)character );
+ waddch(window, (unsigned char)character );
return(1);
}
}
else
{
- waddch(window, (char)character);
+ waddch(window, (unsigned char)character);
return(1);
}
for (i2 = 0; (string[i2] != (char) NULL) && (((column+i2+1)-horiz_offset) < last_col); i2++)
@@ -1054,8 +1069,8 @@ int disp;
temp_nod->line = extra= malloc(10);
temp_nod->line_length = 1;
temp_nod->max_length = 10;
- temp_nod->line_number = curr_line->line_number + 1;
temp_nod->next_line = curr_line->next_line;
+ renumber_lines(temp_nod, curr_line->line_number + 1);
if (temp_nod->next_line != NULL)
temp_nod->next_line->prev_line = temp_nod;
temp_nod->prev_line = curr_line;
@@ -1507,8 +1522,10 @@ function_key() /* process function key */
left(TRUE);
else if (in == KEY_RIGHT)
right(TRUE);
- else if ( in == KEY_HOME)
- top();
+ else if (in == KEY_HOME)
+ bol();
+ else if (in == KEY_END)
+ eol();
else if ( in == KEY_UP)
up();
else if (in == KEY_DOWN)
@@ -1674,7 +1691,7 @@ char *cmd_str1;
cmd_str = cmd_str2 = get_string(file_write_prompt_str, TRUE);
}
tmp_file = resolve_name(cmd_str);
- write_file(tmp_file);
+ write_file(tmp_file, 1);
if (tmp_file != cmd_str)
free(tmp_file);
}
@@ -1855,7 +1872,7 @@ int advance; /* if true, skip leading spaces and tabs */
esc_flag = FALSE;
in = wgetch(com_win);
if (in == -1)
- exit(0);
+ continue;
if (((in == 8) || (in == 127) || (in == KEY_BACKSPACE)) && (g_pos > 0))
{
tmp_int = g_horz;
@@ -1880,7 +1897,7 @@ int advance; /* if true, skip leading spaces and tabs */
esc_flag = TRUE;
in = wgetch(com_win);
if (in == -1)
- exit(0);
+ continue;
}
*nam_str = in;
g_pos++;
@@ -1954,7 +1971,7 @@ char *cmd_str;
int number;
int i;
char *ptr;
- char *direction;
+ char *direction = NULL;
struct text *t_line;
ptr = cmd_str;
@@ -2025,9 +2042,10 @@ char *arguments[];
{
char *buff;
int count;
- struct files *temp_names;
+ struct files *temp_names = NULL;
char *name;
char *ptr;
+ int no_more_opts = FALSE;
/*
| see if editor was invoked as 'ree' (restricted mode)
@@ -2044,7 +2062,7 @@ char *arguments[];
input_file = FALSE;
recv_file = FALSE;
count = 1;
- while (count < numargs)
+ while ((count < numargs) && (!no_more_opts))
{
buff = arguments[count];
if (!strcmp("-i", buff))
@@ -2073,30 +2091,38 @@ char *arguments[];
buff++;
start_at_line = buff;
}
-
+ else if (!(strcmp("--", buff)))
+ no_more_opts = TRUE;
else
{
- if (top_of_stack == NULL)
- {
- temp_names = top_of_stack = name_alloc();
- }
- else
- {
- temp_names->next_name = name_alloc();
- temp_names = temp_names->next_name;
- }
- ptr = temp_names->name = malloc(strlen(buff) + 1);
- while (*buff != (char) NULL)
- {
- *ptr = *buff;
- buff++;
- ptr++;
- }
- *ptr = (char) NULL;
- temp_names->next_name = NULL;
- input_file = TRUE;
- recv_file = TRUE;
+ count--;
+ no_more_opts = TRUE;
+ }
+ count++;
+ }
+ while (count < numargs)
+ {
+ buff = arguments[count];
+ if (top_of_stack == NULL)
+ {
+ temp_names = top_of_stack = name_alloc();
+ }
+ else
+ {
+ temp_names->next_name = name_alloc();
+ temp_names = temp_names->next_name;
}
+ ptr = temp_names->name = malloc(strlen(buff) + 1);
+ while (*buff != (char) NULL)
+ {
+ *ptr = *buff;
+ buff++;
+ ptr++;
+ }
+ *ptr = (char) NULL;
+ temp_names->next_name = NULL;
+ input_file = TRUE;
+ recv_file = TRUE;
count++;
}
}
@@ -2292,8 +2318,8 @@ int *append; /* TRUE if must append more text to end of current line */
if (!(*append)) /* if not append to current line, insert new one */
{
tline = txtalloc(); /* allocate data structure for next line */
- tline->line_number = curr_line->line_number + 1;
tline->next_line = curr_line->next_line;
+ renumber_lines(tline, curr_line->line_number + 1);
tline->prev_line = curr_line;
curr_line->next_line = tline;
if (tline->next_line != NULL)
@@ -2372,7 +2398,7 @@ finish() /* prepare to exit edit session */
file_name = tmp_file;
}
- if (write_file(file_name))
+ if (write_file(file_name, 1))
{
text_changes = FALSE;
quit(0);
@@ -2412,6 +2438,7 @@ int noverify;
recv_file = TRUE;
input_file = TRUE;
check_fp();
+ text_changes = FALSE;
}
return(0);
}
@@ -2448,8 +2475,9 @@ delete_text()
}
int
-write_file(file_name)
+write_file(file_name, warn_if_exists)
char *file_name;
+int warn_if_exists;
{
char cr;
char *tmp_point;
@@ -2459,7 +2487,8 @@ char *file_name;
int write_flag = TRUE;
charac = lines = 0;
- if ((in_file_name == NULL) || strcmp(in_file_name, file_name))
+ if (warn_if_exists &&
+ ((in_file_name == NULL) || strcmp(in_file_name, file_name)))
{
if ((temp_fp = fopen(file_name, "r")))
{
@@ -3125,9 +3154,8 @@ char *string; /* string containing user command */
}
for (value = 1; value < 24; value++)
signal(value, SIG_DFL);
- execl(path, last_slash, "-c", string, NULL);
- printf(exec_err_msg, path);
- exit(-1);
+ execl(path, last_slash, "-c", string, (char *)NULL);
+ errx(1, exec_err_msg, path);
}
else /* if the parent */
{
@@ -3170,7 +3198,7 @@ char *string; /* string containing user command */
}
if (shell_fork)
{
- printf(continue_msg);
+ printf("%s", continue_msg);
fflush(stdout);
while ((in = getchar()) != '\n')
;
@@ -3230,9 +3258,12 @@ set_up_term() /* set up the terminal for operating with ae */
if (info_window)
{
info_type = CONTROL_KEYS;
- info_win = newwin(6, COLS, 0, 0);
+ info_win = newwin(5, COLS, 0, 0);
werase(info_win);
paint_info_win();
+ count_win = newwin(1, COLS, 5, 0);
+ leaveok(count_win, TRUE);
+ wrefresh(count_win);
}
last_col = COLS - 1;
@@ -3257,6 +3288,7 @@ resize_check()
delwin(text_win);
delwin(com_win);
delwin(help_win);
+ delwin(count_win);
set_up_term();
redraw();
wrefresh(text_win);
@@ -3274,7 +3306,7 @@ struct menu_entries menu_list[];
int counter;
int length;
int input;
- int temp;
+ int temp = 0;
int list_size;
int top_offset; /* offset from top where menu items start */
int vert_pos; /* vertical position */
@@ -3356,10 +3388,7 @@ struct menu_entries menu_list[];
wmove(temp_win, (counter + top_offset - off_start), 3);
wrefresh(temp_win);
- in = wgetch(temp_win);
- input = in;
- if (input == -1)
- exit(0);
+ input = wgetch(temp_win);
if (((tolower(input) >= 'a') && (tolower(input) <= 'z')) ||
((input >= '0') && (input <= '9')))
@@ -3602,8 +3631,6 @@ help()
wprintw(com_win, press_any_key_msg);
wrefresh(com_win);
counter = wgetch(com_win);
- if (counter == -1)
- exit(0);
werase(com_win);
wmove(com_win, 0, 0);
werase(help_win);
@@ -3631,11 +3658,6 @@ paint_info_win()
else if (info_type == COMMANDS)
waddstr(info_win, command_strings[counter]);
}
- wmove(info_win, 5, 0);
- if (!nohighlight)
- wstandout(info_win);
- waddstr(info_win, "===============================================================================");
- wstandend(info_win);
wrefresh(info_win);
}
@@ -3669,12 +3691,15 @@ create_info_window()
idlok(text_win, TRUE);
werase(text_win);
info_window = TRUE;
- info_win = newwin(6, COLS, 0, 0);
+ info_win = newwin(5, COLS, 0, 0);
werase(info_win);
info_type = CONTROL_KEYS;
midscreen(min(scr_vert, last_line), point);
clearok(info_win, TRUE);
paint_info_win();
+ count_win = newwin(1, COLS, 5, 0);
+ leaveok(count_win, TRUE);
+ wrefresh(count_win);
wrefresh(text_win);
clear_com_win = TRUE;
}
@@ -3705,7 +3730,7 @@ int arg;
{
string = get_string(file_write_prompt_str, TRUE);
tmp_file = resolve_name(string);
- write_file(tmp_file);
+ write_file(tmp_file, 1);
if (tmp_file != string)
free(tmp_file);
free(string);
@@ -3742,7 +3767,7 @@ int arg;
string = tmp_file;
}
}
- if (write_file(string))
+ if (write_file(string, 1))
{
in_file_name = string;
text_changes = FALSE;
@@ -4051,7 +4076,7 @@ Format() /* format the paragraph according to set margins */
}
unsigned char *init_name[3] = {
- "/usr/local/lib/init.ee",
+ "/usr/share/misc/init.ee",
NULL,
".init.ee"
};
@@ -4068,6 +4093,8 @@ ee_init() /* check for init file and read it if it exists */
int temp_int;
string = getenv("HOME");
+ if (!string)
+ string = "/root"; /* Set to reasonable default so we don't crash */
str1 = home = malloc(strlen(string)+10);
strcpy(home, string);
strcat(home, "/.init.ee");
@@ -4353,17 +4380,25 @@ spell_op() /* check spelling of words in the editor */
void
ispell_op()
{
- char name[128];
+ char template[128], *name;
char string[256];
- int pid;
+ int fd;
if (restrict_mode())
{
return;
}
- pid = getpid();
- sprintf(name, "/tmp/ee.%d", pid);
- if (write_file(name))
+ (void)sprintf(template, "/tmp/ee.XXXXXXXX");
+ name = mktemp(&template[0]);
+ fd = open(name, O_CREAT | O_EXCL | O_RDWR, 0600);
+ if (fd < 0) {
+ wmove(com_win, 0, 0);
+ wprintw(com_win, create_file_fail_msg, name);
+ wrefresh(com_win);
+ return;
+ }
+ close(fd);
+ if (write_file(name, 0))
{
sprintf(string, "ispell %s", name);
sh_command(string);
@@ -4961,6 +4996,19 @@ char *list[];
return(num_match);
}
+void
+renumber_lines(firstline, startnumber)
+struct text *firstline;
+int startnumber;
+{
+ struct text *lineptr;
+ int i;
+
+ i = startnumber;
+ for (lineptr = firstline; lineptr != NULL; lineptr = lineptr->next_line)
+ lineptr->line_number = i++;
+}
+
#ifndef NO_CATGETS
/*
| Get the catalog entry, and if it got it from the catalog,
@@ -5001,7 +5049,7 @@ strings_init()
#ifndef NO_CATGETS
setlocale(LC_ALL, "");
- catalog = catopen("ee", 0);
+ catalog = catopen("ee", NL_CAT_LOCALE);
#endif /* NO_CATGETS */
modes_menu[0].item_string = catgetlocal( 1, "modes menu");
@@ -5047,7 +5095,7 @@ strings_init()
help_text[6] = catgetlocal( 41, "^f undelete char ^n next page ^x search ");
help_text[7] = catgetlocal( 42, "^g begin of line ^o end of line ^y delete line ");
help_text[8] = catgetlocal( 43, "^h backspace ^p prev page ^z undelete line ");
- help_text[9] = catgetlocal( 44, "^[ (escape) menu ");
+ help_text[9] = catgetlocal( 44, "^[ (escape) menu ESC-Enter: exit ee ");
help_text[10] = catgetlocal( 45, " ");
help_text[11] = catgetlocal( 46, "Commands: ");
help_text[12] = catgetlocal( 47, "help : get this info file : print file name ");
@@ -5064,7 +5112,7 @@ strings_init()
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 ");
control_keys[3] = catgetlocal( 60, "^t top of text ^o end of line ^v undelete word ^r right ");
- control_keys[4] = catgetlocal( 61, "^c command ^k delete char ^f undelete char ");
+ control_keys[4] = catgetlocal( 61, "^c command ^k delete char ^f undelete char ESC-Enter: exit ee ");
command_strings[0] = catgetlocal( 62, "help : get help info |file : print file name |line : print line # ");
command_strings[1] = catgetlocal( 63, "read : read a file |char : ascii code of char |0-9 : go to line \"#\"");
command_strings[2] = catgetlocal( 64, "write: write a file |case : case sensitive search |exit : leave and save ");
@@ -5106,7 +5154,7 @@ strings_init()
searching_msg = catgetlocal( 100, " ...searching");
str_not_found_msg = catgetlocal( 101, "string \"%s\" not found");
search_prompt_str = catgetlocal( 102, "search for: ");
- exec_err_msg = catgetlocal( 103, "could not exec %s\n");
+ exec_err_msg = catgetlocal( 103, "could not exec %s");
continue_msg = catgetlocal( 104, "press return to continue ");
menu_cancel_msg = catgetlocal( 105, "press Esc to cancel");
menu_size_err_msg = catgetlocal( 106, "menu too large for window");
@@ -5154,8 +5202,8 @@ strings_init()
mode_strings[7] = catgetlocal( 145, "emacs key bindings ");
emacs_help_text[0] = help_text[0];
emacs_help_text[1] = catgetlocal( 146, "^a beginning of line ^i tab ^r restore word ");
- emacs_help_text[2] = catgetlocal( 147, "^b back 1 char ^j undel char ^t top of text ");
- emacs_help_text[3] = catgetlocal( 148, "^c command ^k delete line ^u bottom of text ");
+ emacs_help_text[2] = catgetlocal( 147, "^b back 1 char ^j undel char ^t begin of file ");
+ emacs_help_text[3] = catgetlocal( 148, "^c command ^k delete line ^u end of file ");
emacs_help_text[4] = catgetlocal( 149, "^d delete char ^l undelete line ^v next page ");
emacs_help_text[5] = catgetlocal( 150, "^e end of line ^m newline ^w delete word ");
emacs_help_text[6] = catgetlocal( 151, "^f forward 1 char ^n next line ^x search ");
@@ -5174,11 +5222,11 @@ strings_init()
emacs_help_text[19] = help_text[19];
emacs_help_text[20] = help_text[20];
emacs_help_text[21] = help_text[21];
- emacs_control_keys[0] = catgetlocal( 154, "^[ (escape) menu ^y search prompt ^k delete line ^p prev li ^g prev page");
- emacs_control_keys[1] = catgetlocal( 155, "^o ascii code ^x search ^l undelete line ^n next li ^v next page");
- emacs_control_keys[2] = catgetlocal( 156, "^u end of file ^a begin of line ^w delete word ^b back 1 char ");
- emacs_control_keys[3] = catgetlocal( 157, "^t top of text ^e end of line ^r restore word ^f forward 1 char ");
- emacs_control_keys[4] = catgetlocal( 158, "^c command ^d delete char ^j undelete char ^z next word ");
+ emacs_control_keys[0] = catgetlocal( 154, "^[ (escape) menu ^y search prompt ^k delete line ^p prev line ^g prev page");
+ emacs_control_keys[1] = catgetlocal( 155, "^o ascii code ^x search ^l undelete line ^n next line ^v next page");
+ emacs_control_keys[2] = catgetlocal( 156, "^u end of file ^a begin of line ^w delete word ^b back char ^z next word");
+ emacs_control_keys[3] = catgetlocal( 157, "^t begin of file ^e end of line ^r restore word ^f forward char ");
+ emacs_control_keys[4] = catgetlocal( 158, "^c command ^d delete char ^j undelete char ESC-Enter: exit");
EMACS_string = catgetlocal( 159, "EMACS");
NOEMACS_string = catgetlocal( 160, "NOEMACS");
usage4 = catgetlocal( 161, " +# put cursor at line #\n");
diff --git a/contrib/ee/ee.msg b/contrib/ee/ee.msg
index f7c209c1a4b5..4b8cc346ab1f 100644
--- a/contrib/ee/ee.msg
+++ b/contrib/ee/ee.msg
@@ -4,6 +4,7 @@ $
$ For ee patchlevel 3
$
$ $Header: /home/hugh/sources/old_ae/RCS/ee.msg,v 1.8 1996/11/30 03:23:40 hugh Exp $
+$ $FreeBSD$
$
$
$set 1
@@ -51,7 +52,7 @@ $quote "
41 "^f undelete char ^n next page ^x search "
42 "^g begin of line ^o end of line ^y delete line "
43 "^h backspace ^p prev page ^z undelete line "
-44 "^[ (escape) menu "
+44 "^[ (escape) menu ESC-Enter: exit ee "
45 " "
46 "Commands: "
47 "help : get this info file : print file name "
@@ -68,7 +69,7 @@ $quote "
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 "
60 "^t top of text ^o end of line ^v undelete word ^r right "
-61 "^c command ^k delete char ^f undelete char "
+61 "^c command ^k delete char ^f undelete char ESC-Enter: exit ee "
62 "help : get help info |file : print file name |line : print line # "
63 "read : read a file |char : ascii code of char |0-9 : go to line \"#\""
64 "write: write a file |case : case sensitive search |exit : leave and save "
@@ -110,7 +111,7 @@ $quote "
100 " ...searching"
101 "string \"%s\" not found"
102 "search for: "
-103 "could not exec %s\n"
+103 "could not exec %s"
104 "press return to continue "
105 "press Esc to cancel"
106 "menu too large for window"
@@ -154,8 +155,8 @@ $quote "
144 "NOEIGHTBIT"
145 "emacs key bindings "
146 "^a beginning of line ^i tab ^r restore word "
-147 "^b back 1 char ^j undel char ^t top of text "
-148 "^c command ^k delete line ^u bottom of text "
+147 "^b back 1 char ^j undel char ^t begin of file "
+148 "^c command ^k delete line ^u end of file "
149 "^d delete char ^l undelete line ^v next page "
150 "^e end of line ^m newline ^w delete word "
151 "^f forward 1 char ^n next line ^x search "
@@ -164,7 +165,7 @@ $quote "
154 "^[ (escape) menu ^y search prompt ^k delete line ^p prev li ^g prev page"
155 "^o ascii code ^x search ^l undelete line ^n next li ^v next page"
156 "^u end of file ^a begin of line ^w delete word ^b back 1 char "
-157 "^t top of text ^e end of line ^r restore word ^f forward 1 char "
+157 "^t begin of file ^e end of line ^r restore word ^f forward 1 char "
158 "^c command ^d delete char ^j undelete char ^z next word "
159 "EMACS"
160 "NOEMACS"
diff --git a/usr.bin/ee/Artistic b/usr.bin/ee/Artistic
deleted file mode 100644
index fbf798977589..000000000000
--- a/usr.bin/ee/Artistic
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
- The "Artistic License"
-
- Preamble
-
-The intent of this document is to state the conditions under which a
-Package may be copied, such that the Copyright Holder maintains some
-semblance of artistic control over the development of the package,
-while giving the users of the package the right to use and distribute
-the Package in a more-or-less customary fashion, plus the right to make
-reasonable modifications.
-
-Definitions:
-
- "Package" refers to the collection of files distributed by the
- Copyright Holder, and derivatives of that collection of files
- created through textual modification.
-
- "Standard Version" refers to such a Package if it has not been
- modified, or has been modified in accordance with the wishes
- of the Copyright Holder.
-
- "Copyright Holder" is whoever is named in the copyright or
- copyrights for the package.
-
- "You" is you, if you're thinking about copying or distributing
- this Package.
-
- "Reasonable copying fee" is whatever you can justify on the
- basis of media cost, duplication charges, time of people involved,
- and so on. (You will not be required to justify it to the
- Copyright Holder, but only to the computing community at large
- as a market that must bear the fee.)
-
- "Freely Available" means that no fee is charged for the item
- itself, though there may be fees involved in handling the item.
- It also means that recipients of the item may redistribute it
- under the same conditions they received it.
-
-1. You may make and give away verbatim copies of the source form of the
-Standard Version of this Package without restriction, provided that you
-duplicate all of the original copyright notices and associated disclaimers.
-
-2. You may apply bug fixes, portability fixes and other modifications
-derived from the Public Domain or from the Copyright Holder. A Package
-modified in such a way shall still be considered the Standard Version.
-
-3. You may otherwise modify your copy of this Package in any way, provided
-that you insert a prominent notice in each changed file stating how and
-when you changed that file, and provided that you do at least ONE of the
-following:
-
- a) place your modifications in the Public Domain or otherwise make them
- Freely Available, such as by posting said modifications to Usenet or
- an equivalent medium, or placing the modifications on a major archive
- site such as uunet.uu.net, or by allowing the Copyright Holder to include
- your modifications in the Standard Version of the Package.
-
- b) use the modified Package only within your corporation or organization.
-
- c) rename any non-standard executables so the names do not conflict
- with standard executables, which must also be provided, and provide
- a separate manual page for each non-standard executable that clearly
- documents how it differs from the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
-4. You may distribute the programs of this Package in object code or
-executable form, provided that you do at least ONE of the following:
-
- a) distribute a Standard Version of the executables and library files,
- together with instructions (in the manual page or equivalent) on where
- to get the Standard Version.
-
- b) accompany the distribution with the machine-readable source of
- the Package with your modifications.
-
- c) accompany any non-standard executables with their corresponding
- Standard Version executables, giving the non-standard executables
- non-standard names, and clearly documenting the differences in manual
- pages (or equivalent), together with instructions on where to get
- the Standard Version.
-
- d) make other distribution arrangements with the Copyright Holder.
-
-5. You may charge a reasonable copying fee for any distribution of this
-Package. You may charge any fee you choose for support of this Package.
-You may not charge a fee for this Package itself. However,
-you may distribute this Package in aggregate with other (possibly
-commercial) programs as part of a larger (possibly commercial) software
-distribution provided that you do not advertise this Package as a
-product of your own.
-
-6. The scripts and library files supplied as input to or produced as
-output from the programs of this Package do not automatically fall
-under the copyright of this Package, but belong to whomever generated
-them, and may be sold commercially, and may be aggregated with this
-Package.
-
-7. C subroutines supplied by you and linked into this Package in order
-to emulate subroutines and variables of the language defined by this
-Package shall not be considered part of this Package, but are the
-equivalent of input as in Paragraph 6, provided these subroutines do
-not change the language in any way that would cause it to fail the
-regression tests for the language.
-
-8. The name of the Copyright Holder may not be used to endorse or promote
-products derived from this software without specific prior written permission.
-
-9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
-IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
- The End
diff --git a/usr.bin/ee/FREEBSD-upgrade b/usr.bin/ee/FREEBSD-upgrade
deleted file mode 100644
index 3bca6abb4b8c..000000000000
--- a/usr.bin/ee/FREEBSD-upgrade
+++ /dev/null
@@ -1,28 +0,0 @@
-$FreeBSD$
-
-Hugh F. Mahon's EasyEditor
- originals can be found at: http://mahon.cwx.net/
- http://www.users.qwest.net/~hmahon/
-
-Imported by:
-
- cvs import -m "Virgin import of Hugh F. Mahon's EasyEditor 1.4.1." \
- src/usr.bin/ee HUGH_F_MAHON ee_1_4_1
-
-Notes:
- 1. Due to an error this release was imported as 1.4.1, while in fact
- it is version 1.4.2.
-
- 2. Due to historical reasons files layout has been changed from the
- vendor's one. The following log shows details:
-
- $ tar xvfz tar xvfz ee-1.4.2.src.tgz
- $ cd easyedit
- $ rm Makefile create.make genstr make.default
- $ mv README.ee README
- $ mkdir -p nls/en_US.US-ASCII
- $ mv ee.msg nls/en_US.US-ASCII/
-
-
-sobomax@FreeBSD.org
-27 May 2000
diff --git a/usr.bin/ee/Makefile b/usr.bin/ee/Makefile
index 8fdc4996fa82..0a75b5f1f37e 100644
--- a/usr.bin/ee/Makefile
+++ b/usr.bin/ee/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.PATH: ${.CURDIR}/../../contrib/ee
+
CFLAGS+= -DCAP -DHAS_NCURSES -DHAS_UNISTD -DHAS_STDARG -DHAS_STDLIB \
-DHAS_CTYPE -DHAS_SYS_IOCTL -DHAS_SYS_WAIT -DSLCT_HDR
@@ -21,7 +23,11 @@ NLSLINKS_de_DE.ISO8859-1= de_AT.ISO8859-1 de_AT.ISO8859-15 de_CH.ISO8859-1 \
NLSSRCFILES=ee.msg
.for lang in ${NLS}
+. if exists(${.CURDIR}/nls/${lang}/ee.msg)
NLSSRCDIR_${lang}= ${.CURDIR}/nls/${lang}
+. else
+NLSSRCDIR_${lang}= ${.CURDIR}/../../contrib/ee
+. endif
.endfor
.include <bsd.prog.mk>
diff --git a/usr.bin/ee/README b/usr.bin/ee/README
deleted file mode 100644
index 8850af245dc0..000000000000
--- a/usr.bin/ee/README
+++ /dev/null
@@ -1,116 +0,0 @@
- THIS MATERIAL IS PROVIDED "AS IS". THERE ARE NO WARRANTIES OF
- ANY KIND WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. Neither Hewlett-Packard nor
- Hugh Mahon shall be liable for errors contained herein, nor for
- incidental or consequential damages in connection with the
- furnishing, performance or use of this material. Neither
- Hewlett-Packard nor Hugh Mahon assumes any responsibility for
- the use or reliability of this software or documentation. This
- software and documentation is totally UNSUPPORTED. There is no
- support contract available. Hewlett-Packard has done NO
- Quality Assurance on ANY of the program or documentation. You
- may find the quality of the materials inferior to supported
- materials.
-
- This software may be distributed under the terms of Larry Wall's
- Artistic license, a copy of which is included in this distribution.
-
- This notice must be included with this software and any
- derivatives.
-
- Any modifications to this software by anyone but the original author
- must be so noted.
-
-
-The editor 'ee' (easy editor) is intended to be a simple, easy to use
-terminal-based screen oriented editor that requires no instruction to
-use. Its primary use would be for people who are new to computers, or who
-use computers only for things like e-mail.
-
-ee's simplified interface is highlighted by the use of pop-up menus which
-make it possible for users to carry out tasks without the need to
-remember commands. An information window at the top of the screen shows
-the user the operations available with control-keys.
-
-ee allows users to use full eight-bit characters. If the host system has
-the capabilities, ee can use message catalogs, which would allow users to
-translate the message catalog into other languages which use eight-bit
-characters. See the file ee.i18n.guide for more details.
-
-ee relies on the virtual memory abilities of the platform it is running on
-and does not have its own memory management capabilities.
-
-I am releasing ee because I hate to see new users and non-computer types
-get frustrated by vi, and would like to see more intuitive interfaces for
-basic tools (both character-based and graphical) become more pervasive.
-Terminal capabilities and communication speeds have evolved considerably
-since the time in which vi's interface was created, allowing much more
-intuitive interfaces to be used. Since character-based I/O won't be
-completely replaced by graphical user interfaces for at least a few more
-years, I'd like to do what I can to make using computers with less
-glamorous interfaces as easy to use as possible. If terminal interfaces
-are still used in ten years, I hope neophytes won't still be stuck with
-only vi.
-
-For a text editor to be easy to use requires a certain set of abilities. In
-order for ee to work, a terminal must have the ability to position the cursor
-on the screen, and should have arrow keys that send unique sequences
-(multiple characters, the first character is an "escape", octal code
-'\033'). All of this information needs to be in a database called "terminfo"
-(System V implementations) or "termcap" (usually used for BSD systems). In
-case the arrow keys do not transmit unique sequences, motion operations are
-mapped to control keys as well, but this at least partially defeats the
-purpose. The curses package is used to handle the I/O which deals with the
-terminal's capabilities.
-
-While ee is based on curses, I have included here the source code to
-new_curse, a subset of curses developed for use with ee. 'curses' often
-will have a defect that reduces the usefulness of the editor relying upon
-it.
-
-The file new_curse.c contains a subset of 'curses', a package for
-applications to use to handle screen output. Unfortunately, curses
-varies from system to system, so I developed new_curse to provide
-consistent behavior across systems. It works on both SystemV and BSD
-systems, and while it can sometimes be slower than other curses packages,
-it will get the information on the screen painted correctly more often
-than vendor supplied curses. Unless problems occur during the building
-of ee, it is recommended that you use new_curse rather than the curses
-supplied with your system.
-
-If you experience problems with data being displayed improperly, check
-your terminal configuration, especially if you're using a terminal
-emulator, and make sure that you are using the right terminfo entry
-before rummaging through code. Terminfo entries often contain
-inaccuracies, or incomplete information, or may not totally match the
-terminal or emulator the terminal information is being used with.
-Complaints that ee isn't working quite right often end up being something
-else (like the terminal emulator being used).
-
-Both ee and new_curse were developed using K&R C (also known as "classic
-C"), but it can also be compiled with ANSI C. You should be able to
-build ee by simply typing "make". A make file which takes into account
-the characteristics of your system will be created, and then ee will be
-built. If there are problems encountered, you will be notified about
-them.
-
-ee is the result of several conflicting design goals. While I know that it
-solves the problems of some users, I also have no doubt that some will decry
-its lack of more features. I will settle for knowing that ee does fulfill
-the needs of a minority (but still large number) of users. The goals of ee
-are:
-
- 1. To be so easy to use as to require no instruction.
- 2. To be easy to compile and, if necessary, port to new platforms
- by people with relatively little knowledge of C and UNIX.
- 3. To have a minimum number of files to be dealt with, for compile
- and installation.
- 4. To have enough functionality to be useful to a large number of
- people.
-
-Hugh Mahon |___|
-h_mahon@fc.hp.com | |
- |\ /|
- | \/ |
-
diff --git a/usr.bin/ee/ee.1 b/usr.bin/ee/ee.1
deleted file mode 100644
index 4da47bc52812..000000000000
--- a/usr.bin/ee/ee.1
+++ /dev/null
@@ -1,623 +0,0 @@
-.\"
-.\" $FreeBSD$
-.\"
-.Dd August 30, 1995
-.Dt EE 1
-.Os
-.Sh NAME
-.Nm ee
-.Nd easy editor
-.Sh SYNOPSIS
-.Nm
-.Op Fl eih
-.Op +#
-.Op Ar
-.Nm ree
-.Op Fl eih
-.Op +#
-.Op Ar
-.Sh DESCRIPTION
-The
-.Nm
-utility
-is a simple screen oriented text editor.
-It is always in text insertion
-mode unless there is a prompt at the bottom of the terminal, or a
-menu present (in a box in the middle of the terminal).
-The
-.Nm ree
-utility is the same as
-.Nm ,
-but restricted to editing the named
-file (no file operations, or shell escapes are allowed).
-.Pp
-For
-.Nm
-to work properly, the environment variable
-.Ev TERM
-must be set to indicate the type of terminal being used.
-For
-example, for an
-.Tn HP 700/92
-terminal, the
-.Ev TERM
-variable should be set to "70092".
-See your System Administrator if
-you need more information.
-.Pp
-The following options are available:
-.Bl -tag -width indent
-.It Fl e
-Turn off expansion of tab character to spaces.
-.It Fl i
-Turn off display of information window at top of terminal.
-.It Fl h
-Turn off highlighting of borders of windows and menus (improves
-performance on some terminals).
-.It Sy +#
-Move the cursor to line '#' at startup.
-.El
-.Ss "Control keys"
-To do anything other than insert text, the user must use the control
-keys (the
-.Li Control
-key, represented by a "^", pressed in conjunction with an
-alphabetic key, e.g., ^a) and function keys available on the keyboard
-(such as
-.Em "Next Page" ,
-.Em "Prev Page" ,
-arrow keys, etc.).
-.Pp
-Since not all terminals have function keys,
-.Nm
-has the basic cursor movement functions assigned to control keys as
-well as more intuitive keys on the keyboard when available.
-For
-instance, to move the cursor up, the user can use the up arrow key,
-or
-.Em ^u .
-.Bl -tag -width indent
-.It ^a
-Prompt for the decimal value of a character to insert.
-.It ^b
-Move to the bottom of the text.
-.It ^c
-Get the prompt for a command.
-.It ^d
-Move the cursor down.
-.It ^e
-Prompt for the string to search for.
-.It ^f
-Undelete the last deleted character.
-.It ^g
-Move to the beginning of the line.
-.It ^h
-Backspace.
-.It ^i
-Tab.
-.It ^j
-Insert a newline.
-.It ^k
-Delete the character the cursor is sitting on.
-.It ^l
-Move the cursor left.
-.It ^m
-Insert a newline.
-.It ^n
-Move to the next page.
-.It ^o
-Move to the end of the line.
-.It ^p
-Move to the previous page.
-.It ^r
-Move the cursor to the right.
-.It ^t
-Move to the top of the text.
-.It ^u
-Move the cursor up.
-.It ^v
-Undelete the last deleted word.
-.It ^w
-Delete the word beginning at the cursor position.
-.It ^x
-Search.
-.It ^y
-Delete from the cursor position to the end of line.
-.It ^z
-Undelete the last deleted line.
-.It ^[ (ESC)
-Pop up menu.
-.El
-.Ss "EMACS keys mode"
-Since many shells provide an Emacs mode (for cursor movement and other editing
-operations), some bindings that may be more useful for people familiar with
-those bindings have been provided.
-These are accessible via the
-.Em settings
-menu, or via the initialization file (see below).
-The mappings are as follows:
-.Bl -tag -width indent
-.It ^a
-Move to the beginning of the line.
-.It ^b
-Back 1 character.
-.It ^c
-Command prompt.
-.It ^d
-Delete character the cursor is sitting on.
-.It ^e
-End of line.
-.It ^f
-Forward 1 character.
-.It ^g
-Go back 1 page.
-.It ^h
-Backspace.
-.It ^i
-Tab.
-.It ^j
-Undelete last deleted character.
-.It ^k
-Delete line.
-.It ^l
-Undelete last deleted line.
-.It ^m
-Insert a newline.
-.It ^n
-Move to the next line.
-.It ^o
-Prompt for the decimal value of a character to insert.
-.It ^p
-Previous line.
-.It ^r
-Restore last deleted word.
-.It ^t
-Move to the top of the text.
-.It ^u
-Move to the bottom of the text.
-.It ^v
-Move to the next page.
-.It ^w
-Delete the word beginning at the cursor position.
-.It ^y
-Prompt for the string to search for.
-.It ^z
-Next word.
-.It ^[ (ESC)
-Pop up menu.
-.El
-.Ss "Function Keys"
-.Bl -tag -width indent
-.It Next Page
-Move to the next page.
-.It Prev Page
-Move to the previous page.
-.It Delete Char
-Delete the character the cursor is on.
-.It Delete Line
-Delete from the cursor to the end of line.
-.It Insert line
-Insert a newline at the cursor position.
-.It Arrow keys
-Move the cursor in the direction indicated.
-.El
-.Ss Commands
-Some operations require more information than a single keystroke can
-provide.
-For the most basic operations, there is a menu that can be
-obtained by pressing the
-.Tn ESC
-key.
-The same operations, and more can be performed by obtaining the
-command prompt (^c) and typing in one of the commands below.
-.Bl -tag -width indent
-.It ! Ns Ar cmd
-Execute
-.Ar cmd
-in a shell.
-.It 0-9
-Move to the line indicated.
-.It case
-Make searches case sensitive.
-.It character
-Display the ASCII value of the character at the cursor.
-.It exit
-Save the edited text, and leave the editor.
-.It expand
-Expand tabs to spaces.
-.It file
-Print the name of the file.
-.It help
-Display help screen.
-.It line
-Display the current line number.
-.It nocase
-Make searches insensitive to case (the default).
-.It noexpand
-Do not expand tab to spaces when the TAB key is pressed.
-.It quit
-Leave the editor without saving changes.
-.It read Ar file
-Read the named
-.Ar file .
-.It write Ar file
-Write the text to the named
-.Ar file .
-.El
-.Ss "Menu Operations"
-Pop-up menus can be obtained by pressing the
-.Em escape
-key (or
-.Em ^[
-if no
-.Em escape
-key is present).
-When in the menu, the escape key can be
-used to leave the menu without performing any operations.
-Use the up and
-down arrow keys, or
-.Em ^u
-for moving up and
-.Em ^d
-for moving down to move to the desired items in the menu, then press
-.Em return
-to perform the indicated task.
-.Pp
-To the left of each menu item is a letter, which if the corresponding
-letter is pressed on the keyboard selects that menu entry.
-.Pp
-The main menu in
-.Nm
-is as follows:
-.Bl -tag -width indent
-.It leave editor
-If changes have been made, the user will get a menu prompting whether or
-not the changes should be saved.
-.It help
-Display a help screen, with all of the keyboard operations and commands.
-.It file operations
-Pop up a menu for selecting whether to read a file, write to a file, or
-save the current contents of the editor, as well as send the contents of
-the editor to a print command (see the section
-.Sx "Initializing ee from a file" ) .
-.It redraw screen
-Provide a means to repaint the screen if the screen has been corrupted.
-.It settings
-Show the current values of the operating modes, and right margin.
-By
-pressing return when the cursor is on a particular item, the value can be
-changed.
-To leave this menu, press the
-.Em escape
-key.
-(See
-.Sx Modes
-below.)
-.It search
-Pop up a menu in which the user may choose to enter a string to search
-for, or search for a string already entered.
-.It miscellaneous
-Pop up a menu that allows the user to format the current paragraph,
-execute a shell command, or check the spelling of the text in the editor.
-.El
-.Ss "Paragraph Formatting"
-Paragraphs are defined for
-.Nm
-by a block of text bounded by:
-.Bl -bullet -width indent
-.It
-Begin or end of file.
-.It
-Line with no characters, or only spaces and/or tabs.
-.It
-Line starting with a period ('.') or right angle bracket ('>').
-.El
-.Pp
-A paragraph may be formatted two ways: explicitly by choosing the
-.Em format paragraph
-menu item, or by setting
-.Nm
-to automatically
-format paragraphs.
-The automatic mode may be set via a menu, or via the
-initialization file.
-.Pp
-There are three states for text operation in
-.Nm :
-free-form, margins,
-and automatic formatting.
-.Pp
-"Free-form" is best used for things like programming.
-There are no
-restrictions on the length of lines, and no formatting takes place.
-.Pp
-"Margins" allows the user to type in text without having to worry about going
-beyond the right margin (the right margin may be set in the
-.Em settings
-menu, the default is for the margin to be the right edge of the
-terminal).
-This is the mode that allows the
-.Em format paragraph
-menu item to work.
-.Pp
-"Automatic formatting" provides word-processor-like behavior.
-The user
-may type in text, while
-.Nm
-will make sure the entire paragraph fits
-within the width of the terminal every time the user inserts a space after
-typing or deleting text.
-Margin observation must also be enabled in order for
-automatic formatting to occur.
-.Ss Modes
-Although
-.Nm
-is a 'modeless' editor (it is in text insertion mode all the
-time), there are modes in some of the things it does.
-These include:
-.Bl -tag -width indent
-.It tab expansion
-Tabs may be inserted as a single tab character, or replaced with spaces.
-.It case sensitivity
-The search operation can be sensitive to whether characters are upper- or
-lower-case, or ignore case completely.
-.It margins observed
-Lines can either be truncated at the right margin, or extend on forever.
-.It auto paragraph formatting
-While typing in text, the editor can try to keep it looking reasonably well
-within the width of the screen.
-.It eightbit characters
-Toggle whether eight bit characters are displayed as their value in angle
-brackets (e.g.\& "<220>") or as a character.
-.It info window
-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
-menu (see above).
-.Ss "Spell Checking"
-There are two ways to have the spelling in the text checked from
-.Nm .
-One is by the traditional
-.Xr spell 1
-command, the other is with the
-optional
-.Nm ispell
-command.
-.Pp
-Using
-.Nm spell ,
-the words that are not recognized will be placed at the top
-of the file.
-For the
-.Nm ispell
-option, the file is written to disk,
-then
-.Nm ispell
-run on the file, and the file read back in once
-.Nm ispell
-has completed making changes to the file.
-.Ss "Printing the contents of the editor"
-The user may select a menu item which prints the contents of the editor.
-The
-.Nm
-utility pipes the text in the editor to the command specified by the
-initialization command
-.Em printcommand
-(see the section
-.Sx Initializing ee from a file
-below).
-The default is to send the contents to
-.Xr lp 1 .
-.Pp
-Whatever the user assigns to
-.Em printcommand
-must take input from
-standard input.
-See your system administrator for more details.
-.Ss "Shell operations"
-Shell commands can be executed from within
-.Nm
-by selecting the
-.Em shell command
-item in the
-.Em miscellaneous
-menu, or by placing an exclamation mark ("!") before the command to
-execute at the
-.Em command:
-prompt.
-Additionally, the user may direct the contents of the edit buffer
-out to a shell operation (via a pipe) by using the left angle bracket
-(">"), followed by a "!" and the shell command to execute.
-The output of
-a shell operation can also be directed into the edit buffer by using a
-right angle bracket ("<") before the exclamation mark.
-These can even be
-used together to send output to a shell operation and read back the
-results into the editor.
-So, if the editor contained a list of words
-to be sorted, they could be sorted by typing the following at the command
-prompt:
-.Dl ><!sort
-This would send the contents of the editor to be piped into the
-.Xr sort 1
-utility and the result would be placed into the edit buffer at the current
-cursor location.
-The old information would have to be deleted by the user.
-.Ss "Initializing ee from a file"
-Since different users have different preferences,
-.Nm
-allows some
-slight configurability.
-There are three possible locations for an
-initialization file for
-.Nm :
-the file
-.Pa /usr/share/misc/init.ee ,
-the file
-.Pa .init.ee
-in the user's home directory, or the file
-.Pa .init.ee
-in the current directory (if different from the home
-directory).
-This allows system administrators to set some preferences for
-the users on a system-wide basis (for example, the
-.Em print
-command),
-and the user to customize settings for particular directories (like one
-for correspondence, and a different directory for programming).
-.Pp
-The file
-.Pa /usr/share/misc/init.ee
-is read first, then
-.Pa $HOME/.init.ee ,
-then
-.Pa .init.ee ,
-with the settings specified by the
-most recent file read taking precedence.
-.Pp
-The following items may be entered in the initialization file:
-.Bl -tag -width indent
-.It case
-Set searches to be case sensitive.
-.It nocase
-Set searches to be insensitive to case (default).
-.It expand
-Cause
-.Nm
-to expand tabs to spaces (default).
-.It noexpand
-Cause
-.Nm
-to insert tabs as a single character.
-.It info
-A small information window is displayed at the top of the terminal
-(default).
-.It noinfo
-Turn off the display of the information window.
-.It margins
-Cause
-.Nm
-to truncate lines at the right margin when the
-cursor passes beyond the right margin as set by the user
-while text is being inserted
-(default).
-.It nomargins
-Allow lines to extend beyond the right margin.
-.It autoformat
-Cause
-.Nm
-to automatically try to format the current paragraph while
-text insertion is occurring.
-.It noautoformat
-Turn off automatic paragraph formatting (default).
-.It printcommand
-Allow the setting of the print command (default: "lp").
-.It rightmargin
-The user can select a value for the right margin (the first column on the
-screen is zero).
-.It highlight
-Turn on highlighting of border of information window and menus (default).
-.It nohighlight
-Turn off highlighting of border of information window and menus.
-.It eightbit
-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
-Turns on emacs key bindings.
-.It noemacs
-Turns off emacs key bindings.
-.El
-.Ss "Save Editor Configuration"
-When using this entry from the
-.Em settings
-menu, the user may choose to save the current configuration of
-the editor (see
-.Sx Initializing ee from a file
-above) to a file named
-.Pa .init.ee
-in the current directory or the user's home directory.
-If a file named
-.Pa .init.ee
-already exists, it will be renamed
-.Pa .init.ee.old .
-.Sh CAVEATS
-THIS MATERIAL IS PROVIDED "AS IS".
-THERE ARE
-NO WARRANTIES OF ANY KIND WITH REGARD TO THIS
-MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE.
-Neither
-Hewlett-Packard nor Hugh Mahon shall be liable
-for errors contained herein, nor for
-incidental or consequential damages in
-connection with the furnishing, performance or
-use of this material.
-Neither Hewlett-Packard
-nor Hugh Mahon assumes any responsibility for
-the use or reliability of this software or
-documentation.
-This software and
-documentation is totally UNSUPPORTED.
-There
-is no support contract available.
-Hewlett-Packard
-has done NO Quality Assurance on ANY
-of the program or documentation.
-You may find
-the quality of the materials inferior to
-supported materials.
-.Pp
-Always make a copy of files that cannot be easily reproduced before
-editing.
-Save files early, and save often.
-.Ss "International Code Set Support"
-The
-.Nm
-utility 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.
-.Sh FILES
-.Bl -tag -width /usr/share/misc/init.ee -compact
-.It Pa /usr/share/misc/init.ee
-.It Pa $HOME/.init.ee
-.It Pa .init.ee
-.El
-.Sh AUTHORS
-The software
-.Nm
-was developed by
-.An Hugh Mahon .
-.Pp
-This software and documentation contains
-proprietary information which is protected by
-copyright.
-All rights are reserved.
-.Pp
-Copyright (c) 1990, 1991, 1992, 1993, 1995, 1996 Hugh Mahon.
-.Sh "SEE ALSO"
-.Xr ispell 1 Pq Pa ports/textproc/ispell ,
-.Xr lpr 1 ,
-.Xr spell 1 ,
-.Xr termcap 5 ,
-.Xr terminfo 5 ,
-.Xr environ 7
diff --git a/usr.bin/ee/ee.c b/usr.bin/ee/ee.c
deleted file mode 100644
index 17ecc310a749..000000000000
--- a/usr.bin/ee/ee.c
+++ /dev/null
@@ -1,5313 +0,0 @@
-/*
- | ee (easy editor)
- |
- | An easy to use, simple screen oriented editor.
- |
- | written by Hugh Mahon
- |
- | THIS MATERIAL IS PROVIDED "AS IS". THERE ARE
- | NO WARRANTIES OF ANY KIND WITH REGARD TO THIS
- | MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE
- | IMPLIED WARRANTIES OF MERCHANTABILITY AND
- | FITNESS FOR A PARTICULAR PURPOSE. Neither
- | Hewlett-Packard nor Hugh Mahon shall be liable
- | for errors contained herein, nor for
- | incidental or consequential damages in
- | connection with the furnishing, performance or
- | use of this material. Neither Hewlett-Packard
- | nor Hugh Mahon assumes any responsibility for
- | the use or reliability of this software or
- | documentation. This software and
- | documentation is totally UNSUPPORTED. There
- | is no support contract available. Hewlett-
- | Packard has done NO Quality Assurance on ANY
- | of the program or documentation. You may find
- | the quality of the materials inferior to
- | supported materials.
- |
- | This software is not a product of Hewlett-Packard, Co., or any
- | other company. No support is implied or offered with this software.
- | You've got the source, and you're on your own.
- |
- | This software may be distributed under the terms of Larry Wall's
- | Artistic license, a copy of which is included in this distribution.
- |
- | This notice must be included with this software and any derivatives.
- |
- | This editor was purposely developed to be simple, both in
- | interface and implementation. This editor was developed to
- | address a specific audience: the user who is new to computers
- | (especially UNIX).
- |
- | ee is not aimed at technical users; for that reason more
- | complex features were intentionally left out. In addition,
- | ee is intended to be compiled by people with little computer
- | experience, which means that it needs to be small, relatively
- | simple in implementation, and portable.
- |
- | This software and documentation contains
- | proprietary information which is protected by
- | copyright. All rights are reserved.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-char *ee_copyright_message =
-"Copyright (c) 1986, 1990, 1991, 1992, 1993, 1994, 1995, 1996 Hugh Mahon ";
-
-char *ee_long_notice[] = {
- "This software and documentation contains",
- "proprietary information which is protected by",
- "copyright. All rights are reserved."
- };
-
-char *version = "@(#) ee, version 1.4.1";
-
-#ifdef NCURSE
-#include "new_curse.h"
-#elif HAS_NCURSES
-#include <ncurses.h>
-#else
-#include <curses.h>
-#endif
-
-#ifdef HAS_CTYPE
-#include <ctype.h>
-#endif
-#include <err.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <paths.h>
-#include <pwd.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef HAS_SYS_WAIT
-#include <sys/wait.h>
-#endif
-#ifdef HAS_STDARG
-#include <stdarg.h>
-#endif
-#ifdef HAS_STDLIB
-#include <stdlib.h>
-#endif
-#include <string.h>
-#ifdef HAS_UNISTD
-#include <unistd.h>
-#endif
-
-#ifndef NO_CATGETS
-#include <locale.h>
-#include <nl_types.h>
-
-nl_catd catalog;
-#else
-#define catgetlocal(a, b) (b)
-#endif /* NO_CATGETS */
-
-#ifndef SIGCHLD
-#define SIGCHLD SIGCLD
-#endif
-
-#define TAB 9
-#define max(a, b) (a > b ? a : b)
-#define min(a, b) (a < b ? a : b)
-
-/*
- | defines for type of data to show in info window
- */
-
-#define CONTROL_KEYS 1
-#define COMMANDS 2
-
-struct text {
- 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 */
- struct text *next_line; /* next line of text */
- struct text *prev_line; /* previous line of text */
- };
-
-struct text *first_line; /* first line of current buffer */
-struct text *dlt_line; /* structure for info on deleted line */
-struct text *curr_line; /* current line cursor is on */
-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*/
- unsigned char *name; /* name of file */
- struct files *next_name;
- };
-
-struct files *top_of_stack = NULL;
-
-int d_wrd_len; /* length of deleted word */
-int position; /* offset in bytes from begin of line */
-int scr_pos; /* horizontal position */
-int scr_vert; /* vertical position on screen */
-int scr_horz; /* horizontal position on screen */
-int tmp_vert, tmp_horz;
-int input_file; /* indicate to read input file */
-int recv_file; /* indicate reading a file */
-int edit; /* continue executing while true */
-int gold; /* 'gold' function key pressed */
-int fildes; /* file descriptor */
-int case_sen; /* case sensitive search flag */
-int last_line; /* last line for text display */
-int last_col; /* last column for text display */
-int horiz_offset = 0; /* offset from left edge of text */
-int clear_com_win; /* flag to indicate com_win needs clearing */
-int text_changes = FALSE; /* indicate changes have been made to text */
-int get_fd; /* file descriptor for reading a file */
-int info_window = TRUE; /* flag to indicate if help window visible */
-int info_type = CONTROL_KEYS; /* flag to indicate type of info to display */
-int expand_tabs = TRUE; /* flag for expanding tabs */
-int right_margin = 0; /* the right margin */
-int observ_margins = TRUE; /* flag for whether margins are observed */
-int shell_fork;
-int temp_stdin; /* temporary storage for stdin */
-int temp_stdout; /* temp storage for stdout descriptor */
-int temp_stderr; /* temp storage for stderr descriptor */
-int pipe_out[2]; /* pipe file desc for output */
-int pipe_in[2]; /* pipe file descriptors for input */
-int out_pipe; /* flag that info is piped out */
-int in_pipe; /* flag that info is piped in */
-int formatted = FALSE; /* flag indicating paragraph formatted */
-int auto_format = FALSE; /* flag for auto_format mode */
-int restricted = FALSE; /* flag to indicate restricted mode */
-int nohighlight = FALSE; /* turns off highlighting */
-int eightbit = TRUE; /* eight bit character flag */
-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 */
-
-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*/
-const char count_text_default[] = "===============================================================================";
-int count_text_len = sizeof(count_text_default); /* length of the line above */
-char count_text[sizeof(count_text_default)]; /* buffer for current position display */
-int in; /* input character */
-
-FILE *temp_fp; /* temporary file pointer */
-FILE *bit_bucket; /* file pointer to /dev/null */
-
-char *table[] = {
- "^@", "^A", "^B", "^C", "^D", "^E", "^F", "^G", "^H", "\t", "^J",
- "^K", "^L", "^M", "^N", "^O", "^P", "^Q", "^R", "^S", "^T", "^U",
- "^V", "^W", "^X", "^Y", "^Z", "^[", "^\\", "^]", "^^", "^_"
- };
-
-WINDOW *com_win;
-WINDOW *text_win;
-WINDOW *help_win;
-WINDOW *info_win;
-WINDOW *count_win;
-
-#if defined(__STDC__) || defined(__cplusplus)
-#define P_(s) s
-#else
-#define P_(s) ()
-#endif
-
-
-/*
- | The following structure allows menu items to be flexibly declared.
- | The first item is the string describing the selection, the second
- | is the address of the procedure to call when the item is selected,
- | and the third is the argument for the procedure.
- |
- | For those systems with i18n, the string should be accompanied by a
- | catalog number. The 'int *' should be replaced with 'void *' on
- | systems with that type.
- |
- | The first menu item will be the title of the menu, with NULL
- | parameters for the procedure and argument, followed by the menu items.
- |
- | If the procedure value is NULL, the menu item is displayed, but no
- | procedure is called when the item is selected. The number of the
- | item will be returned. If the third (argument) parameter is -1, no
- | argument is given to the procedure when it is called.
- */
-
-struct menu_entries {
- char *item_string;
- int (*procedure)P_((struct menu_entries *));
- struct menu_entries *ptr_argument;
- int (*iprocedure)P_((int));
- void (*nprocedure)P_((void));
- int argument;
- };
-
-int main P_((int argc, char *argv[]));
-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_((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, 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));
-unsigned char *next_word P_((unsigned char *string));
-void prev_word P_((void));
-void control P_((void));
-void emacs_control P_((void));
-void bottom P_((void));
-void top P_((void));
-void nextline P_((void));
-void prevline P_((void));
-void left P_((int disp));
-void right P_((int disp));
-void find_pos P_((void));
-void up P_((void));
-void down P_((void));
-void function_key P_((void));
-void print_buffer P_((void));
-void command_prompt P_((void));
-void command P_((char *cmd_str1));
-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, 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, unsigned char *in_string, int *append));
-void draw_screen P_((void));
-void finish P_((void));
-int quit P_((int noverify));
-void edit_abort P_((int arg));
-void delete_text P_((void));
-int write_file P_((char *file_name, int warn_if_exists));
-int search P_((int display_message));
-void search_prompt P_((void));
-void del_char P_((void));
-void undel_char P_((void));
-void del_word P_((void));
-void undel_word P_((void));
-void del_line P_((void));
-void undel_line P_((void));
-void adv_word P_((void));
-void move_rel P_((char *direction, int lines));
-void eol P_((void));
-void bol P_((void));
-void adv_line P_((void));
-void sh_command P_((char *string));
-void set_up_term P_((void));
-void resize_check P_((void));
-int menu_op P_((struct menu_entries *));
-void paint_menu P_((struct menu_entries menu_list[], int max_width, int max_height, int list_size, int top_offset, WINDOW *menu_win, int off_start, int vert_size));
-void help P_((void));
-void paint_info_win P_((void));
-void no_info_window P_((void));
-void create_info_window P_((void));
-int file_op P_((int arg));
-void shell_op P_((void));
-void leave_op P_((void));
-void redraw P_((void));
-int Blank_Line P_((struct text *test_line));
-void Format P_((void));
-void ee_init P_((void));
-void dump_ee_conf P_((void));
-void echo_string P_((char *string));
-void spell_op P_((void));
-void ispell_op P_((void));
-int first_word_len P_((struct text *test_line));
-void Auto_Format P_((void));
-void modes_op P_((void));
-char *is_in_string P_((char *string, char *substring));
-char *resolve_name P_((char *name));
-int restrict_mode P_((void));
-int unique_test P_((char *string, char *list[]));
-void renumber_lines P_((struct text *firstline, int startnumber));
-void strings_init P_((void));
-
-#undef P_
-/*
- | allocate space here for the strings that will be in the menu
- */
-
-struct menu_entries modes_menu[] = {
- {"", 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[11];
-
-#define NUM_MODES_ITEMS 10
-
-struct menu_entries config_dump_menu[] = {
- {"", NULL, NULL, NULL, NULL, 0},
- {"", NULL, NULL, NULL, NULL, -1},
- {"", NULL, NULL, NULL, NULL, -1},
- {NULL, NULL, NULL, NULL, NULL, -1}
- };
-
-struct menu_entries leave_menu[] = {
- {"", NULL, NULL, NULL, NULL, -1},
- {"", NULL, NULL, NULL, finish, -1},
- {"", NULL, NULL, quit, NULL, TRUE},
- {NULL, NULL, NULL, NULL, NULL, -1}
- };
-
-#define READ_FILE 1
-#define WRITE_FILE 2
-#define SAVE_FILE 3
-
-struct menu_entries file_menu[] = {
- {"", NULL, NULL, NULL, NULL, -1},
- {"", NULL, NULL, file_op, NULL, READ_FILE},
- {"", NULL, NULL, file_op, NULL, WRITE_FILE},
- {"", NULL, NULL, file_op, NULL, SAVE_FILE},
- {"", NULL, NULL, NULL, print_buffer, -1},
- {NULL, NULL, NULL, NULL, NULL, -1}
- };
-
-struct menu_entries search_menu[] = {
- {"", NULL, NULL, NULL, NULL, 0},
- {"", NULL, NULL, NULL, search_prompt, -1},
- {"", NULL, NULL, search, NULL, TRUE},
- {NULL, NULL, NULL, NULL, NULL, -1}
- };
-
-struct menu_entries spell_menu[] = {
- {"", NULL, NULL, NULL, NULL, -1},
- {"", NULL, NULL, NULL, spell_op, -1},
- {"", NULL, NULL, NULL, ispell_op, -1},
- {NULL, NULL, NULL, NULL, NULL, -1}
- };
-
-struct menu_entries misc_menu[] = {
- {"", NULL, NULL, NULL, NULL, -1},
- {"", NULL, NULL, NULL, Format, -1},
- {"", NULL, NULL, NULL, shell_op, -1},
- {"", menu_op, spell_menu, NULL, NULL, -1},
- {NULL, NULL, NULL, NULL, NULL, -1}
- };
-
-struct menu_entries main_menu[] = {
- {"", NULL, NULL, NULL, NULL, -1},
- {"", NULL, NULL, NULL, leave_op, -1},
- {"", NULL, NULL, NULL, help, -1},
- {"", menu_op, file_menu, NULL, NULL, -1},
- {"", NULL, NULL, NULL, redraw, -1},
- {"", NULL, NULL, NULL, modes_op, -1},
- {"", menu_op, search_menu, NULL, NULL, -1},
- {"", menu_op, misc_menu, NULL, NULL, -1},
- {NULL, NULL, NULL, NULL, NULL, -1}
- };
-
-char *help_text[23];
-char *control_keys[5];
-
-char *emacs_help_text[22];
-char *emacs_control_keys[5];
-
-char *command_strings[5];
-char *commands[32];
-char *init_strings[22];
-
-#define MENU_WARN 1
-
-#define max_alpha_char 36
-
-/*
- | Declarations for strings for localization
- */
-
-char *com_win_message; /* to be shown in com_win if no info window */
-char *no_file_string;
-char *ascii_code_str;
-char *printer_msg_str;
-char *command_str;
-char *file_write_prompt_str;
-char *file_read_prompt_str;
-char *char_str;
-char *unkn_cmd_str;
-char *non_unique_cmd_msg;
-char *line_num_str;
-char *line_len_str;
-char *current_file_str;
-char *usage0;
-char *usage1;
-char *usage2;
-char *usage3;
-char *usage4;
-char *file_is_dir_msg;
-char *new_file_msg;
-char *cant_open_msg;
-char *open_file_msg;
-char *file_read_fin_msg;
-char *reading_file_msg;
-char *read_only_msg;
-char *file_read_lines_msg;
-char *save_file_name_prompt;
-char *file_not_saved_msg;
-char *changes_made_prompt;
-char *yes_char;
-char *file_exists_prompt;
-char *create_file_fail_msg;
-char *writing_file_msg;
-char *file_written_msg;
-char *searching_msg;
-char *str_not_found_msg;
-char *search_prompt_str;
-char *exec_err_msg;
-char *continue_msg;
-char *menu_cancel_msg;
-char *menu_size_err_msg;
-char *press_any_key_msg;
-char *shell_prompt;
-char *formatting_msg;
-char *shell_echo_msg;
-char *spell_in_prog_msg;
-char *margin_prompt;
-char *restricted_msg;
-char *ON;
-char *OFF;
-char *HELP;
-char *WRITE;
-char *READ;
-char *LINE;
-char *FILE_str;
-char *CHARACTER;
-char *REDRAW;
-char *RESEQUENCE;
-char *AUTHOR;
-char *VERSION;
-char *CASE;
-char *NOCASE;
-char *EXPAND;
-char *NOEXPAND;
-char *Exit_string;
-char *QUIT_string;
-char *INFO;
-char *NOINFO;
-char *MARGINS;
-char *NOMARGINS;
-char *AUTOFORMAT;
-char *NOAUTOFORMAT;
-char *Echo;
-char *PRINTCOMMAND;
-char *RIGHTMARGIN;
-char *HIGHLIGHT;
-char *NOHIGHLIGHT;
-char *EIGHTBIT;
-char *NOEIGHTBIT;
-char *EMACS_string;
-char *NOEMACS_string;
-char *conf_dump_err_msg;
-char *conf_dump_success_msg;
-char *conf_not_saved_msg;
-char *ree_no_file_msg;
-char *cancel_string;
-char *menu_too_lrg_msg;
-char *more_above_str, *more_below_str;
-
-char *chinese_cmd, *nochinese_cmd;
-
-
-int
-main(argc, argv) /* beginning of main program */
-int argc;
-char *argv[];
-{
- /* Always read from (and write to) a terminal. */
- if (!isatty(STDIN_FILENO) || !isatty(STDOUT_FILENO)) {
- fprintf(stderr, "ee's standard input and output must be a terminal\n");
- exit(1);
- }
-
- signal(SIGCHLD, SIG_DFL);
- signal(SIGSEGV, SIG_DFL);
- signal(SIGINT, edit_abort);
- signal(SIGHUP, edit_abort);
-
- 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 = 0;
- curr_line = first_line = txtalloc();
- curr_line->line = point = malloc(10);
- curr_line->line_length = 1;
- curr_line->max_length = 10;
- curr_line->prev_line = NULL;
- curr_line->next_line = NULL;
- curr_line->line_number = 1;
- srch_str = NULL;
- u_srch_str = NULL;
- position = 1;
- scr_pos =0;
- scr_vert = 0;
- scr_horz = 0;
- bit_bucket = fopen(_PATH_DEVNULL, "w");
- edit = TRUE;
- gold = case_sen = FALSE;
- shell_fork = TRUE;
- strings_init();
- ee_init();
- if (argc > 0 )
- get_options(argc, argv);
- set_up_term();
- if (right_margin == 0)
- right_margin = COLS - 1;
- if (top_of_stack == NULL)
- {
- if (restrict_mode())
- {
- wmove(com_win, 0, 0);
- werase(com_win);
- wprintw(com_win, ree_no_file_msg);
- wrefresh(com_win);
- edit_abort(0);
- }
- wprintw(com_win, no_file_string);
- wrefresh(com_win);
- }
- else
- check_fp();
-
- clear_com_win = TRUE;
-
- while(edit)
- {
- if (info_window)
- {
- snprintf(count_text, count_text_len, "L: %d C: %d %s", \
- curr_line->line_number, scr_horz + 1, count_text_default);
- wmove(count_win, 0, 0);
- if (!nohighlight)
- wstandout(count_win);
- wprintw(count_win, count_text);
- wstandend(count_win);
- wnoutrefresh(count_win);
- }
-
- wnoutrefresh(text_win);
- doupdate();
- in = wgetch(text_win);
- if (in == -1)
- continue;
-
- resize_check();
-
- if (clear_com_win)
- {
- 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);
- }
-
- 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();
- }
- }
- return(0);
-}
-
-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;
-{
- unsigned char *rpoint;
- int resiz_var;
-
- rline->max_length += factor;
- rpoint = rline->line = realloc(rline->line, rline->max_length );
- for (resiz_var = 1 ; (resiz_var < rpos) ; resiz_var++)
- rpoint++;
- return(rpoint);
-}
-
-void
-insert(character) /* insert character into line */
-int character; /* new character */
-{
- int counter;
- int value;
- unsigned char *temp; /* temporary pointer */
- unsigned char *temp2; /* temporary pointer */
-
- if ((character == '\011') && (expand_tabs))
- {
- counter = len_char('\011', scr_horz);
- for (; counter > 0; counter--)
- insert(' ');
- if (auto_format)
- Auto_Format();
- return;
- }
- text_changes = TRUE;
- if ((curr_line->max_length - curr_line->line_length) < 5)
- point = resiz_line(10, curr_line, position);
- curr_line->line_length++;
- temp = point;
- counter = position;
- while (counter < curr_line->line_length) /* find end of line */
- {
- counter++;
- temp++;
- }
- temp++; /* increase length of line by one */
- while (point < temp)
- {
- temp2=temp - 1;
- *temp= *temp2; /* shift characters over by one */
- temp--;
- }
- *point = character; /* insert new character */
- wclrtoeol(text_win);
- if (((character >= 0) && (character < ' ')) || (character >= 127)) /* check for TAB character*/
- {
- scr_pos = scr_horz += out_char(text_win, character, scr_horz);
- point++;
- position++;
- }
- else
- {
- waddch(text_win, character);
- scr_pos = ++scr_horz;
- point++;
- position ++;
- }
-
- 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 (value = 0; value < counter; value++)
- right(TRUE);
- }
- }
-
- if ((scr_horz - horiz_offset) > last_col)
- {
- horiz_offset += 8;
- midscreen(scr_vert, point);
- }
-
- if ((auto_format) && (character == ' ') && (!formatted))
- Auto_Format();
- else if ((character != ' ') && (character != '\t'))
- formatted = FALSE;
-
- draw_line(scr_vert, scr_horz, point, position, curr_line->line_length);
-}
-
-void
-delete(disp) /* delete character */
-int disp;
-{
- 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;
- 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 -= del_width;
- 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);
- }
- d_char[del_width] = (unsigned char) NULL;
- }
- while (temp_pos <= curr_line->line_length)
- {
- temp_pos++;
- *tp = *temp2;
- tp++;
- temp2++;
- }
- if (scr_horz < horiz_offset)
- {
- horiz_offset -= 8;
- midscreen(scr_vert, point);
- }
- }
- else if (curr_line->prev_line != NULL)
- {
- text_changes = TRUE;
- left(disp); /* go to previous line */
- temp_buff = curr_line->next_line;
- point = resiz_line(temp_buff->line_length, curr_line, position);
- if (temp_buff->next_line != NULL)
- temp_buff->next_line->prev_line = curr_line;
- curr_line->next_line = temp_buff->next_line;
- renumber_lines(curr_line->next_line, curr_line->line_number + 1);
- temp2 = temp_buff->line;
- if (in == 8)
- {
- d_char[0] = '\n';
- d_char[1] = (unsigned char) NULL;
- }
- tp = point;
- temp_pos = 1;
- while (temp_pos < temp_buff->line_length)
- {
- curr_line->line_length++;
- temp_pos++;
- *tp = *temp2;
- tp++;
- temp2++;
- }
- *tp = (char) NULL;
- free(temp_buff->line);
- free(temp_buff);
- temp_buff = curr_line;
- temp_vert = scr_vert;
- scr_pos = scr_horz;
- if (scr_vert < last_line)
- {
- wmove(text_win, scr_vert + 1, 0);
- wdeleteln(text_win);
- }
- while ((temp_buff != NULL) && (temp_vert < last_line))
- {
- temp_buff = temp_buff->next_line;
- temp_vert++;
- }
- if ((temp_vert == last_line) && (temp_buff != NULL))
- {
- tp = temp_buff->line;
- wmove(text_win, last_line,0);
- wclrtobot(text_win);
- draw_line(last_line, 0, tp, 1, temp_buff->line_length);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- }
- }
- draw_line(scr_vert, scr_horz, point, position, curr_line->line_length);
- formatted = FALSE;
-}
-
-void
-scanline(pos) /* find the proper horizontal position for the pointer */
-unsigned char *pos;
-{
- int temp;
- unsigned char *ptr;
-
- ptr = curr_line->line;
- temp = 0;
- while (ptr < pos)
- {
- if (*ptr <= 8)
- temp += 2;
- else if (*ptr == 9)
- temp += tabshift(temp);
- else if ((*ptr >= 10) && (*ptr <= 31))
- temp += 2;
- else if ((*ptr >= 32) && (*ptr < 127))
- temp++;
- else if (*ptr == 127)
- temp += 2;
- else if (!eightbit)
- temp += 5;
- else
- temp++;
- ptr++;
- }
- scr_horz = temp;
- if ((scr_horz - horiz_offset) > last_col)
- {
- horiz_offset = (scr_horz - (scr_horz % 8)) - (COLS - 8);
- midscreen(scr_vert, point);
- }
- else if (scr_horz < horiz_offset)
- {
- horiz_offset = max(0, (scr_horz - (scr_horz % 8)));
- midscreen(scr_vert, point);
- }
-}
-
-int
-tabshift(temp_int) /* give the number of spaces to shift */
-int temp_int;
-{
- int leftover;
-
- leftover = ((temp_int + 1) % 8);
- if (leftover == 0)
- return (1);
- else
- return (9 - leftover);
-}
-
-int
-out_char(window, character, column) /* output non-printing character */
-WINDOW *window;
-char character;
-int column;
-{
- int i1, i2;
- unsigned char *string;
- char string2[8];
-
- if (character == TAB)
- {
- i1 = tabshift(column);
- for (i2 = 0;
- (i2 < i1) && (((column+i2+1)-horiz_offset) < last_col); i2++)
- {
- waddch(window, ' ');
- }
- return(i1);
- }
- else if ((character >= '\0') && (character < ' '))
- {
- string = table[(int) character];
- }
- else if ((character < 0) || (character >= 127))
- {
- if (character == 127)
- string = "^?";
- else if (!eightbit)
- {
- sprintf(string2, "<%d>", (character < 0) ? (character + 256) : character);
- string = string2;
- }
- else
- {
- waddch(window, (unsigned char)character );
- return(1);
- }
- }
- else
- {
- waddch(window, (unsigned char)character);
- return(1);
- }
- for (i2 = 0; (string[i2] != (char) NULL) && (((column+i2+1)-horiz_offset) < last_col); i2++)
- waddch(window, string[i2]);
- return(strlen(string));
-}
-
-int
-len_char(character, column) /* return the length of the character */
-char character;
-int column; /* the column must be known to provide spacing for tabs */
-{
- int length;
-
- if (character == '\t')
- length = tabshift(column);
- else if ((character >= 0) && (character < 32))
- length = 2;
- else if ((character >= 32) && (character <= 126))
- length = 1;
- else if (character == 127)
- length = 2;
- else if (((character > 126) || (character < 0)) && (!eightbit))
- length = 5;
- else
- length = 1;
-
- return(length);
-}
-
-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 */
-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 */
- 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 */
- int posit; /* temporary position indicator within line */
-
- abs_column = horiz;
- column = horiz - horiz_offset;
- row = vertical;
- temp = ptr;
- d = 0;
- posit = t_pos;
- if (column < 0)
- {
- wmove(text_win, row, 0);
- wclrtoeol(text_win);
- }
- while (column < 0)
- {
- 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 ((*temp < 32) || (*temp >= 127))
- {
- column += len_char(*temp, abs_column);
- abs_column += out_char(text_win, *temp, abs_column);
- }
- else
- {
- abs_column++;
- column++;
- waddch(text_win, *temp);
- }
- posit++;
- temp++;
- }
- if (column < last_col)
- wclrtoeol(text_win);
- wmove(text_win, vertical, (horiz - horiz_offset));
-}
-
-void
-insert_line(disp) /* insert new line */
-int disp;
-{
- int temp_pos;
- int temp_pos2;
- unsigned char *temp;
- unsigned char *extra;
- struct text *temp_nod;
-
- text_changes = TRUE;
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- wclrtoeol(text_win);
- temp_nod= txtalloc();
- temp_nod->line = extra= malloc(10);
- temp_nod->line_length = 1;
- temp_nod->max_length = 10;
- temp_nod->next_line = curr_line->next_line;
- renumber_lines(temp_nod, curr_line->line_number + 1);
- if (temp_nod->next_line != NULL)
- temp_nod->next_line->prev_line = temp_nod;
- temp_nod->prev_line = curr_line;
- curr_line->next_line = temp_nod;
- temp_pos2 = position;
- temp = point;
- if (temp_pos2 < curr_line->line_length)
- {
- temp_pos = 1;
- while (temp_pos2 < curr_line->line_length)
- {
- if ((temp_nod->max_length - temp_nod->line_length)< 5)
- extra = resiz_line(10, temp_nod, temp_pos);
- temp_nod->line_length++;
- temp_pos++;
- temp_pos2++;
- *extra= *temp;
- extra++;
- temp++;
- }
- temp=point;
- *temp = (char) NULL;
- temp = resiz_line((1 - temp_nod->line_length), curr_line, position);
- curr_line->line_length = 1 + temp - curr_line->line;
- }
- curr_line->line_length = position;
- curr_line = temp_nod;
- *extra = (char) NULL;
- position = 1;
- point= curr_line->line;
- if (disp)
- {
- if (scr_vert < last_line)
- {
- scr_vert++;
- wclrtoeol(text_win);
- wmove(text_win, scr_vert, 0);
- winsertln(text_win);
- }
- else
- {
- wmove(text_win, 0,0);
- wdeleteln(text_win);
- wmove(text_win, last_line,0);
- wclrtobot(text_win);
- }
- scr_pos = scr_horz = 0;
- if (horiz_offset)
- {
- horiz_offset = 0;
- midscreen(scr_vert, point);
- }
- draw_line(scr_vert, scr_horz, point, position,
- curr_line->line_length);
- }
-}
-
-struct text *txtalloc() /* allocate space for line structure */
-{
- return((struct text *) malloc(sizeof( struct text)));
-}
-
-struct files *name_alloc() /* allocate space for file name list node */
-{
- return((struct files *) malloc(sizeof( struct files)));
-}
-
-unsigned char *next_word(string) /* move to next word in string */
-unsigned char *string;
-{
- while ((*string != (char) NULL) && ((*string != 32) && (*string != 9)))
- string++;
- while ((*string != (char) NULL) && ((*string == 32) || (*string == 9)))
- string++;
- return(string);
-}
-
-void
-prev_word() /* move to start of previous word in text */
-{
- if (position != 1)
- {
- if ((position != 1) && ((point[-1] == ' ') || (point[-1] == '\t')))
- { /* if at the start of a word */
- while ((position != 1) && ((*point != ' ') && (*point != '\t')))
- left(TRUE);
- }
- while ((position != 1) && ((*point == ' ') || (*point == '\t')))
- left(TRUE);
- while ((position != 1) && ((*point != ' ') && (*point != '\t')))
- left(TRUE);
- if ((position != 1) && ((*point == ' ') || (*point == '\t')))
- right(TRUE);
- }
- else
- left(TRUE);
-}
-
-void
-control() /* use control for commands */
-{
- char *string;
-
- if (in == 1) /* control a */
- {
- string = get_string(ascii_code_str, TRUE);
- if (*string != (char) NULL)
- {
- in = atoi(string);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- insert(in);
- }
- free(string);
- }
- else if (in == 2) /* control b */
- bottom();
- else if (in == 3) /* control c */
- {
- command_prompt();
- }
- else if (in == 4) /* control d */
- down();
- else if (in == 5) /* control e */
- search_prompt();
- else if (in == 6) /* control f */
- undel_char();
- else if (in == 7) /* control g */
- bol();
- else if (in == 8) /* control h */
- delete(TRUE);
- else if (in == 9) /* control i */
- ;
- else if (in == 10) /* control j */
- insert_line(TRUE);
- else if (in == 11) /* control k */
- del_char();
- else if (in == 12) /* control l */
- left(TRUE);
- else if (in == 13) /* control m */
- insert_line(TRUE);
- else if (in == 14) /* control n */
- move_rel("d", max(5, (last_line - 5)));
- else if (in == 15) /* control o */
- eol();
- else if (in == 16) /* control p */
- move_rel("u", max(5, (last_line - 5)));
- else if (in == 17) /* control q */
- ;
- else if (in == 18) /* control r */
- right(TRUE);
- else if (in == 19) /* control s */
- ;
- else if (in == 20) /* control t */
- top();
- else if (in == 21) /* control u */
- up();
- else if (in == 22) /* control v */
- undel_word();
- else if (in == 23) /* control w */
- del_word();
- else if (in == 24) /* control x */
- search(TRUE);
- else if (in == 25) /* control y */
- del_line();
- else if (in == 26) /* control z */
- undel_line();
- else if (in == 27) /* control [ (escape) */
- {
- menu_op(main_menu);
- }
-}
-
-/*
- | Emacs control-key bindings
- */
-
-void
-emacs_control()
-{
- char *string;
-
- if (in == 1) /* control a */
- bol();
- else if (in == 2) /* control b */
- left(TRUE);
- else if (in == 3) /* control c */
- {
- command_prompt();
- }
- else if (in == 4) /* control d */
- del_char();
- else if (in == 5) /* control e */
- eol();
- else if (in == 6) /* control f */
- right(TRUE);
- else if (in == 7) /* control g */
- move_rel("u", max(5, (last_line - 5)));
- else if (in == 8) /* control h */
- delete(TRUE);
- else if (in == 9) /* control i */
- ;
- else if (in == 10) /* control j */
- undel_char();
- else if (in == 11) /* control k */
- del_line();
- else if (in == 12) /* control l */
- undel_line();
- else if (in == 13) /* control m */
- insert_line(TRUE);
- else if (in == 14) /* control n */
- down();
- else if (in == 15) /* control o */
- {
- string = get_string(ascii_code_str, TRUE);
- if (*string != (char) NULL)
- {
- in = atoi(string);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- insert(in);
- }
- free(string);
- }
- else if (in == 16) /* control p */
- up();
- else if (in == 17) /* control q */
- ;
- else if (in == 18) /* control r */
- undel_word();
- else if (in == 19) /* control s */
- ;
- else if (in == 20) /* control t */
- top();
- else if (in == 21) /* control u */
- bottom();
- else if (in == 22) /* control v */
- move_rel("d", max(5, (last_line - 5)));
- else if (in == 23) /* control w */
- del_word();
- else if (in == 24) /* control x */
- search(TRUE);
- else if (in == 25) /* control y */
- search_prompt();
- else if (in == 26) /* control z */
- adv_word();
- else if (in == 27) /* control [ (escape) */
- {
- menu_op(main_menu);
- }
-}
-
-void
-bottom() /* go to bottom of file */
-{
- while (curr_line->next_line != NULL)
- curr_line = curr_line->next_line;
- point = curr_line->line;
- if (horiz_offset)
- horiz_offset = 0;
- position = 1;
- midscreen(last_line, point);
- scr_pos = scr_horz;
-}
-
-void
-top() /* go to top of file */
-{
- while (curr_line->prev_line != NULL)
- curr_line = curr_line->prev_line;
- point = curr_line->line;
- if (horiz_offset)
- horiz_offset = 0;
- position = 1;
- midscreen(0, point);
- scr_pos = scr_horz;
-}
-
-void
-nextline() /* move pointers to start of next line */
-{
- curr_line = curr_line->next_line;
- point = curr_line->line;
- position = 1;
- if (scr_vert == last_line)
- {
- wmove(text_win, 0,0);
- wdeleteln(text_win);
- wmove(text_win, last_line,0);
- wclrtobot(text_win);
- draw_line(last_line,0,point,1,curr_line->line_length);
- }
- else
- scr_vert++;
-}
-
-void
-prevline() /* move pointers to start of previous line*/
-{
- curr_line = curr_line->prev_line;
- point = curr_line->line;
- position = 1;
- if (scr_vert == 0)
- {
- winsertln(text_win);
- draw_line(0,0,point,1,curr_line->line_length);
- }
- else
- scr_vert--;
- while (position < curr_line->line_length)
- {
- position++;
- point++;
- }
-}
-
-void
-left(disp) /* move left one character */
-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);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- scr_pos = scr_horz;
- }
- else if (curr_line->prev_line != NULL)
- {
- if (!disp)
- {
- curr_line = curr_line->prev_line;
- point = curr_line->line + curr_line->line_length;
- position = curr_line->line_length;
- return;
- }
- position = 1;
- prevline();
- scanline(point);
- scr_pos = scr_horz;
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- }
-}
-
-void
-right(disp) /* move right one character */
-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);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- scr_pos = scr_horz;
- }
- else if (curr_line->next_line != NULL)
- {
- if (!disp)
- {
- curr_line = curr_line->next_line;
- point = curr_line->line;
- position = 1;
- return;
- }
- nextline();
- scr_pos = scr_horz = 0;
- if (horiz_offset)
- {
- horiz_offset = 0;
- midscreen(scr_vert, point);
- }
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- position = 1;
- }
-}
-
-void
-find_pos() /* move to the same column as on other line */
-{
- scr_horz = 0;
- position = 1;
- while ((scr_horz < scr_pos) && (position < curr_line->line_length))
- {
- if (*point == 9)
- scr_horz += tabshift(scr_horz);
- 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++;
- point++;
- }
- if ((scr_horz - horiz_offset) > last_col)
- {
- horiz_offset = (scr_horz - (scr_horz % 8)) - (COLS - 8);
- midscreen(scr_vert, point);
- }
- else if (scr_horz < horiz_offset)
- {
- horiz_offset = max(0, (scr_horz - (scr_horz % 8)));
- midscreen(scr_vert, point);
- }
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
-}
-
-void
-up() /* move up one line */
-{
- if (curr_line->prev_line != NULL)
- {
- prevline();
- point = curr_line->line;
- find_pos();
- }
-}
-
-void
-down() /* move down one line */
-{
- if (curr_line->next_line != NULL)
- {
- nextline();
- find_pos();
- }
-}
-
-void
-function_key() /* process function key */
-{
- if (in == KEY_LEFT)
- left(TRUE);
- else if (in == KEY_RIGHT)
- right(TRUE);
- else if (in == KEY_HOME)
- bol();
- else if (in == KEY_END)
- eol();
- else if ( in == KEY_UP)
- up();
- else if (in == KEY_DOWN)
- down();
- else if (in == KEY_NPAGE)
- move_rel("d", max( 5, (last_line - 5)));
- else if (in == KEY_PPAGE)
- move_rel("u", max(5, (last_line - 5)));
- else if (in == KEY_DL)
- del_line();
- else if (in == KEY_DC)
- del_char();
- else if (in == KEY_BACKSPACE)
- delete(TRUE);
- else if (in == KEY_IL)
- { /* insert a line before current line */
- insert_line(TRUE);
- left(TRUE);
- }
- else if (in == KEY_F(1))
- gold = !gold;
- else if (in == KEY_F(2))
- {
- if (gold)
- {
- gold = FALSE;
- undel_line();
- }
- else
- undel_char();
- }
- else if (in == KEY_F(3))
- {
- if (gold)
- {
- gold = FALSE;
- undel_word();
- }
- else
- del_word();
- }
- else if (in == KEY_F(4))
- {
- if (gold)
- {
- gold = FALSE;
- paint_info_win();
- midscreen(scr_vert, point);
- }
- else
- adv_word();
- }
- else if (in == KEY_F(5))
- {
- if (gold)
- {
- gold = FALSE;
- search_prompt();
- }
- else
- search(TRUE);
- }
- else if (in == KEY_F(6))
- {
- if (gold)
- {
- gold = FALSE;
- bottom();
- }
- else
- top();
- }
- else if (in == KEY_F(7))
- {
- if (gold)
- {
- gold = FALSE;
- eol();
- }
- else
- bol();
- }
- else if (in == KEY_F(8))
- {
- if (gold)
- {
- gold = FALSE;
- command_prompt();
- }
- else
- adv_line();
- }
-}
-
-void
-print_buffer()
-{
- char buffer[256];
-
- sprintf(buffer, ">!%s", print_command);
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, printer_msg_str, print_command);
- wrefresh(com_win);
- command(buffer);
-}
-
-void
-command_prompt()
-{
- char *cmd_str;
- int result;
-
- info_type = COMMANDS;
- paint_info_win();
- cmd_str = get_string(command_str, TRUE);
- if ((result = unique_test(cmd_str, commands)) != 1)
- {
- werase(com_win);
- wmove(com_win, 0, 0);
- if (result == 0)
- wprintw(com_win, unkn_cmd_str, cmd_str);
- else
- wprintw(com_win, non_unique_cmd_msg);
-
- wrefresh(com_win);
-
- info_type = CONTROL_KEYS;
- paint_info_win();
-
- if (cmd_str != NULL)
- free(cmd_str);
- return;
- }
- command(cmd_str);
- wrefresh(com_win);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- info_type = CONTROL_KEYS;
- paint_info_win();
- if (cmd_str != NULL)
- free(cmd_str);
-}
-
-void
-command(cmd_str1) /* process commands from keyboard */
-char *cmd_str1;
-{
- char *cmd_str2 = NULL;
- char *cmd_str = cmd_str1;
-
- clear_com_win = TRUE;
- if (compare(cmd_str, HELP, FALSE))
- help();
- else if (compare(cmd_str, WRITE, FALSE))
- {
- if (restrict_mode())
- {
- return;
- }
- cmd_str = next_word(cmd_str);
- if (*cmd_str == (char) NULL)
- {
- cmd_str = cmd_str2 = get_string(file_write_prompt_str, TRUE);
- }
- tmp_file = resolve_name(cmd_str);
- write_file(tmp_file, 1);
- if (tmp_file != cmd_str)
- free(tmp_file);
- }
- else if (compare(cmd_str, READ, FALSE))
- {
- if (restrict_mode())
- {
- return;
- }
- cmd_str = next_word(cmd_str);
- if (*cmd_str == (char) NULL)
- {
- cmd_str = cmd_str2 = get_string(file_read_prompt_str, TRUE);
- }
- tmp_file = cmd_str;
- recv_file = TRUE;
- tmp_file = resolve_name(cmd_str);
- check_fp();
- if (tmp_file != cmd_str)
- free(tmp_file);
- }
- else if (compare(cmd_str, LINE, FALSE))
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, line_num_str, curr_line->line_number);
- wprintw(com_win, line_len_str, curr_line->line_length);
- }
- else if (compare(cmd_str, FILE_str, FALSE))
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- if (in_file_name == NULL)
- wprintw(com_win, no_file_string);
- else
- wprintw(com_win, current_file_str, in_file_name);
- }
- else if ((*cmd_str >= '0') && (*cmd_str <= '9'))
- goto_line(cmd_str);
- else if (compare(cmd_str, CHARACTER, FALSE))
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, char_str, *point);
- }
- else if (compare(cmd_str, REDRAW, FALSE))
- redraw();
- else if (compare(cmd_str, RESEQUENCE, FALSE))
- {
- tmp_line = first_line->next_line;
- while (tmp_line != NULL)
- {
- tmp_line->line_number = tmp_line->prev_line->line_number + 1;
- tmp_line = tmp_line->next_line;
- }
- }
- else if (compare(cmd_str, AUTHOR, FALSE))
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, "written by Hugh Mahon");
- }
- else if (compare(cmd_str, VERSION, FALSE))
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, "%s", version);
- }
- else if (compare(cmd_str, CASE, FALSE))
- case_sen = TRUE;
- else if (compare(cmd_str, NOCASE, FALSE))
- case_sen = FALSE;
- else if (compare(cmd_str, EXPAND, FALSE))
- expand_tabs = TRUE;
- else if (compare(cmd_str, NOEXPAND, FALSE))
- 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 == '!')
- {
- cmd_str++;
- if ((*cmd_str == ' ') || (*cmd_str == 9))
- cmd_str = next_word(cmd_str);
- sh_command(cmd_str);
- }
- else if ((*cmd_str == '<') && (!in_pipe))
- {
- in_pipe = TRUE;
- shell_fork = FALSE;
- cmd_str++;
- if ((*cmd_str == ' ') || (*cmd_str == '\t'))
- cmd_str = next_word(cmd_str);
- command(cmd_str);
- in_pipe = FALSE;
- shell_fork = TRUE;
- }
- else if ((*cmd_str == '>') && (!out_pipe))
- {
- out_pipe = TRUE;
- cmd_str++;
- if ((*cmd_str == ' ') || (*cmd_str == '\t'))
- cmd_str = next_word(cmd_str);
- command(cmd_str);
- out_pipe = FALSE;
- }
- else
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, unkn_cmd_str, cmd_str);
- }
- if (cmd_str2 != NULL)
- free(cmd_str2);
-}
-
-int
-scan(line, offset, column) /* determine horizontal position for get_string */
-char *line;
-int offset;
-int column;
-{
- char *stemp;
- int i;
- int j;
-
- stemp = line;
- i = 0;
- j = column;
- while (i < offset)
- {
- i++;
- j += len_char(*stemp, j);
- stemp++;
- }
- return(j);
-}
-
-char *
-get_string(prompt, advance) /* read string from input on command line */
-char *prompt; /* string containing user prompt message */
-int advance; /* if true, skip leading spaces and tabs */
-{
- char *string;
- char *tmp_string;
- char *nam_str;
- char *g_point;
- int tmp_int;
- int g_horz, g_position, g_pos;
- int esc_flag;
-
- g_point = tmp_string = malloc(512);
- wmove(com_win,0,0);
- wclrtoeol(com_win);
- waddstr(com_win, prompt);
- wrefresh(com_win);
- nam_str = tmp_string;
- clear_com_win = TRUE;
- g_horz = g_position = scan(prompt, strlen(prompt), 0);
- g_pos = 0;
- do
- {
- esc_flag = FALSE;
- in = wgetch(com_win);
- if (in == -1)
- continue;
- if (((in == 8) || (in == 127) || (in == KEY_BACKSPACE)) && (g_pos > 0))
- {
- tmp_int = g_horz;
- g_pos--;
- g_horz = scan(g_point, g_pos, g_position);
- tmp_int = tmp_int - g_horz;
- for (; 0 < tmp_int; tmp_int--)
- {
- if ((g_horz+tmp_int) < (last_col - 1))
- {
- waddch(com_win, '\010');
- waddch(com_win, ' ');
- waddch(com_win, '\010');
- }
- }
- nam_str--;
- }
- else if ((in != 8) && (in != 127) && (in != '\n') && (in != '\r') && (in < 256))
- {
- if (in == '\026') /* control-v, accept next character verbatim */
- { /* allows entry of ^m, ^j, and ^h */
- esc_flag = TRUE;
- in = wgetch(com_win);
- if (in == -1)
- continue;
- }
- *nam_str = in;
- g_pos++;
- if (((in < ' ') || (in > 126)) && (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, in);
- }
- nam_str++;
- }
- wrefresh(com_win);
- if (esc_flag)
- in = (char) NULL;
- } while ((in != '\n') && (in != '\r'));
- *nam_str = (char) NULL;
- nam_str = tmp_string;
- if (((*nam_str == ' ') || (*nam_str == 9)) && (advance))
- nam_str = next_word(nam_str);
- string = malloc(strlen(nam_str) + 1);
- strcpy(string, nam_str);
- free(tmp_string);
- wrefresh(com_win);
- return(string);
-}
-
-int
-compare(string1, string2, sensitive) /* compare two strings */
-char *string1;
-char *string2;
-int sensitive;
-{
- char *strng1;
- char *strng2;
- int tmp;
- int equal;
-
- strng1 = string1;
- strng2 = string2;
- tmp = 0;
- if ((strng1 == NULL) || (strng2 == NULL) || (*strng1 == (char) NULL) || (*strng2 == (char) NULL))
- return(FALSE);
- equal = TRUE;
- while (equal)
- {
- if (sensitive)
- {
- if (*strng1 != *strng2)
- equal = FALSE;
- }
- else
- {
- if (toupper(*strng1) != toupper(*strng2))
- equal = FALSE;
- }
- strng1++;
- strng2++;
- if ((*strng1 == (char) NULL) || (*strng2 == (char) NULL) || (*strng1 == ' ') || (*strng2 == ' '))
- break;
- tmp++;
- }
- return(equal);
-}
-
-void
-goto_line(cmd_str)
-char *cmd_str;
-{
- int number;
- int i;
- char *ptr;
- char *direction = NULL;
- struct text *t_line;
-
- ptr = cmd_str;
- i= 0;
- while ((*ptr >='0') && (*ptr <= '9'))
- {
- i= i * 10 + (*ptr - '0');
- ptr++;
- }
- number = i;
- i = 0;
- t_line = curr_line;
- while ((t_line->line_number > number) && (t_line->prev_line != NULL))
- {
- i++;
- t_line = t_line->prev_line;
- direction = "u";
- }
- while ((t_line->line_number < number) && (t_line->next_line != NULL))
- {
- i++;
- direction = "d";
- t_line = t_line->next_line;
- }
- if ((i < 30) && (i > 0))
- {
- move_rel(direction, i);
- }
- else
- {
- curr_line = t_line;
- point = curr_line->line;
- position = 1;
- midscreen((last_line / 2), point);
- scr_pos = scr_horz;
- }
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, line_num_str, curr_line->line_number);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
-}
-
-void
-midscreen(line, pnt) /* put current line in middle of screen */
-int line;
-unsigned char *pnt;
-{
- struct text *mid_line;
- int i;
-
- line = min(line, last_line);
- mid_line = curr_line;
- for (i = 0; ((i < line) && (curr_line->prev_line != NULL)); i++)
- curr_line = curr_line->prev_line;
- scr_vert = scr_horz = 0;
- wmove(text_win, 0, 0);
- draw_screen();
- scr_vert = i;
- curr_line = mid_line;
- scanline(pnt);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
-}
-
-void
-get_options(numargs, arguments) /* get arguments from command line */
-int numargs;
-char *arguments[];
-{
- char *buff;
- int count;
- struct files *temp_names = NULL;
- char *name;
- char *ptr;
- int no_more_opts = FALSE;
-
- /*
- | see if editor was invoked as 'ree' (restricted mode)
- */
-
- if (!(name = strrchr(arguments[0], '/')))
- name = arguments[0];
- else
- name++;
- if (!strcmp(name, "ree"))
- restricted = TRUE;
-
- top_of_stack = NULL;
- input_file = FALSE;
- recv_file = FALSE;
- count = 1;
- while ((count < numargs) && (!no_more_opts))
- {
- buff = arguments[count];
- if (!strcmp("-i", buff))
- {
- info_window = FALSE;
- }
- else if (!strcmp("-e", buff))
- {
- expand_tabs = FALSE;
- }
- else if (!strcmp("-h", buff))
- {
- nohighlight = TRUE;
- }
- else if (!strcmp("-?", buff))
- {
- fprintf(stderr, usage0, arguments[0]);
- fprintf(stderr, usage1);
- fprintf(stderr, usage2);
- fprintf(stderr, usage3);
- fprintf(stderr, usage4);
- exit(1);
- }
- else if (*buff == '+')
- {
- buff++;
- start_at_line = buff;
- }
- else if (!(strcmp("--", buff)))
- no_more_opts = TRUE;
- else
- {
- count--;
- no_more_opts = TRUE;
- }
- count++;
- }
- while (count < numargs)
- {
- buff = arguments[count];
- if (top_of_stack == NULL)
- {
- temp_names = top_of_stack = name_alloc();
- }
- else
- {
- temp_names->next_name = name_alloc();
- temp_names = temp_names->next_name;
- }
- ptr = temp_names->name = malloc(strlen(buff) + 1);
- while (*buff != (char) NULL)
- {
- *ptr = *buff;
- buff++;
- ptr++;
- }
- *ptr = (char) NULL;
- temp_names->next_name = NULL;
- input_file = TRUE;
- recv_file = TRUE;
- count++;
- }
-}
-
-void
-check_fp() /* open or close files according to flags */
-{
- int line_num;
- int temp;
- struct stat buf;
-
- clear_com_win = TRUE;
- tmp_vert = scr_vert;
- tmp_horz = scr_horz;
- tmp_line = curr_line;
- if (input_file)
- {
- in_file_name = tmp_file = top_of_stack->name;
- top_of_stack = top_of_stack->next_name;
- }
- temp = stat(tmp_file, &buf);
- buf.st_mode &= ~07777;
- if ((temp != -1) && (buf.st_mode != 0100000) && (buf.st_mode != 0))
- {
- wprintw(com_win, file_is_dir_msg, tmp_file);
- wrefresh(com_win);
- if (input_file)
- {
- quit(0);
- return;
- }
- else
- return;
- }
- if ((get_fd = open(tmp_file, O_RDONLY)) == -1)
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- if (input_file)
- wprintw(com_win, new_file_msg, tmp_file);
- else
- wprintw(com_win, cant_open_msg, tmp_file);
- wrefresh(com_win);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- wrefresh(text_win);
- recv_file = FALSE;
- input_file = FALSE;
- return;
- }
- else
- get_file(tmp_file);
-
- recv_file = FALSE;
- line_num = curr_line->line_number;
- scr_vert = tmp_vert;
- scr_horz = tmp_horz;
- if (input_file)
- curr_line= first_line;
- else
- curr_line = tmp_line;
- point = curr_line->line;
- draw_screen();
- if (input_file)
- {
- input_file = FALSE;
- if (start_at_line != NULL)
- {
- line_num = atoi(start_at_line) - 1;
- move_rel("d", line_num);
- line_num = 0;
- start_at_line = NULL;
- }
- }
- else
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- text_changes = TRUE;
- if ((tmp_file != NULL) && (*tmp_file != (char) NULL))
- wprintw(com_win, file_read_fin_msg, tmp_file);
- }
- wrefresh(com_win);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
- wrefresh(text_win);
-}
-
-void
-get_file(file_name) /* read specified file into current buffer */
-char *file_name;
-{
- int can_read; /* file has at least one character */
- int length; /* length of line read by read */
- int append; /* should text be appended to current line */
- struct text *temp_line;
- char ro_flag = FALSE;
-
- if (recv_file) /* if reading a file */
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, reading_file_msg, file_name);
- if (access(file_name, 2)) /* check permission to write */
- {
- if ((errno == ENOTDIR) || (errno == EACCES) || (errno == EROFS) || (errno == ETXTBSY) || (errno == EFAULT))
- {
- wprintw(com_win, read_only_msg);
- ro_flag = TRUE;
- }
- }
- wrefresh(com_win);
- }
- if (curr_line->line_length > 1) /* if current line is not blank */
- {
- insert_line(FALSE);
- left(FALSE);
- append = FALSE;
- }
- else
- append = TRUE;
- can_read = FALSE; /* test if file has any characters */
- while (((length = read(get_fd, in_string, 512)) != 0) && (length != -1))
- {
- can_read = TRUE; /* if set file has at least 1 character */
- get_line(length, in_string, &append);
- }
- if ((can_read) && (curr_line->line_length == 1))
- {
- temp_line = curr_line->prev_line;
- temp_line->next_line = curr_line->next_line;
- if (temp_line->next_line != NULL)
- temp_line->next_line->prev_line = temp_line;
- if (curr_line->line != NULL)
- free(curr_line->line);
- free(curr_line);
- curr_line = temp_line;
- }
- if (input_file) /* if this is the file to be edited display number of lines */
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, file_read_lines_msg, in_file_name, curr_line->line_number);
- if (ro_flag)
- wprintw(com_win, read_only_msg);
- wrefresh(com_win);
- }
- else if (can_read) /* not input_file and file is non-zero size */
- text_changes = TRUE;
-
- if (recv_file) /* if reading a file */
- {
- in = EOF;
- }
-}
-
-void
-get_line(length, in_string, append) /* read string and split into lines */
-int length; /* length of 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 */
-{
- 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 */
- struct text *tline; /* temporary pointer to new line */
- int first_time; /* if TRUE, the first time through the loop */
-
- str2 = in_string;
- num = 0;
- first_time = TRUE;
- while (num < length)
- {
- if (!first_time)
- {
- if (num < length)
- {
- str2++;
- num++;
- }
- }
- else
- first_time = FALSE;
- str1 = str2;
- char_count = 1;
- /* find end of line */
- while ((*str2 != '\n') && (num < length))
- {
- str2++;
- num++;
- char_count++;
- }
- if (!(*append)) /* if not append to current line, insert new one */
- {
- tline = txtalloc(); /* allocate data structure for next line */
- tline->next_line = curr_line->next_line;
- renumber_lines(tline, curr_line->line_number + 1);
- tline->prev_line = curr_line;
- curr_line->next_line = tline;
- if (tline->next_line != NULL)
- tline->next_line->prev_line = tline;
- curr_line = tline;
- curr_line->line = point = (unsigned char *) malloc(char_count);
- curr_line->line_length = char_count;
- curr_line->max_length = char_count;
- }
- else
- {
- point = resiz_line(char_count, curr_line, curr_line->line_length);
- curr_line->line_length += (char_count - 1);
- }
- for (temp_counter = 1; temp_counter < char_count; temp_counter++)
- {
- *point = *str1;
- point++;
- str1++;
- }
- *point = (char) NULL;
- *append = FALSE;
- if ((num == length) && (*str2 != '\n'))
- *append = TRUE;
- }
-}
-
-void
-draw_screen() /* redraw the screen from current postion */
-{
- struct text *temp_line;
- unsigned char *line_out;
- int temp_vert;
-
- temp_line = curr_line;
- temp_vert = scr_vert;
- wclrtobot(text_win);
- while ((temp_line != NULL) && (temp_vert <= last_line))
- {
- line_out = temp_line->line;
- draw_line(temp_vert, 0, line_out, 1, temp_line->line_length);
- temp_vert++;
- temp_line = temp_line->next_line;
- }
- wmove(text_win, temp_vert, 0);
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
-}
-
-void
-finish() /* prepare to exit edit session */
-{
- char *file_name = in_file_name;
-
- /*
- | changes made here should be reflected in the 'save'
- | portion of file_op()
- */
-
- if ((file_name == NULL) || (*file_name == (char) NULL))
- file_name = get_string(save_file_name_prompt, TRUE);
-
- if ((file_name == NULL) || (*file_name == (char) NULL))
- {
- wmove(com_win, 0, 0);
- wprintw(com_win, file_not_saved_msg);
- wclrtoeol(com_win);
- wrefresh(com_win);
- clear_com_win = TRUE;
- return;
- }
-
- tmp_file = resolve_name(file_name);
- if (tmp_file != file_name)
- {
- free(file_name);
- file_name = tmp_file;
- }
-
- if (write_file(file_name, 1))
- {
- text_changes = FALSE;
- quit(0);
- }
-}
-
-int
-quit(noverify) /* exit editor */
-int noverify;
-{
- char *ans;
-
- touchwin(text_win);
- wrefresh(text_win);
- if ((text_changes) && (!noverify))
- {
- ans = get_string(changes_made_prompt, TRUE);
- if (toupper(*ans) == toupper(*yes_char))
- text_changes = FALSE;
- else
- return(0);
- free(ans);
- }
- if (top_of_stack == NULL)
- {
- if (info_window)
- wrefresh(info_win);
- wrefresh(com_win);
- resetty();
- endwin();
- putchar('\n');
- exit(0);
- }
- else
- {
- delete_text();
- recv_file = TRUE;
- input_file = TRUE;
- check_fp();
- text_changes = FALSE;
- }
- return(0);
-}
-
-void
-edit_abort(arg)
-int arg;
-{
- wrefresh(com_win);
- resetty();
- endwin();
- putchar('\n');
- exit(1);
-}
-
-void
-delete_text()
-{
- while (curr_line->next_line != NULL)
- curr_line = curr_line->next_line;
- while (curr_line != first_line)
- {
- free(curr_line->line);
- curr_line = curr_line->prev_line;
- free(curr_line->next_line);
- }
- curr_line->next_line = NULL;
- *curr_line->line = (char) NULL;
- curr_line->line_length = 1;
- curr_line->line_number = 1;
- point = curr_line->line;
- scr_pos = scr_vert = scr_horz = 0;
- position = 1;
-}
-
-int
-write_file(file_name, warn_if_exists)
-char *file_name;
-int warn_if_exists;
-{
- char cr;
- char *tmp_point;
- struct text *out_line;
- int lines, charac;
- int temp_pos;
- int write_flag = TRUE;
-
- charac = lines = 0;
- if (warn_if_exists &&
- ((in_file_name == NULL) || strcmp(in_file_name, file_name)))
- {
- if ((temp_fp = fopen(file_name, "r")))
- {
- tmp_point = get_string(file_exists_prompt, TRUE);
- if (toupper(*tmp_point) == toupper(*yes_char))
- write_flag = TRUE;
- else
- write_flag = FALSE;
- fclose(temp_fp);
- free(tmp_point);
- }
- }
-
- clear_com_win = TRUE;
-
- if (write_flag)
- {
- if ((temp_fp = fopen(file_name, "w")) == NULL)
- {
- clear_com_win = TRUE;
- wmove(com_win,0,0);
- wclrtoeol(com_win);
- wprintw(com_win, create_file_fail_msg, file_name);
- wrefresh(com_win);
- return(FALSE);
- }
- else
- {
- wmove(com_win,0,0);
- wclrtoeol(com_win);
- wprintw(com_win, writing_file_msg, file_name);
- wrefresh(com_win);
- cr = '\n';
- out_line = first_line;
- while (out_line != NULL)
- {
- temp_pos = 1;
- tmp_point= out_line->line;
- while (temp_pos < out_line->line_length)
- {
- putc(*tmp_point, temp_fp);
- tmp_point++;
- temp_pos++;
- }
- charac += out_line->line_length;
- out_line = out_line->next_line;
- putc(cr, temp_fp);
- lines++;
- }
- fclose(temp_fp);
- wmove(com_win,0,0);
- wclrtoeol(com_win);
- wprintw(com_win, file_written_msg, file_name, lines, charac);
- wrefresh(com_win);
- return(TRUE);
- }
- }
- else
- return(FALSE);
-}
-
-int
-search(display_message) /* search for string in srch_str */
-int display_message;
-{
- int lines_moved;
- int iter;
- int found;
-
- if ((srch_str == NULL) || (*srch_str == (char) NULL))
- return(FALSE);
- if (display_message)
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, searching_msg);
- wrefresh(com_win);
- clear_com_win = TRUE;
- }
- lines_moved = 0;
- found = FALSE;
- srch_line = curr_line;
- srch_1 = point;
- if (position < curr_line->line_length)
- srch_1++;
- iter = position + 1;
- while ((!found) && (srch_line != NULL))
- {
- while ((iter < srch_line->line_length) && (!found))
- {
- srch_2 = srch_1;
- if (case_sen) /* if case sensitive */
- {
- srch_3 = srch_str;
- while ((*srch_2 == *srch_3) && (*srch_3 != (char) NULL))
- {
- found = TRUE;
- srch_2++;
- srch_3++;
- } /* end while */
- }
- else /* if not case sensitive */
- {
- srch_3 = u_srch_str;
- while ((toupper(*srch_2) == *srch_3) && (*srch_3 != (char) NULL))
- {
- found = TRUE;
- srch_2++;
- srch_3++;
- }
- } /* end else */
- if (!((*srch_3 == (char) NULL) && (found)))
- {
- found = FALSE;
- if (iter < srch_line->line_length)
- srch_1++;
- iter++;
- }
- }
- if (!found)
- {
- srch_line = srch_line->next_line;
- if (srch_line != NULL)
- srch_1 = srch_line->line;
- iter = 1;
- lines_moved++;
- }
- }
- if (found)
- {
- if (display_message)
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wrefresh(com_win);
- }
- if (lines_moved == 0)
- {
- while (position < iter)
- right(TRUE);
- }
- else
- {
- if (lines_moved < 30)
- {
- move_rel("d", lines_moved);
- while (position < iter)
- right(TRUE);
- }
- else
- {
- curr_line = srch_line;
- point = srch_1;
- position = iter;
- scanline(point);
- scr_pos = scr_horz;
- midscreen((last_line / 2), point);
- }
- }
- }
- else
- {
- if (display_message)
- {
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, str_not_found_msg, srch_str);
- wrefresh(com_win);
- }
- wmove(text_win, scr_vert,(scr_horz - horiz_offset));
- }
- return(found);
-}
-
-void
-search_prompt() /* prompt and read search string (srch_str) */
-{
- if (srch_str != NULL)
- free(srch_str);
- if ((u_srch_str != NULL) && (*u_srch_str != (char) NULL))
- free(u_srch_str);
- srch_str = get_string(search_prompt_str, FALSE);
- gold = FALSE;
- srch_3 = srch_str;
- srch_1 = u_srch_str = malloc(strlen(srch_str) + 1);
- while (*srch_3 != (char) NULL)
- {
- *srch_1 = toupper(*srch_3);
- srch_1++;
- srch_3++;
- }
- *srch_1 = (char) NULL;
- search(TRUE);
-}
-
-void
-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);
- delete(TRUE);
- }
- else
- {
- right(FALSE);
- delete(FALSE);
- }
-}
-
-void
-undel_char() /* undelete last deleted character */
-{
- if (d_char[0] == '\n') /* insert line if last del_char deleted eol */
- insert_line(TRUE);
- else
- {
- in = d_char[0];
- insert(in);
- if (d_char[1] != (unsigned char) NULL)
- {
- in = d_char[1];
- insert(in);
- }
- }
-}
-
-void
-del_word() /* delete word in front of cursor */
-{
- int tposit;
- int difference;
- 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[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;
- while ((tposit < curr_line->line_length) &&
- ((*d_word3 != ' ') && (*d_word3 != '\t')))
- {
- tposit++;
- *d_word2 = *d_word3;
- d_word2++;
- d_word3++;
- }
- while ((tposit < curr_line->line_length) &&
- ((*d_word3 == ' ') || (*d_word3 == '\t')))
- {
- tposit++;
- *d_word2 = *d_word3;
- d_word2++;
- d_word3++;
- }
- *d_word2 = (char) NULL;
- d_wrd_len = difference = d_word2 - d_word;
- d_word2 = point;
- while (tposit < curr_line->line_length)
- {
- tposit++;
- *d_word2 = *d_word3;
- d_word2++;
- d_word3++;
- }
- curr_line->line_length -= difference;
- *d_word2 = (char) NULL;
- 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];
- text_changes = TRUE;
- formatted = FALSE;
-}
-
-void
-undel_word() /* undelete last deleted word */
-{
- int temp;
- int tposit;
- unsigned char *tmp_old_ptr;
- unsigned char *tmp_space;
- unsigned char *tmp_ptr;
- unsigned char *d_word_ptr;
-
- /*
- | resize line to handle undeleted word
- */
- if ((curr_line->max_length - (curr_line->line_length + d_wrd_len)) < 5)
- point = resiz_line(d_wrd_len, curr_line, position);
- tmp_ptr = tmp_space = malloc(curr_line->line_length + d_wrd_len);
- d_word_ptr = d_word;
- temp = 1;
- /*
- | copy d_word contents into temp space
- */
- while (temp <= d_wrd_len)
- {
- temp++;
- *tmp_ptr = *d_word_ptr;
- tmp_ptr++;
- d_word_ptr++;
- }
- tmp_old_ptr = point;
- tposit = position;
- /*
- | copy contents of line from curent position to eol into
- | temp space
- */
- while (tposit < curr_line->line_length)
- {
- temp++;
- tposit++;
- *tmp_ptr = *tmp_old_ptr;
- tmp_ptr++;
- tmp_old_ptr++;
- }
- curr_line->line_length += d_wrd_len;
- tmp_old_ptr = point;
- *tmp_ptr = (char) NULL;
- tmp_ptr = tmp_space;
- tposit = 1;
- /*
- | now copy contents from temp space back to original line
- */
- while (tposit < temp)
- {
- tposit++;
- *tmp_old_ptr = *tmp_ptr;
- tmp_ptr++;
- tmp_old_ptr++;
- }
- *tmp_old_ptr = (char) NULL;
- free(tmp_space);
- draw_line(scr_vert, scr_horz, point, position, curr_line->line_length);
-}
-
-void
-del_line() /* delete from cursor to end of line */
-{
- unsigned char *dl1;
- unsigned char *dl2;
- int tposit;
-
- if (d_line != NULL)
- free(d_line);
- d_line = malloc(curr_line->line_length);
- dl1 = d_line;
- dl2 = point;
- tposit = position;
- while (tposit < curr_line->line_length)
- {
- *dl1 = *dl2;
- dl1++;
- dl2++;
- tposit++;
- }
- dlt_line->line_length = 1 + tposit - position;
- *dl1 = (char) NULL;
- *point = (char) NULL;
- curr_line->line_length = position;
- wclrtoeol(text_win);
- if (curr_line->next_line != NULL)
- {
- right(FALSE);
- delete(FALSE);
- }
- text_changes = TRUE;
-}
-
-void
-undel_line() /* undelete last deleted line */
-{
- 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);
- curr_line->line_length += dlt_line->line_length - 1;
- ud1 = point;
- ud2 = d_line;
- tposit = 1;
- while (tposit < dlt_line->line_length)
- {
- tposit++;
- *ud1 = *ud2;
- ud1++;
- ud2++;
- }
- *ud1 = (char) NULL;
- draw_line(scr_vert, scr_horz,point,position,curr_line->line_length);
-}
-
-void
-adv_word() /* advance to next word */
-{
-while ((position < curr_line->line_length) && ((*point != 32) && (*point != 9)))
- right(TRUE);
-while ((position < curr_line->line_length) && ((*point == 32) || (*point == 9)))
- right(TRUE);
-}
-
-void
-move_rel(direction, lines) /* move relative to current line */
-char *direction;
-int lines;
-{
- int i;
- char *tmp;
-
- if (*direction == 'u')
- {
- scr_pos = 0;
- while (position > 1)
- left(TRUE);
- for (i = 0; i < lines; i++)
- {
- up();
- }
- if ((last_line > 5) && ( scr_vert < 4))
- {
- tmp = point;
- tmp_line = curr_line;
- for (i= 0;(i<5)&&(curr_line->prev_line != NULL); i++)
- {
- up();
- }
- scr_vert = scr_vert + i;
- curr_line = tmp_line;
- point = tmp;
- scanline(point);
- }
- }
- else
- {
- if ((position != 1) && (curr_line->next_line != NULL))
- {
- nextline();
- scr_pos = scr_horz = 0;
- if (horiz_offset)
- {
- horiz_offset = 0;
- midscreen(scr_vert, point);
- }
- }
- else
- adv_line();
- for (i = 1; i < lines; i++)
- {
- down();
- }
- if ((last_line > 10) && (scr_vert > (last_line - 5)))
- {
- tmp = point;
- tmp_line = curr_line;
- for (i=0; (i<5) && (curr_line->next_line != NULL); i++)
- {
- down();
- }
- scr_vert = scr_vert - i;
- curr_line = tmp_line;
- point = tmp;
- scanline(point);
- }
- }
- wmove(text_win, scr_vert, (scr_horz - horiz_offset));
-}
-
-void
-eol() /* go to end of line */
-{
- if (position < curr_line->line_length)
- {
- while (position < curr_line->line_length)
- right(TRUE);
- }
- else if (curr_line->next_line != NULL)
- {
- right(TRUE);
- while (position < curr_line->line_length)
- right(TRUE);
- }
-}
-
-void
-bol() /* move to beginning of line */
-{
- if (point != curr_line->line)
- {
- while (point != curr_line->line)
- left(TRUE);
- }
- else if (curr_line->prev_line != NULL)
- {
- scr_pos = 0;
- up();
- }
-}
-
-void
-adv_line() /* advance to beginning of next line */
-{
- if ((point != curr_line->line) || (scr_pos > 0))
- {
- while (position < curr_line->line_length)
- right(TRUE);
- right(TRUE);
- }
- else if (curr_line->next_line != NULL)
- {
- scr_pos = 0;
- down();
- }
-}
-
-void
-sh_command(string) /* execute shell command */
-char *string; /* string containing user command */
-{
- char *temp_point;
- char *last_slash;
- char *path; /* directory path to executable */
- int parent; /* zero if child, child's pid if parent */
- int value;
- int return_val;
- struct text *line_holder;
-
- if (restrict_mode())
- {
- return;
- }
-
- if (!(path = getenv("SHELL")))
- path = "/bin/sh";
- last_slash = temp_point = path;
- while (*temp_point != (char) NULL)
- {
- if (*temp_point == '/')
- last_slash = ++temp_point;
- else
- temp_point++;
- }
-
- /*
- | if in_pipe is true, then output of the shell operation will be
- | read by the editor, and curses doesn't need to be turned off
- */
-
- if (!in_pipe)
- {
- keypad(com_win, FALSE);
- keypad(text_win, FALSE);
- echo();
- nl();
- noraw();
- resetty();
-
-#ifndef NCURSE
- endwin();
-#endif
- }
-
- if (in_pipe)
- {
- pipe(pipe_in); /* create a pipe */
- parent = fork();
- if (!parent) /* if the child */
- {
-/*
- | child process which will fork and exec shell command (if shell output is
- | to be read by editor)
- */
- in_pipe = FALSE;
-/*
- | redirect stdout to pipe
- */
- temp_stdout = dup(1);
- close(1);
- dup(pipe_in[1]);
-/*
- | redirect stderr to pipe
- */
- temp_stderr = dup(2);
- close(2);
- dup(pipe_in[1]);
- close(pipe_in[1]);
- /*
- | child will now continue down 'if (!in_pipe)'
- | path below
- */
- }
- else /* if the parent */
- {
-/*
- | prepare editor to read from the pipe
- */
- signal(SIGCHLD, SIG_IGN);
- line_holder = curr_line;
- tmp_vert = scr_vert;
- close(pipe_in[1]);
- get_fd = pipe_in[0];
- get_file("");
- close(pipe_in[0]);
- scr_vert = tmp_vert;
- scr_horz = scr_pos = 0;
- position = 1;
- curr_line = line_holder;
- point = curr_line->line;
- out_pipe = FALSE;
- signal(SIGCHLD, SIG_DFL);
-/*
- | since flag "in_pipe" is still TRUE, the path which waits for the child
- | process to die will be avoided.
- | (the pipe is closed, no more output can be expected)
- */
- }
- }
- if (!in_pipe)
- {
- signal(SIGINT, SIG_IGN);
- if (out_pipe)
- {
- pipe(pipe_out);
- }
-/*
- | fork process which will exec command
- */
- parent = fork();
- if (!parent) /* if the child */
- {
- if (shell_fork)
- putchar('\n');
- if (out_pipe)
- {
-/*
- | prepare the child process (soon to exec a shell command) to read from the
- | pipe (which will be output from the editor's buffer)
- */
- close(0);
- dup(pipe_out[0]);
- close(pipe_out[0]);
- close(pipe_out[1]);
- }
- for (value = 1; value < 24; value++)
- signal(value, SIG_DFL);
- execl(path, last_slash, "-c", string, (char *)NULL);
- errx(1, exec_err_msg, path);
- }
- else /* if the parent */
- {
- if (out_pipe)
- {
-/*
- | output the contents of the buffer to the pipe (to be read by the
- | process forked and exec'd above as stdin)
- */
- close(pipe_out[0]);
- line_holder = first_line;
- while (line_holder != NULL)
- {
- write(pipe_out[1], line_holder->line, (line_holder->line_length-1));
- write(pipe_out[1], "\n", 1);
- line_holder = line_holder->next_line;
- }
- close(pipe_out[1]);
- out_pipe = FALSE;
- }
- do
- {
- return_val = wait((int *) 0);
- }
- while ((return_val != parent) && (return_val != -1));
-/*
- | if this process is actually the child of the editor, exit. Here's how it
- | works:
- | The editor forks a process. If output must be sent to the command to be
- | exec'd another process is forked, and that process (the child's child)
- | will exec the command. In this case, "shell_fork" will be FALSE. If no
- | output is to be performed to the shell command, "shell_fork" will be TRUE.
- | If this is the editor process, shell_fork will be true, otherwise this is
- | the child of the edit process.
- */
- if (!shell_fork)
- exit(0);
- }
- signal(SIGINT, edit_abort);
- }
- if (shell_fork)
- {
- printf("%s", continue_msg);
- fflush(stdout);
- while ((in = getchar()) != '\n')
- ;
- }
-
- if (!in_pipe)
- {
- fixterm();
- noecho();
- nonl();
- raw();
- keypad(text_win, TRUE);
- keypad(com_win, TRUE);
- if (info_window)
- clearok(info_win, TRUE);
- }
-
- redraw();
-}
-
-void
-set_up_term() /* set up the terminal for operating with ae */
-{
- if (!curses_initialized)
- {
- initscr();
- savetty();
- noecho();
- raw();
- nonl();
- curses_initialized = TRUE;
- }
-
- if (((LINES > 15) && (COLS >= 80)) && info_window)
- last_line = LINES - 8;
- else
- {
- info_window = FALSE;
- last_line = LINES - 2;
- }
-
- idlok(stdscr, TRUE);
- com_win = newwin(1, COLS, (LINES - 1), 0);
- keypad(com_win, TRUE);
- idlok(com_win, TRUE);
- wrefresh(com_win);
- if (!info_window)
- text_win = newwin((LINES - 1), COLS, 0, 0);
- else
- text_win = newwin((LINES - 7), COLS, 6, 0);
- keypad(text_win, TRUE);
- idlok(text_win, TRUE);
- wrefresh(text_win);
- help_win = newwin((LINES - 1), COLS, 0, 0);
- keypad(help_win, TRUE);
- idlok(help_win, TRUE);
- if (info_window)
- {
- info_type = CONTROL_KEYS;
- info_win = newwin(5, COLS, 0, 0);
- werase(info_win);
- paint_info_win();
- count_win = newwin(1, COLS, 5, 0);
- leaveok(count_win, TRUE);
- wrefresh(count_win);
- }
-
- last_col = COLS - 1;
- local_LINES = LINES;
- local_COLS = COLS;
-
-#ifdef NCURSE
- if (ee_chinese)
- nc_setattrib(A_NC_BIG5);
-#endif /* NCURSE */
-
-}
-
-void
-resize_check()
-{
- if ((LINES == local_LINES) && (COLS == local_COLS))
- return;
-
- if (info_window)
- delwin(info_win);
- delwin(text_win);
- delwin(com_win);
- delwin(help_win);
- delwin(count_win);
- set_up_term();
- redraw();
- wrefresh(text_win);
-}
-
-static char item_alpha[] = "abcdefghijklmnopqrstuvwxyz0123456789 ";
-
-int
-menu_op(menu_list)
-struct menu_entries menu_list[];
-{
- WINDOW *temp_win;
- int max_width, max_height;
- int x_off, y_off;
- int counter;
- int length;
- int input;
- int temp = 0;
- int list_size;
- int top_offset; /* offset from top where menu items start */
- int vert_pos; /* vertical position */
- int vert_size; /* vertical size for menu list item display */
- int off_start = 1; /* offset from start of menu items to start display */
-
-
- /*
- | determine number and width of menu items
- */
-
- list_size = 1;
- while (menu_list[list_size + 1].item_string != NULL)
- list_size++;
- max_width = 0;
- for (counter = 0; counter <= list_size; counter++)
- {
- if ((length = strlen(menu_list[counter].item_string)) > max_width)
- max_width = length;
- }
- max_width += 3;
- 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;
-
- /*
- | make sure that window is large enough to handle menu
- | if not, print error message and return to calling function
- */
-
- if (max_width > COLS)
- {
- wmove(com_win, 0, 0);
- werase(com_win);
- wprintw(com_win, menu_too_lrg_msg);
- wrefresh(com_win);
- clear_com_win = TRUE;
- return(0);
- }
-
- top_offset = 0;
-
- if (list_size > LINES)
- {
- max_height = LINES;
- if (max_height > 11)
- vert_size = max_height - 8;
- else
- vert_size = max_height;
- }
- else
- {
- vert_size = list_size;
- max_height = list_size;
- }
-
- if (LINES >= (vert_size + 8))
- {
- if (menu_list[0].argument != MENU_WARN)
- max_height = vert_size + 8;
- else
- max_height = vert_size + 7;
- top_offset = 4;
- }
- x_off = (COLS - max_width) / 2;
- y_off = (LINES - max_height - 1) / 2;
- temp_win = newwin(max_height, max_width, y_off, x_off);
- keypad(temp_win, TRUE);
-
- paint_menu(menu_list, max_width, max_height, list_size, top_offset, temp_win, off_start, vert_size);
-
- counter = 1;
- vert_pos = 0;
- do
- {
- if (off_start > 2)
- wmove(temp_win, (1 + counter + top_offset - off_start), 3);
- else
- wmove(temp_win, (counter + top_offset - off_start), 3);
-
- wrefresh(temp_win);
- input = wgetch(temp_win);
-
- if (((tolower(input) >= 'a') && (tolower(input) <= 'z')) ||
- ((input >= '0') && (input <= '9')))
- {
- if ((tolower(input) >= 'a') && (tolower(input) <= 'z'))
- {
- temp = 1 + tolower(input) - 'a';
- }
- else if ((input >= '0') && (input <= '9'))
- {
- temp = (2 + 'z' - 'a') + (input - '0');
- }
-
- if (temp <= list_size)
- {
- input = '\n';
- counter = temp;
- }
- }
- else
- {
- switch (input)
- {
- case ' ': /* space */
- case '\004': /* ^d, down */
- case KEY_RIGHT:
- case KEY_DOWN:
- counter++;
- if (counter > list_size)
- counter = 1;
- break;
- case '\010': /* ^h, backspace*/
- case '\025': /* ^u, up */
- case 127: /* ^?, delete */
- case KEY_BACKSPACE:
- case KEY_LEFT:
- case KEY_UP:
- counter--;
- if (counter == 0)
- counter = list_size;
- break;
- case '\033': /* escape key */
- if (menu_list[0].argument != MENU_WARN)
- counter = 0;
- break;
- case '\014': /* ^l */
- case '\022': /* ^r, redraw */
- paint_menu(menu_list, max_width, max_height,
- list_size, top_offset, temp_win,
- off_start, vert_size);
- break;
- default:
- break;
- }
- }
-
- if (((list_size - off_start) >= (vert_size - 1)) &&
- (counter > (off_start + vert_size - 3)) &&
- (off_start > 1))
- {
- if (counter == list_size)
- off_start = (list_size - vert_size) + 2;
- else
- off_start++;
-
- paint_menu(menu_list, max_width, max_height,
- list_size, top_offset, temp_win, off_start,
- vert_size);
- }
- else if ((list_size != vert_size) &&
- (counter > (off_start + vert_size - 2)))
- {
- if (counter == list_size)
- off_start = 2 + (list_size - vert_size);
- else if (off_start == 1)
- off_start = 3;
- else
- off_start++;
-
- paint_menu(menu_list, max_width, max_height,
- list_size, top_offset, temp_win, off_start,
- vert_size);
- }
- else if (counter < off_start)
- {
- if (counter <= 2)
- off_start = 1;
- else
- off_start = counter;
-
- paint_menu(menu_list, max_width, max_height,
- list_size, top_offset, temp_win, off_start,
- vert_size);
- }
- }
- while ((input != '\r') && (input != '\n') && (counter != 0));
-
- werase(temp_win);
- wrefresh(temp_win);
- delwin(temp_win);
-
- if ((menu_list[counter].procedure != NULL) ||
- (menu_list[counter].iprocedure != NULL) ||
- (menu_list[counter].nprocedure != NULL))
- {
- if (menu_list[counter].argument != -1)
- (*menu_list[counter].iprocedure)(menu_list[counter].argument);
- else if (menu_list[counter].ptr_argument != NULL)
- (*menu_list[counter].procedure)(menu_list[counter].ptr_argument);
- else
- (*menu_list[counter].nprocedure)();
- }
-
- if (info_window)
- paint_info_win();
- redraw();
-
- return(counter);
-}
-
-void
-paint_menu(menu_list, max_width, max_height, list_size, top_offset, menu_win,
- off_start, vert_size)
-struct menu_entries menu_list[];
-int max_width, max_height, list_size, top_offset;
-WINDOW *menu_win;
-int off_start, vert_size;
-{
- int counter, temp_int;
-
- werase(menu_win);
-
- /*
- | output top and bottom portions of menu box only if window
- | large enough
- */
-
- if (max_height > vert_size)
- {
- wmove(menu_win, 1, 1);
- if (!nohighlight)
- wstandout(menu_win);
- waddch(menu_win, '+');
- for (counter = 0; counter < (max_width - 4); counter++)
- waddch(menu_win, '-');
- waddch(menu_win, '+');
-
- wmove(menu_win, (max_height - 2), 1);
- waddch(menu_win, '+');
- for (counter = 0; counter < (max_width - 4); counter++)
- waddch(menu_win, '-');
- waddch(menu_win, '+');
- wstandend(menu_win);
- wmove(menu_win, 2, 3);
- 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, menu_cancel_msg);
- }
- if (!nohighlight)
- wstandout(menu_win);
-
- for (counter = 0; counter < (vert_size + top_offset); counter++)
- {
- if (top_offset == 4)
- {
- temp_int = counter + 2;
- }
- else
- temp_int = counter;
-
- wmove(menu_win, temp_int, 1);
- waddch(menu_win, '|');
- wmove(menu_win, temp_int, (max_width - 2));
- waddch(menu_win, '|');
- }
- wstandend(menu_win);
-
- if (list_size > vert_size)
- {
- if (off_start >= 3)
- {
- temp_int = 1;
- wmove(menu_win, top_offset, 3);
- waddstr(menu_win, more_above_str);
- }
- else
- temp_int = 0;
-
- for (counter = off_start;
- ((temp_int + counter - off_start) < (vert_size - 1));
- counter++)
- {
- wmove(menu_win, (top_offset + temp_int +
- (counter - off_start)), 3);
- if (list_size > 1)
- wprintw(menu_win, "%c) ", item_alpha[min((counter - 1), max_alpha_char)]);
- waddstr(menu_win, menu_list[counter].item_string);
- }
-
- wmove(menu_win, (top_offset + (vert_size - 1)), 3);
-
- if (counter == list_size)
- {
- if (list_size > 1)
- wprintw(menu_win, "%c) ", item_alpha[min((counter - 1), max_alpha_char)]);
- wprintw(menu_win, menu_list[counter].item_string);
- }
- else
- wprintw(menu_win, more_below_str);
- }
- else
- {
- for (counter = 1; counter <= list_size; counter++)
- {
- wmove(menu_win, (top_offset + counter - 1), 3);
- if (list_size > 1)
- wprintw(menu_win, "%c) ", item_alpha[min((counter - 1), max_alpha_char)]);
- waddstr(menu_win, menu_list[counter].item_string);
- }
- }
-}
-
-void
-help()
-{
- int counter;
-
- werase(help_win);
- clearok(help_win, TRUE);
- for (counter = 0; counter < 22; counter++)
- {
- wmove(help_win, counter, 0);
- waddstr(help_win, (emacs_keys_mode) ?
- emacs_help_text[counter] : help_text[counter]);
- }
- wrefresh(help_win);
- werase(com_win);
- wmove(com_win, 0, 0);
- wprintw(com_win, press_any_key_msg);
- wrefresh(com_win);
- counter = wgetch(com_win);
- werase(com_win);
- wmove(com_win, 0, 0);
- werase(help_win);
- wrefresh(help_win);
- wrefresh(com_win);
- redraw();
-}
-
-void
-paint_info_win()
-{
- int counter;
-
- if (!info_window)
- return;
-
- werase(info_win);
- for (counter = 0; counter < 5; counter++)
- {
- wmove(info_win, counter, 0);
- wclrtoeol(info_win);
- if (info_type == CONTROL_KEYS)
- waddstr(info_win, (emacs_keys_mode) ?
- emacs_control_keys[counter] : control_keys[counter]);
- else if (info_type == COMMANDS)
- waddstr(info_win, command_strings[counter]);
- }
- wrefresh(info_win);
-}
-
-void
-no_info_window()
-{
- if (!info_window)
- return;
- delwin(info_win);
- delwin(text_win);
- info_window = FALSE;
- last_line = LINES - 2;
- text_win = newwin((LINES - 1), COLS, 0, 0);
- keypad(text_win, TRUE);
- idlok(text_win, TRUE);
- clearok(text_win, TRUE);
- midscreen(scr_vert, point);
- wrefresh(text_win);
- clear_com_win = TRUE;
-}
-
-void
-create_info_window()
-{
- if (info_window)
- return;
- last_line = LINES - 8;
- delwin(text_win);
- text_win = newwin((LINES - 7), COLS, 6, 0);
- keypad(text_win, TRUE);
- idlok(text_win, TRUE);
- werase(text_win);
- info_window = TRUE;
- info_win = newwin(5, COLS, 0, 0);
- werase(info_win);
- info_type = CONTROL_KEYS;
- midscreen(min(scr_vert, last_line), point);
- clearok(info_win, TRUE);
- paint_info_win();
- count_win = newwin(1, COLS, 5, 0);
- leaveok(count_win, TRUE);
- wrefresh(count_win);
- wrefresh(text_win);
- clear_com_win = TRUE;
-}
-
-int
-file_op(arg)
-int arg;
-{
- char *string;
- int flag;
-
- if (restrict_mode())
- {
- return(0);
- }
-
- if (arg == READ_FILE)
- {
- string = get_string(file_read_prompt_str, TRUE);
- recv_file = TRUE;
- tmp_file = resolve_name(string);
- check_fp();
- if (tmp_file != string)
- free(tmp_file);
- free(string);
- }
- else if (arg == WRITE_FILE)
- {
- string = get_string(file_write_prompt_str, TRUE);
- tmp_file = resolve_name(string);
- write_file(tmp_file, 1);
- if (tmp_file != string)
- free(tmp_file);
- free(string);
- }
- else if (arg == SAVE_FILE)
- {
- /*
- | changes made here should be reflected in finish()
- */
-
- if (in_file_name)
- flag = TRUE;
- else
- flag = FALSE;
-
- string = in_file_name;
- if ((string == NULL) || (*string == (char) NULL))
- string = get_string(save_file_name_prompt, TRUE);
- if ((string == NULL) || (*string == (char) NULL))
- {
- wmove(com_win, 0, 0);
- wprintw(com_win, file_not_saved_msg);
- wclrtoeol(com_win);
- wrefresh(com_win);
- clear_com_win = TRUE;
- return(0);
- }
- if (!flag)
- {
- tmp_file = resolve_name(string);
- if (tmp_file != string)
- {
- free(string);
- string = tmp_file;
- }
- }
- if (write_file(string, 1))
- {
- in_file_name = string;
- text_changes = FALSE;
- }
- else if (!flag)
- free(string);
- }
- return(0);
-}
-
-void
-shell_op()
-{
- char *string;
-
- if (((string = get_string(shell_prompt, TRUE)) != NULL) &&
- (*string != (char) NULL))
- {
- sh_command(string);
- free(string);
- }
-}
-
-void
-leave_op()
-{
- if (text_changes)
- {
- menu_op(leave_menu);
- }
- else
- quit(TRUE);
-}
-
-void
-redraw()
-{
- if (info_window)
- {
- clearok(info_win, TRUE);
- paint_info_win();
- }
- else
- clearok(text_win, TRUE);
- midscreen(scr_vert, point);
-}
-
-/*
- | The following routines will "format" a paragraph (as defined by a
- | block of text with blank lines before and after the block).
- */
-
-int
-Blank_Line(test_line) /* test if line has any non-space characters */
-struct text *test_line;
-{
- unsigned char *line;
- int length;
-
- if (test_line == NULL)
- return(TRUE);
-
- length = 1;
- line = test_line->line;
-
- /*
- | To handle troff/nroff documents, consider a line with a
- | period ('.') in the first column to be blank. To handle mail
- | messages with included text, consider a line with a '>' blank.
- */
-
- if ((*line == '.') || (*line == '>'))
- return(TRUE);
-
- while (((*line == ' ') || (*line == '\t')) && (length < test_line->line_length))
- {
- length++;
- line++;
- }
- if (length != test_line->line_length)
- return(FALSE);
- else
- return(TRUE);
-}
-
-void
-Format() /* format the paragraph according to set margins */
-{
- int string_count;
- int offset;
- int temp_case;
- int status;
- int tmp_af;
- int counter;
- 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,
- | do not format the current paragraph
- */
-
- if ((!observ_margins) || (Blank_Line(curr_line)))
- return;
-
-/*
- | save the currently set flags, and clear them
- */
-
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, formatting_msg);
- wrefresh(com_win);
-
-/*
- | get current position in paragraph, so after formatting, the cursor
- | will be in the same relative position
- */
-
- tmp_af = auto_format;
- auto_format = FALSE;
- offset = position;
- if (position != 1)
- prev_word();
- temp_dword = d_word;
- d_word = NULL;
- temp_case = case_sen;
- case_sen = TRUE;
- tmp_srchstr = srch_str;
- temp2 = srch_str = (unsigned char *) malloc(1 + curr_line->line_length - position);
- if ((*point == ' ') || (*point == '\t'))
- adv_word();
- offset -= position;
- counter = position;
- line = temp1 = point;
- while ((*temp1 != (char) NULL) && (*temp1 != ' ') && (*temp1 != '\t') && (counter < curr_line->line_length))
- {
- *temp2 = *temp1;
- temp2++;
- temp1++;
- counter++;
- }
- *temp2 = (char) NULL;
- if (position != 1)
- bol();
- while (!Blank_Line(curr_line->prev_line))
- bol();
- string_count = 0;
- status = TRUE;
- while ((line != point) && (status))
- {
- status = search(FALSE);
- string_count++;
- }
-
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, formatting_msg);
- wrefresh(com_win);
-
-/*
- | now get back to the start of the paragraph to start formatting
- */
-
- if (position != 1)
- bol();
- while (!Blank_Line(curr_line->prev_line))
- bol();
-
- observ_margins = FALSE;
-
-/*
- | Start going through lines, putting spaces at end of lines if they do
- | not already exist. Append lines together to get one long line, and
- | eliminate spacing at begin of lines.
- */
-
- while (!Blank_Line(curr_line->next_line))
- {
- eol();
- left(TRUE);
- if (*point != ' ')
- {
- right(TRUE);
- insert(' ');
- }
- else
- right(TRUE);
- del_char();
- if ((*point == ' ') || (*point == '\t'))
- del_word();
- }
-
-/*
- | Now there is one long line. Eliminate extra spaces within the line
- | after the first word (so as not to blow away any indenting the user
- | may have put in).
- */
-
- bol();
- adv_word();
- while (position < curr_line->line_length)
- {
- if ((*point == ' ') && (*(point + 1) == ' '))
- del_char();
- else
- right(TRUE);
- }
-
-/*
- | Now make sure there are two spaces after a '.'.
- */
-
- bol();
- while (position < curr_line->line_length)
- {
- if ((*point == '.') && (*(point + 1) == ' '))
- {
- right(TRUE);
- insert(' ');
- insert(' ');
- while (*point == ' ')
- del_char();
- }
- right(TRUE);
- }
-
- observ_margins = TRUE;
- bol();
-
- wmove(com_win, 0, 0);
- wclrtoeol(com_win);
- wprintw(com_win, formatting_msg);
- wrefresh(com_win);
-
-/*
- | create lines between margins
- */
-
- while (position < curr_line->line_length)
- {
- while ((scr_pos < right_margin) && (position < curr_line->line_length))
- right(TRUE);
- if (position < curr_line->line_length)
- {
- prev_word();
- if (position == 1)
- adv_word();
- insert_line(TRUE);
- }
- }
-
-/*
- | go back to begin of paragraph, put cursor back to original position
- */
-
- bol();
- while (!Blank_Line(curr_line->prev_line))
- bol();
-
-/*
- | find word cursor was in
- */
-
- while ((status) && (string_count > 0))
- {
- search(FALSE);
- string_count--;
- }
-
-/*
- | offset the cursor to where it was before from the start of the word
- */
-
- while (offset > 0)
- {
- offset--;
- right(TRUE);
- }
-
-/*
- | reset flags and strings to what they were before formatting
- */
-
- if (d_word != NULL)
- free(d_word);
- d_word = temp_dword;
- 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];
- auto_format = tmp_af;
-
- midscreen(scr_vert, point);
- werase(com_win);
- wrefresh(com_win);
-}
-
-unsigned char *init_name[3] = {
- "/usr/share/misc/init.ee",
- NULL,
- ".init.ee"
- };
-
-void
-ee_init() /* check for init file and read it if it exists */
-{
- FILE *init_file;
- unsigned char *string;
- unsigned char *str1;
- unsigned char *str2;
- char *home;
- int counter;
- int temp_int;
-
- string = getenv("HOME");
- if (!string)
- string = "/root"; /* Set to reasonable default so we don't crash */
- str1 = home = malloc(strlen(string)+10);
- strcpy(home, string);
- strcat(home, "/.init.ee");
- init_name[1] = home;
- string = malloc(512);
-
- for (counter = 0; counter < 3; counter++)
- {
- if (!(access(init_name[counter], 4)))
- {
- init_file = fopen(init_name[counter], "r");
- while ((str2 = fgets(string, 512, init_file)) != NULL)
- {
- str1 = str2 = string;
- while (*str2 != '\n')
- str2++;
- *str2 = (char) NULL;
-
- if (unique_test(string, init_strings) != 1)
- continue;
-
- if (compare(str1, CASE, FALSE))
- case_sen = TRUE;
- else if (compare(str1, NOCASE, FALSE))
- case_sen = FALSE;
- else if (compare(str1, EXPAND, FALSE))
- expand_tabs = TRUE;
- else if (compare(str1, NOEXPAND, FALSE))
- expand_tabs = FALSE;
- else if (compare(str1, INFO, FALSE))
- info_window = TRUE;
- else if (compare(str1, NOINFO, FALSE))
- info_window = FALSE;
- else if (compare(str1, MARGINS, FALSE))
- observ_margins = TRUE;
- else if (compare(str1, NOMARGINS, FALSE))
- observ_margins = FALSE;
- else if (compare(str1, AUTOFORMAT, FALSE))
- {
- auto_format = TRUE;
- observ_margins = TRUE;
- }
- else if (compare(str1, NOAUTOFORMAT, FALSE))
- auto_format = FALSE;
- else if (compare(str1, Echo, FALSE))
- {
- str1 = next_word(str1);
- if (*str1 != (char) NULL)
- echo_string(str1);
- }
- else if (compare(str1, PRINTCOMMAND, FALSE))
- {
- str1 = next_word(str1);
- print_command = malloc(strlen(str1)+1);
- strcpy(print_command, str1);
- }
- else if (compare(str1, RIGHTMARGIN, FALSE))
- {
- str1 = next_word(str1);
- if ((*str1 >= '0') && (*str1 <= '9'))
- {
- temp_int = atoi(str1);
- if (temp_int > 0)
- right_margin = temp_int;
- }
- }
- else if (compare(str1, HIGHLIGHT, FALSE))
- nohighlight = FALSE;
- else if (compare(str1, NOHIGHLIGHT, FALSE))
- nohighlight = TRUE;
- 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;
- }
- }
-}
-
-/*
- | Save current configuration to .init.ee file in the current directory.
- */
-
-void
-dump_ee_conf()
-{
- FILE *init_file;
- FILE *old_init_file = NULL;
- char *file_name = ".init.ee";
- char *home_dir = "~/.init.ee";
- char buffer[512];
- struct stat buf;
- char *string;
- int length;
- int option = 0;
-
- if (restrict_mode())
- {
- return;
- }
-
- option = menu_op(config_dump_menu);
-
- werase(com_win);
- wmove(com_win, 0, 0);
-
- if (option == 0)
- {
- wprintw(com_win, conf_not_saved_msg);
- wrefresh(com_win);
- return;
- }
- else if (option == 2)
- file_name = resolve_name(home_dir);
-
- /*
- | If a .init.ee file exists, move it to .init.ee.old.
- */
-
- if (stat(file_name, &buf) != -1)
- {
- sprintf(buffer, "%s.old", file_name);
- unlink(buffer);
- link(file_name, buffer);
- unlink(file_name);
- old_init_file = fopen(buffer, "r");
- }
-
- init_file = fopen(file_name, "w");
- if (init_file == NULL)
- {
- wprintw(com_win, conf_dump_err_msg);
- wrefresh(com_win);
- return;
- }
-
- if (old_init_file != NULL)
- {
- /*
- | Copy non-configuration info into new .init.ee file.
- */
- while ((string = fgets(buffer, 512, old_init_file)) != NULL)
- {
- length = strlen(string);
- string[length - 1] = (char) NULL;
-
- if (unique_test(string, init_strings) == 1)
- {
- if (compare(string, Echo, FALSE))
- {
- fprintf(init_file, "%s\n", string);
- }
- }
- else
- fprintf(init_file, "%s\n", string);
- }
-
- fclose(old_init_file);
- }
-
- fprintf(init_file, "%s\n", case_sen ? CASE : NOCASE);
- fprintf(init_file, "%s\n", expand_tabs ? EXPAND : NOEXPAND);
- fprintf(init_file, "%s\n", info_window ? INFO : NOINFO );
- fprintf(init_file, "%s\n", observ_margins ? MARGINS : NOMARGINS );
- fprintf(init_file, "%s\n", auto_format ? AUTOFORMAT : NOAUTOFORMAT );
- fprintf(init_file, "%s %s\n", PRINTCOMMAND, print_command);
- fprintf(init_file, "%s %d\n", RIGHTMARGIN, right_margin);
- 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);
-
- wprintw(com_win, conf_dump_success_msg, file_name);
- wrefresh(com_win);
-
- if ((option == 2) && (file_name != home_dir))
- {
- free(file_name);
- }
-}
-
-void
-echo_string(string) /* echo the given string */
-char *string;
-{
- char *temp;
- int Counter;
-
- temp = string;
- while (*temp != (char) NULL)
- {
- if (*temp == '\\')
- {
- temp++;
- if (*temp == 'n')
- putchar('\n');
- else if (*temp == 't')
- putchar('\t');
- else if (*temp == 'b')
- putchar('\b');
- else if (*temp == 'r')
- putchar('\r');
- else if (*temp == 'f')
- putchar('\f');
- else if ((*temp == 'e') || (*temp == 'E'))
- putchar('\033'); /* escape */
- else if (*temp == '\\')
- putchar('\\');
- else if (*temp == '\'')
- putchar('\'');
- else if ((*temp >= '0') && (*temp <= '9'))
- {
- Counter = 0;
- while ((*temp >= '0') && (*temp <= '9'))
- {
- Counter = (8 * Counter) + (*temp - '0');
- temp++;
- }
- putchar(Counter);
- temp--;
- }
- temp++;
- }
- else
- {
- putchar(*temp);
- temp++;
- }
- }
-
- fflush(stdout);
-}
-
-void
-spell_op() /* check spelling of words in the editor */
-{
- if (restrict_mode())
- {
- return;
- }
- top(); /* go to top of file */
- insert_line(FALSE); /* create two blank lines */
- insert_line(FALSE);
- top();
- command(shell_echo_msg);
- adv_line();
- wmove(com_win, 0, 0);
- wprintw(com_win, spell_in_prog_msg);
- wrefresh(com_win);
- command("<>!spell"); /* send contents of buffer to command 'spell'
- and read the results back into the editor */
-}
-
-void
-ispell_op()
-{
- char template[128], *name;
- char string[256];
- int fd;
-
- if (restrict_mode())
- {
- return;
- }
- (void)sprintf(template, "/tmp/ee.XXXXXXXX");
- name = mktemp(&template[0]);
- fd = open(name, O_CREAT | O_EXCL | O_RDWR, 0600);
- if (fd < 0) {
- wmove(com_win, 0, 0);
- wprintw(com_win, create_file_fail_msg, name);
- wrefresh(com_win);
- return;
- }
- close(fd);
- if (write_file(name, 0))
- {
- sprintf(string, "ispell %s", name);
- sh_command(string);
- delete_text();
- tmp_file = name;
- recv_file = TRUE;
- check_fp();
- unlink(name);
- }
-}
-
-int
-first_word_len(test_line)
-struct text *test_line;
-{
- int counter;
- unsigned char *pnt;
-
- if (test_line == NULL)
- return(0);
-
- pnt = test_line->line;
- if ((pnt == NULL) || (*pnt == (char) NULL) ||
- (*pnt == '.') || (*pnt == '>'))
- return(0);
-
- if ((*pnt == ' ') || (*pnt == '\t'))
- {
- pnt = next_word(pnt);
- }
-
- if (*pnt == (char) NULL)
- return(0);
-
- counter = 0;
- while ((*pnt != (char) NULL) && ((*pnt != ' ') && (*pnt != '\t')))
- {
- pnt++;
- counter++;
- }
- while ((*pnt != (char) NULL) && ((*pnt == ' ') || (*pnt == '\t')))
- {
- pnt++;
- counter++;
- }
- return(counter);
-}
-
-void
-Auto_Format() /* format the paragraph according to set margins */
-{
- int string_count;
- int offset;
- int temp_case;
- int word_len;
- int temp_dwl;
- int tmp_d_line_length;
- int leave_loop = FALSE;
- int status;
- int counter;
- char not_blank;
- 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,
- | do not format the current paragraph
- */
-
- if ((!observ_margins) || (Blank_Line(curr_line)))
- return;
-
-/*
- | get current position in paragraph, so after formatting, the cursor
- | will be in the same relative position
- */
-
- tmp_d_line = d_line;
- tmp_d_line_length = dlt_line->line_length;
- d_line = NULL;
- auto_format = FALSE;
- offset = position;
- if ((position != 1) && ((*point == ' ') || (*point == '\t') || (position == curr_line->line_length) || (*point == (char) NULL)))
- prev_word();
- temp_dword = d_word;
- temp_dwl = d_wrd_len;
- d_wrd_len = 0;
- d_word = NULL;
- temp_case = case_sen;
- case_sen = TRUE;
- tmp_srchstr = srch_str;
- temp2 = srch_str = (unsigned char *) malloc(1 + curr_line->line_length - position);
- if ((*point == ' ') || (*point == '\t'))
- adv_word();
- offset -= position;
- counter = position;
- line = temp1 = point;
- while ((*temp1 != (char) NULL) && (*temp1 != ' ') && (*temp1 != '\t') && (counter < curr_line->line_length))
- {
- *temp2 = *temp1;
- temp2++;
- temp1++;
- counter++;
- }
- *temp2 = (char) NULL;
- if (position != 1)
- bol();
- while (!Blank_Line(curr_line->prev_line))
- bol();
- string_count = 0;
- status = TRUE;
- while ((line != point) && (status))
- {
- status = search(FALSE);
- string_count++;
- }
-
-/*
- | now get back to the start of the paragraph to start checking
- */
-
- if (position != 1)
- bol();
- while (!Blank_Line(curr_line->prev_line))
- bol();
-
-/*
- | Start going through lines, putting spaces at end of lines if they do
- | not already exist. Check line length, and move words to the next line
- | if they cross the margin. Then get words from the next line if they
- | will fit in before the margin.
- */
-
- counter = 0;
-
- while (!leave_loop)
- {
- if (position != curr_line->line_length)
- eol();
- left(TRUE);
- if (*point != ' ')
- {
- right(TRUE);
- insert(' ');
- }
- else
- right(TRUE);
-
- not_blank = FALSE;
-
- /*
- | fill line if first word on next line will fit
- | in the line without crossing the margin
- */
-
- while ((curr_line->next_line != NULL) &&
- ((word_len = first_word_len(curr_line->next_line)) > 0)
- && ((scr_pos + word_len) < right_margin))
- {
- adv_line();
- if ((*point == ' ') || (*point == '\t'))
- adv_word();
- del_word();
- if (position != 1)
- bol();
-
- /*
- | We know this line was not blank before, so
- | make sure that it doesn't have one of the
- | leading characters that indicate the line
- | should not be modified.
- |
- | We also know that this character should not
- | be left as the first character of this line.
- */
-
- if ((Blank_Line(curr_line)) &&
- (curr_line->line[0] != '.') &&
- (curr_line->line[0] != '>'))
- {
- del_line();
- not_blank = FALSE;
- }
- else
- not_blank = TRUE;
-
- /*
- | go to end of previous line
- */
- left(TRUE);
- undel_word();
- eol();
- /*
- | make sure there's a space at the end of the line
- */
- left(TRUE);
- if (*point != ' ')
- {
- right(TRUE);
- insert(' ');
- }
- else
- right(TRUE);
- }
-
- /*
- | make sure line does not cross right margin
- */
-
- while (right_margin <= scr_pos)
- {
- prev_word();
- if (position != 1)
- {
- del_word();
- if (Blank_Line(curr_line->next_line))
- insert_line(TRUE);
- else
- adv_line();
- if ((*point == ' ') || (*point == '\t'))
- adv_word();
- undel_word();
- not_blank = TRUE;
- if (position != 1)
- bol();
- left(TRUE);
- }
- }
-
- if ((!Blank_Line(curr_line->next_line)) || (not_blank))
- {
- adv_line();
- counter++;
- }
- else
- leave_loop = TRUE;
- }
-
-/*
- | go back to begin of paragraph, put cursor back to original position
- */
-
- if (position != 1)
- bol();
- while ((counter-- > 0) || (!Blank_Line(curr_line->prev_line)))
- bol();
-
-/*
- | find word cursor was in
- */
-
- status = TRUE;
- while ((status) && (string_count > 0))
- {
- status = search(FALSE);
- string_count--;
- }
-
-/*
- | offset the cursor to where it was before from the start of the word
- */
-
- while (offset > 0)
- {
- offset--;
- right(TRUE);
- }
-
- if ((string_count > 0) && (offset < 0))
- {
- while (offset < 0)
- {
- offset++;
- left(TRUE);
- }
- }
-
-/*
- | reset flags and strings to what they were before formatting
- */
-
- if (d_word != NULL)
- free(d_word);
- d_word = temp_dword;
- d_wrd_len = temp_dwl;
- 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];
- auto_format = TRUE;
- dlt_line->line_length = tmp_d_line_length;
- d_line = tmp_d_line;
-
- formatted = TRUE;
- midscreen(scr_vert, point);
-}
-
-void
-modes_op()
-{
- int ret_value;
- int counter;
- char *string;
-
- do
- {
- sprintf(modes_menu[1].item_string, "%s %s", mode_strings[1],
- (expand_tabs ? ON : OFF));
- sprintf(modes_menu[2].item_string, "%s %s", mode_strings[2],
- (case_sen ? ON : OFF));
- sprintf(modes_menu[3].item_string, "%s %s", mode_strings[3],
- (observ_margins ? ON : OFF));
- sprintf(modes_menu[4].item_string, "%s %s", mode_strings[4],
- (auto_format ? ON : OFF));
- sprintf(modes_menu[5].item_string, "%s %s", mode_strings[5],
- (eightbit ? ON : OFF));
- sprintf(modes_menu[6].item_string, "%s %s", mode_strings[6],
- (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],
- right_margin);
- sprintf(modes_menu[9].item_string, "%s %s", mode_strings[9],
- (ee_chinese ? ON : OFF));
-
- ret_value = menu_op(modes_menu);
-
- switch (ret_value)
- {
- case 1:
- expand_tabs = !expand_tabs;
- break;
- case 2:
- case_sen = !case_sen;
- break;
- case 3:
- observ_margins = !observ_margins;
- break;
- case 4:
- auto_format = !auto_format;
- if (auto_format)
- observ_margins = TRUE;
- 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;
- case 6:
- if (info_window)
- no_info_window();
- else
- create_info_window();
- break;
- case 7:
- emacs_keys_mode = !emacs_keys_mode;
- if (info_window)
- paint_info_win();
- break;
- case 8:
- string = get_string(margin_prompt, TRUE);
- if (string != NULL)
- {
- counter = atoi(string);
- if (counter > 0)
- right_margin = counter;
- 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;
- }
- }
- while (ret_value != 0);
-}
-
-char *
-is_in_string(string, substring) /* a strchr() look-alike for systems without
- strchr() */
-char * string, *substring;
-{
- char *full, *sub;
-
- for (sub = substring; (sub != NULL) && (*sub != (char)NULL); sub++)
- {
- for (full = string; (full != NULL) && (*full != (char)NULL);
- full++)
- {
- if (*sub == *full)
- return(full);
- }
- }
- return(NULL);
-}
-
-/*
- | handle names of the form "~/file", "~user/file",
- | "$HOME/foo", "~/$FOO", etc.
- */
-
-char *
-resolve_name(name)
-char *name;
-{
- char long_buffer[1024];
- char short_buffer[128];
- char *buffer;
- char *slash;
- char *tmp;
- char *start_of_var;
- int offset;
- int index;
- int counter;
- struct passwd *user;
-
- if (name[0] == '~')
- {
- if (name[1] == '/')
- {
- index = getuid();
- user = (struct passwd *) getpwuid(index);
- slash = name + 1;
- }
- else
- {
- slash = strchr(name, '/');
- if (slash == NULL)
- return(name);
- *slash = (char) NULL;
- user = (struct passwd *) getpwnam((name + 1));
- *slash = '/';
- }
- if (user == NULL)
- {
- return(name);
- }
- buffer = malloc(strlen(user->pw_dir) + strlen(slash) + 1);
- strcpy(buffer, user->pw_dir);
- strcat(buffer, slash);
- }
- else
- buffer = name;
-
- if (is_in_string(buffer, "$"))
- {
- tmp = buffer;
- index = 0;
-
- while ((*tmp != (char) NULL) && (index < 1024))
- {
-
- while ((*tmp != (char) NULL) && (*tmp != '$') &&
- (index < 1024))
- {
- long_buffer[index] = *tmp;
- tmp++;
- index++;
- }
-
- if ((*tmp == '$') && (index < 1024))
- {
- counter = 0;
- start_of_var = tmp;
- tmp++;
- if (*tmp == '{') /* } */ /* bracketed variable name */
- {
- tmp++; /* { */
- while ((*tmp != (char) NULL) &&
- (*tmp != '}') &&
- (counter < 128))
- {
- short_buffer[counter] = *tmp;
- counter++;
- tmp++;
- } /* { */
- if (*tmp == '}')
- tmp++;
- }
- else
- {
- while ((*tmp != (char) NULL) &&
- (*tmp != '/') &&
- (*tmp != '$') &&
- (counter < 128))
- {
- short_buffer[counter] = *tmp;
- counter++;
- tmp++;
- }
- }
- short_buffer[counter] = (char) NULL;
- if ((slash = getenv(short_buffer)) != NULL)
- {
- offset = strlen(slash);
- if ((offset + index) < 1024)
- strcpy(&long_buffer[index], slash);
- index += offset;
- }
- else
- {
- while ((start_of_var != tmp) && (index < 1024))
- {
- long_buffer[index] = *start_of_var;
- start_of_var++;
- index++;
- }
- }
- }
- }
-
- if (index == 1024)
- return(buffer);
- else
- long_buffer[index] = (char) NULL;
-
- if (name != buffer)
- free(buffer);
- buffer = malloc(index + 1);
- strcpy(buffer, long_buffer);
- }
-
- return(buffer);
-}
-
-int
-restrict_mode()
-{
- if (!restricted)
- return(FALSE);
-
- wmove(com_win, 0, 0);
- wprintw(com_win, restricted_msg);
- wclrtoeol(com_win);
- wrefresh(com_win);
- clear_com_win = TRUE;
- return(TRUE);
-}
-
-/*
- | The following routine tests the input string against the list of
- | strings, to determine if the string is a unique match with one of the
- | valid values.
- */
-
-int
-unique_test(string, list)
-char *string;
-char *list[];
-{
- int counter;
- int num_match;
- int result;
-
- num_match = 0;
- counter = 0;
- while (list[counter] != NULL)
- {
- result = compare(string, list[counter], FALSE);
- if (result)
- num_match++;
- counter++;
- }
- return(num_match);
-}
-
-void
-renumber_lines(firstline, startnumber)
-struct text *firstline;
-int startnumber;
-{
- struct text *lineptr;
- int i;
-
- i = startnumber;
- for (lineptr = firstline; lineptr != NULL; lineptr = lineptr->next_line)
- lineptr->line_number = i++;
-}
-
-#ifndef NO_CATGETS
-/*
- | Get the catalog entry, and if it got it from the catalog,
- | make a copy, since the buffer will be overwritten by the
- | next call to catgets().
- */
-
-char *
-catgetlocal(number, string)
-int number;
-char *string;
-{
- char *temp1;
- char *temp2;
-
- temp1 = catgets(catalog, 1, number, string);
- if (temp1 != string)
- {
- temp2 = malloc(strlen(temp1) + 1);
- strcpy(temp2, temp1);
- temp1 = temp2;
- }
- return(temp1);
-}
-#endif /* NO_CATGETS */
-
-/*
- | The following is to allow for using message catalogs which allow
- | the software to be 'localized', that is, to use different languages
- | all with the same binary. For more information, see your system
- | documentation, or the X/Open Internationalization Guide.
- */
-
-void
-strings_init()
-{
- int counter;
-
-#ifndef NO_CATGETS
- setlocale(LC_ALL, "");
- catalog = catopen("ee", NL_CAT_LOCALE);
-#endif /* NO_CATGETS */
-
- modes_menu[0].item_string = catgetlocal( 1, "modes menu");
- mode_strings[1] = catgetlocal( 2, "tabs to spaces ");
- mode_strings[2] = catgetlocal( 3, "case sensitive search");
- mode_strings[3] = catgetlocal( 4, "margins observed ");
- mode_strings[4] = catgetlocal( 5, "auto-paragraph format");
- mode_strings[5] = catgetlocal( 6, "eightbit characters ");
- mode_strings[6] = catgetlocal( 7, "info window ");
- mode_strings[8] = catgetlocal( 8, "right margin ");
- leave_menu[0].item_string = catgetlocal( 9, "leave menu");
- leave_menu[1].item_string = catgetlocal( 10, "save changes");
- leave_menu[2].item_string = catgetlocal( 11, "no save");
- file_menu[0].item_string = catgetlocal( 12, "file menu");
- file_menu[1].item_string = catgetlocal( 13, "read a file");
- file_menu[2].item_string = catgetlocal( 14, "write a file");
- file_menu[3].item_string = catgetlocal( 15, "save file");
- file_menu[4].item_string = catgetlocal( 16, "print editor contents");
- search_menu[0].item_string = catgetlocal( 17, "search menu");
- search_menu[1].item_string = catgetlocal( 18, "search for ...");
- search_menu[2].item_string = catgetlocal( 19, "search");
- spell_menu[0].item_string = catgetlocal( 20, "spell menu");
- spell_menu[1].item_string = catgetlocal( 21, "use 'spell'");
- spell_menu[2].item_string = catgetlocal( 22, "use 'ispell'");
- misc_menu[0].item_string = catgetlocal( 23, "miscellaneous menu");
- misc_menu[1].item_string = catgetlocal( 24, "format paragraph");
- misc_menu[2].item_string = catgetlocal( 25, "shell command");
- misc_menu[3].item_string = catgetlocal( 26, "check spelling");
- main_menu[0].item_string = catgetlocal( 27, "main menu");
- main_menu[1].item_string = catgetlocal( 28, "leave editor");
- main_menu[2].item_string = catgetlocal( 29, "help");
- main_menu[3].item_string = catgetlocal( 30, "file operations");
- main_menu[4].item_string = catgetlocal( 31, "redraw screen");
- main_menu[5].item_string = catgetlocal( 32, "settings");
- main_menu[6].item_string = catgetlocal( 33, "search");
- main_menu[7].item_string = catgetlocal( 34, "miscellaneous");
- help_text[0] = catgetlocal( 35, "Control keys: ");
- help_text[1] = catgetlocal( 36, "^a ascii code ^i tab ^r right ");
- help_text[2] = catgetlocal( 37, "^b bottom of text ^j newline ^t top of text ");
- help_text[3] = catgetlocal( 38, "^c command ^k delete char ^u up ");
- help_text[4] = catgetlocal( 39, "^d down ^l left ^v undelete word ");
- help_text[5] = catgetlocal( 40, "^e search prompt ^m newline ^w delete word ");
- help_text[6] = catgetlocal( 41, "^f undelete char ^n next page ^x search ");
- help_text[7] = catgetlocal( 42, "^g begin of line ^o end of line ^y delete line ");
- help_text[8] = catgetlocal( 43, "^h backspace ^p prev page ^z undelete line ");
- help_text[9] = catgetlocal( 44, "^[ (escape) menu ESC-Enter: exit ee ");
- help_text[10] = catgetlocal( 45, " ");
- help_text[11] = catgetlocal( 46, "Commands: ");
- help_text[12] = catgetlocal( 47, "help : get this info file : print file name ");
- help_text[13] = catgetlocal( 48, "read : read a file char : ascii code of char ");
- help_text[14] = catgetlocal( 49, "write : write a file case : case sensitive search ");
- help_text[15] = catgetlocal( 50, "exit : leave and save nocase : case insensitive search ");
- help_text[16] = catgetlocal( 51, "quit : leave, no save !cmd : execute \"cmd\" in shell ");
- 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, "+# :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 ");
- control_keys[3] = catgetlocal( 60, "^t top of text ^o end of line ^v undelete word ^r right ");
- control_keys[4] = catgetlocal( 61, "^c command ^k delete char ^f undelete char ESC-Enter: exit ee ");
- command_strings[0] = catgetlocal( 62, "help : get help info |file : print file name |line : print line # ");
- command_strings[1] = catgetlocal( 63, "read : read a file |char : ascii code of char |0-9 : go to line \"#\"");
- command_strings[2] = catgetlocal( 64, "write: write a file |case : case sensitive search |exit : leave and save ");
- command_strings[3] = catgetlocal( 65, "!cmd : shell \"cmd\" |nocase: ignore case in search |quit : leave, no save");
- command_strings[4] = catgetlocal( 66, "expand: expand tabs |noexpand: do not expand tabs ");
- com_win_message = catgetlocal( 67, " press Escape (^[) for menu");
- no_file_string = catgetlocal( 68, "no file");
- ascii_code_str = catgetlocal( 69, "ascii code: ");
- printer_msg_str = catgetlocal( 70, "sending contents of buffer to \"%s\" ");
- command_str = catgetlocal( 71, "command: ");
- file_write_prompt_str = catgetlocal( 72, "name of file to write: ");
- file_read_prompt_str = catgetlocal( 73, "name of file to read: ");
- char_str = catgetlocal( 74, "character = %d");
- unkn_cmd_str = catgetlocal( 75, "unknown command \"%s\"");
- non_unique_cmd_msg = catgetlocal( 76, "entered command is not unique");
- line_num_str = catgetlocal( 77, "line %d ");
- line_len_str = catgetlocal( 78, "length = %d");
- current_file_str = catgetlocal( 79, "current file is \"%s\" ");
- usage0 = catgetlocal( 80, "usage: %s [-i] [-e] [-h] [+line_number] [file(s)]\n");
- usage1 = catgetlocal( 81, " -i turn off info window\n");
- usage2 = catgetlocal( 82, " -e do not convert tabs to spaces\n");
- usage3 = catgetlocal( 83, " -h do not use highlighting\n");
- file_is_dir_msg = catgetlocal( 84, "file \"%s\" is a directory");
- new_file_msg = catgetlocal( 85, "new file \"%s\"");
- cant_open_msg = catgetlocal( 86, "can't open \"%s\"");
- open_file_msg = catgetlocal( 87, "file \"%s\", %d lines");
- file_read_fin_msg = catgetlocal( 88, "finished reading file \"%s\"");
- reading_file_msg = catgetlocal( 89, "reading file \"%s\"");
- read_only_msg = catgetlocal( 90, ", read only");
- file_read_lines_msg = catgetlocal( 91, "file \"%s\", %d lines");
- save_file_name_prompt = catgetlocal( 92, "enter name of file: ");
- file_not_saved_msg = catgetlocal( 93, "no filename entered: file not saved");
- changes_made_prompt = catgetlocal( 94, "changes have been made, are you sure? (y/n [n]) ");
- yes_char = catgetlocal( 95, "y");
- file_exists_prompt = catgetlocal( 96, "file already exists, overwrite? (y/n) [n] ");
- create_file_fail_msg = catgetlocal( 97, "unable to create file \"%s\"");
- writing_file_msg = catgetlocal( 98, "writing file \"%s\"");
- file_written_msg = catgetlocal( 99, "\"%s\" %d lines, %d characters");
- searching_msg = catgetlocal( 100, " ...searching");
- str_not_found_msg = catgetlocal( 101, "string \"%s\" not found");
- search_prompt_str = catgetlocal( 102, "search for: ");
- exec_err_msg = catgetlocal( 103, "could not exec %s");
- continue_msg = catgetlocal( 104, "press return to continue ");
- menu_cancel_msg = catgetlocal( 105, "press Esc to cancel");
- menu_size_err_msg = catgetlocal( 106, "menu too large for window");
- press_any_key_msg = catgetlocal( 107, "press any key to continue ");
- shell_prompt = catgetlocal( 108, "shell command: ");
- formatting_msg = catgetlocal( 109, "...formatting paragraph...");
- shell_echo_msg = catgetlocal( 110, "<!echo 'list of unrecognized words'; echo -=-=-=-=-=-");
- spell_in_prog_msg = catgetlocal( 111, "sending contents of edit buffer to 'spell'");
- margin_prompt = catgetlocal( 112, "right margin is: ");
- restricted_msg = catgetlocal( 113, "restricted mode: unable to perform requested operation");
- ON = catgetlocal( 114, "ON");
- OFF = catgetlocal( 115, "OFF");
- HELP = catgetlocal( 116, "HELP");
- WRITE = catgetlocal( 117, "WRITE");
- READ = catgetlocal( 118, "READ");
- LINE = catgetlocal( 119, "LINE");
- FILE_str = catgetlocal( 120, "FILE");
- CHARACTER = catgetlocal( 121, "CHARACTER");
- REDRAW = catgetlocal( 122, "REDRAW");
- RESEQUENCE = catgetlocal( 123, "RESEQUENCE");
- AUTHOR = catgetlocal( 124, "AUTHOR");
- VERSION = catgetlocal( 125, "VERSION");
- CASE = catgetlocal( 126, "CASE");
- NOCASE = catgetlocal( 127, "NOCASE");
- EXPAND = catgetlocal( 128, "EXPAND");
- NOEXPAND = catgetlocal( 129, "NOEXPAND");
- Exit_string = catgetlocal( 130, "EXIT");
- QUIT_string = catgetlocal( 131, "QUIT");
- INFO = catgetlocal( 132, "INFO");
- NOINFO = catgetlocal( 133, "NOINFO");
- MARGINS = catgetlocal( 134, "MARGINS");
- NOMARGINS = catgetlocal( 135, "NOMARGINS");
- AUTOFORMAT = catgetlocal( 136, "AUTOFORMAT");
- NOAUTOFORMAT = catgetlocal( 137, "NOAUTOFORMAT");
- Echo = catgetlocal( 138, "ECHO");
- PRINTCOMMAND = catgetlocal( 139, "PRINTCOMMAND");
- RIGHTMARGIN = catgetlocal( 140, "RIGHTMARGIN");
- HIGHLIGHT = catgetlocal( 141, "HIGHLIGHT");
- NOHIGHLIGHT = catgetlocal( 142, "NOHIGHLIGHT");
- EIGHTBIT = catgetlocal( 143, "EIGHTBIT");
- NOEIGHTBIT = catgetlocal( 144, "NOEIGHTBIT");
- /*
- | additions
- */
- mode_strings[7] = catgetlocal( 145, "emacs key bindings ");
- emacs_help_text[0] = help_text[0];
- emacs_help_text[1] = catgetlocal( 146, "^a beginning of line ^i tab ^r restore word ");
- emacs_help_text[2] = catgetlocal( 147, "^b back 1 char ^j undel char ^t begin of file ");
- emacs_help_text[3] = catgetlocal( 148, "^c command ^k delete line ^u end of file ");
- emacs_help_text[4] = catgetlocal( 149, "^d delete char ^l undelete line ^v next page ");
- emacs_help_text[5] = catgetlocal( 150, "^e end of line ^m newline ^w delete word ");
- emacs_help_text[6] = catgetlocal( 151, "^f forward 1 char ^n next line ^x search ");
- emacs_help_text[7] = catgetlocal( 152, "^g go back 1 page ^o ascii char insert ^y search prompt ");
- emacs_help_text[8] = catgetlocal( 153, "^h backspace ^p prev line ^z next word ");
- emacs_help_text[9] = help_text[9];
- emacs_help_text[10] = help_text[10];
- emacs_help_text[11] = help_text[11];
- emacs_help_text[12] = help_text[12];
- emacs_help_text[13] = help_text[13];
- emacs_help_text[14] = help_text[14];
- emacs_help_text[15] = help_text[15];
- emacs_help_text[16] = help_text[16];
- emacs_help_text[17] = help_text[17];
- emacs_help_text[18] = help_text[18];
- emacs_help_text[19] = help_text[19];
- emacs_help_text[20] = help_text[20];
- emacs_help_text[21] = help_text[21];
- emacs_control_keys[0] = catgetlocal( 154, "^[ (escape) menu ^y search prompt ^k delete line ^p prev line ^g prev page");
- emacs_control_keys[1] = catgetlocal( 155, "^o ascii code ^x search ^l undelete line ^n next line ^v next page");
- emacs_control_keys[2] = catgetlocal( 156, "^u end of file ^a begin of line ^w delete word ^b back char ^z next word");
- emacs_control_keys[3] = catgetlocal( 157, "^t begin of file ^e end of line ^r restore word ^f forward char ");
- emacs_control_keys[4] = catgetlocal( 158, "^c command ^d delete char ^j undelete char ESC-Enter: exit");
- EMACS_string = catgetlocal( 159, "EMACS");
- NOEMACS_string = catgetlocal( 160, "NOEMACS");
- 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");
- 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");
- 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;
- commands[2] = READ;
- commands[3] = LINE;
- commands[4] = FILE_str;
- commands[5] = REDRAW;
- commands[6] = RESEQUENCE;
- commands[7] = AUTHOR;
- commands[8] = VERSION;
- commands[9] = CASE;
- commands[10] = NOCASE;
- commands[11] = EXPAND;
- commands[12] = NOEXPAND;
- commands[13] = Exit_string;
- commands[14] = QUIT_string;
- commands[15] = "<";
- commands[16] = ">";
- commands[17] = "!";
- commands[18] = "0";
- commands[19] = "1";
- commands[20] = "2";
- commands[21] = "3";
- commands[22] = "4";
- commands[23] = "5";
- commands[24] = "6";
- commands[25] = "7";
- commands[26] = "8";
- commands[27] = "9";
- commands[28] = CHARACTER;
- commands[29] = chinese_cmd;
- commands[30] = nochinese_cmd;
- commands[31] = NULL;
- init_strings[0] = CASE;
- init_strings[1] = NOCASE;
- init_strings[2] = EXPAND;
- init_strings[3] = NOEXPAND;
- init_strings[4] = INFO;
- init_strings[5] = NOINFO;
- init_strings[6] = MARGINS;
- init_strings[7] = NOMARGINS;
- init_strings[8] = AUTOFORMAT;
- init_strings[9] = NOAUTOFORMAT;
- init_strings[10] = Echo;
- init_strings[11] = PRINTCOMMAND;
- init_strings[12] = RIGHTMARGIN;
- init_strings[13] = HIGHLIGHT;
- init_strings[14] = NOHIGHLIGHT;
- init_strings[15] = EIGHTBIT;
- 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;
-
- /*
- | allocate space for strings here for settings menu
- */
-
- for (counter = 1; counter < NUM_MODES_ITEMS; counter++)
- {
- modes_menu[counter].item_string = malloc(80);
- }
-
-#ifndef NO_CATGETS
- catclose(catalog);
-#endif /* NO_CATGETS */
-}
-
diff --git a/usr.bin/ee/ee.i18n.guide b/usr.bin/ee/ee.i18n.guide
deleted file mode 100644
index eef836a05e5f..000000000000
--- a/usr.bin/ee/ee.i18n.guide
+++ /dev/null
@@ -1,158 +0,0 @@
-Easy Editor ("ee") provides the ability to translate the messages
-displayed to the user and the commands entered. This is done via message
-catalogs, following X/Open standards. ee supports eight bit characters,
-as well as 16-bit characters. The Chinese Big 5 code set is the 16-bit
-code set that ee was modified to handle, as it is relatively easy to
-support since two byte characters also take up two columns on the screen,
-thereby simplifying the screen position calculations. Other multibyte
-code sets may function, but have not been tested.
-
-(The name ee.i18n.guide is for "ee internationalization guide". The i18n
-abbreviation is used because there are 18 characters between the first
-letter ("i") and last ("n") of "internationalization".)
-
-All of the messages, warnings, information, and commands, are contained
-in the message catalog. Each numbered entry represents an individual
-string used by ee. Some strings contain formatting information for
-formatted print statements, which are of the form "%s", or "%d", these
-must be preserved in the translation, or the correct information will not
-be displayed. For those strings containing multiple formatting codes,
-the order of each item must be preserved as well.
-
-Message content
-1 title for modes, or settings menu
-2 - 8 entries for modes menu, each line should be the same length
- (padded with spaces)
-9 - 34 other menu titles and entries
-35 - 56 help screen
-57 - 61 actions assigned to control keys
-62 - 66 commands information
-67 message displayed when info window turned off
-68 indication that no file name was entered when invoking ee
-69 prompt for decimal value of character to be entered
-70 message displaying the print command being invoked
-71 prompt for command
-72 prompt for name of file to be written
-73 prompt for name of file to be read
-74 string used to display the decimal value of the character
- the cursor is on
-75 string displaying an unrecognized command
-76 string indicating that the command entered is not a unique
- substring of a valid command
-77 string indicating the current line number
-78 string for displaying the length of the line
-79 string for displaying the name of the file
-80 - 83 strings showing how to invoke ee, and its options
-84 message indicating that the file entered is a directory, not a
- text file
-85 message informing that the entered file does not yet exist
-86 message informing that the file can't be opened (because of
- permission problems)
-87 message after file has been read with the file name and number
- of lines read
-88 message indicating that the file has been read
-89 message indicating that the file is being read
-90 message indicating that permissions only allow the file to be
- read, not written
-91 message after file has been read with the file name and number
- of lines read
-92 prompt for name of file to be saved (used when no name was
- entered for a file to edit)
-93 message indicating that the file was not written, since no
- name was entered at the prompt
-94 prompt asking user if changes should not be saved ("yes_char"
- will be expected for affirmative response)
-95 "yes" character, single character expected to confirm action
- (can be upper or lower case, will be converted to upper-case
- during test)
-96 prompt
-97 error message
-98 message indicating that the named file is being written
-99 message indicating the name of the file written, the number of
- lines, and the number of characters (order of items must be
- maintained)
-100 search in progress message
-101 message that the string was not found
-102 prompt for search
-103 message that string could not be executed
-104 self-explanatory
-105 message for menus, indicating that the Escape character will
- allow the user to exit the menu
-106 error message indicating the menu won't fit on the screen
-107 self-explanatory
-108 prompt for shell command
-109 message displayed while formatting a paragraph
-110 string which places message for spell checking at top of
- buffer (the portions 'list of unrecognized words' and
- '-=-=-=-=-=-' may be replaced, but the rest must remain the
- same)
-111 message informing that spell checking is in progress
-112 prompt for right margin
-113 error informing user that operation is not permitted in ree
-114 string indicating mode is turned 'on' in modes menu
-115 string indicating mode is turned 'off' in modes menu
-116 - 131 strings used for commands (some also used for initialization)
-132 - 144 strings used for initialization
-145 entry for settings menu for emacs key bindings settings
-146 - 153 help screen entries for emacs key bindings info
-154 - 158 info window entries for emacs key bindings info
-159 string for turning on emacs key bindings in the init file
-160 string for turning off emacs key bindings in the init file
-161 fifth line of usage statement
-162 error message when unable to save configuration file
-163 positive feedback about saving the configuration file
-164 - 167 menu items for saving editor configuration
-168 error message when unable to save configuration file
-169 error message for ree when not specifying the file
-180 self-explanatory
-181 - 182 indicators of more information in menu (for when scrolling
- menus because menu contents won't fit vertically on screen)
-183 menu entry for modes menu for 16 bit characters
-184 - 185 strings for initialization to turn on or off 16 bit
- character handling
-
-Care should be taken when translating commands and initialization keywords
-because the algorithm used for detecting uniqueness of entered commands
-will not be able to distinguish words that are not unique before the end
-of the shorter word, for example, it would not be able to distinguish the
-command 'abcd' from 'abcde'.
-
-After translating the messages, use the 'gencat' command to create the compiled
-catalog used when running the software. The standard syntax would be:
-
- gencat ee.cat ee.msg
-
-Where ee.msg is the file containing the translations, and ee.cat is the
-compiled catalog. If the file ee.cat does not exist, it will be created.
-Check the documentation for your system for proper syntax.
-
-Message catalog placement varies from system to system. A common location
-for message catalogs is in /usr/lib/nls. In this directory are
-directories with the names of other languages. The default language is
-'C'. There is also an environment variable, named NLSPATH used to
-determine where message catalogs can be found. This variable is similar
-to the PATH variable used for commands, but with some differences. The
-NLSPATH variable must have the ability to handle different names for
-languages and the catalog files, so it has field descriptors for these. A
-typical setting for NLSPATH could be:
-
- NLSPATH=/usr/lib/nls/%L/%N.cat:/usr/local/lib/nls/%L/%N.cat
-
-Where "%L" is the field descriptor for the language (obtained from the
-LANG environment variable) and "%N" is the name of the file (with the
-".cat" appended by the path variable, it is not passed from the requesting
-program). The colon (:) is used to separate paths, so in the above
-example there are two paths possible for message catalogs. You may wish
-to maintain catalogs for applications that are not supported by your
-system vendor in a location unique for you, and this is facilitated by the
-NLSPATH variable. Remember to set and export both the LANG and NLSPATH
-variables for each user that expects to use localization either in a
-system-wide profile or in each user's profile. See your system
-documentation for more information.
-
-The message catalog supplied with ee also uses the '$quote' directive to
-specify a quote around strings to ensure proper padding. This directive
-may not be supported on all systems, and lead to quotes being included in
-the string used in ee, which will cause incorrect behavior. If the
-'$quote' directive is not supported by your system's gencat command, edit
-the msg file to remove the leading and trailing quotation marks.
diff --git a/usr.bin/ee/nls/en_US.US-ASCII/ee.msg b/usr.bin/ee/nls/en_US.US-ASCII/ee.msg
deleted file mode 100644
index ccefcc4b3e62..000000000000
--- a/usr.bin/ee/nls/en_US.US-ASCII/ee.msg
+++ /dev/null
@@ -1,185 +0,0 @@
-$ This file contains the messages for ee ("easy editor"). See the file
-$ ee.i18n.guide for more information
-$
-$ 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 "
-8 "right margin "
-9 "leave menu"
-10 "save changes"
-11 "no save"
-12 "file menu"
-13 "read a file"
-14 "write a file"
-15 "save file"
-16 "print editor contents"
-17 "search menu"
-18 "search for ..."
-19 "search"
-20 "spell menu"
-21 "use 'spell'"
-22 "use 'ispell'"
-23 "miscellaneous menu"
-24 "format paragraph"
-25 "shell command"
-26 "check spelling"
-27 "main menu"
-28 "leave editor"
-29 "help"
-30 "file operations"
-31 "redraw screen"
-32 "settings"
-33 "search"
-34 "miscellaneous"
-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 "
-39 "^d down ^l left ^v undelete word "
-40 "^e search prompt ^m newline ^w delete word "
-41 "^f undelete char ^n next page ^x search "
-42 "^g begin of line ^o end of line ^y delete line "
-43 "^h backspace ^p prev page ^z undelete line "
-44 "^[ (escape) menu ESC-Enter: exit ee "
-45 " "
-46 "Commands: "
-47 "help : get this info file : print file name "
-48 "read : read a file char : ascii code of char "
-49 "write : write a file case : case sensitive search "
-50 "exit : leave and save nocase : case insensitive search "
-51 "quit : leave, no save !cmd : execute \"cmd\" in shell "
-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 "+# :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 "
-60 "^t top of text ^o end of line ^v undelete word ^r right "
-61 "^c command ^k delete char ^f undelete char ESC-Enter: exit ee "
-62 "help : get help info |file : print file name |line : print line # "
-63 "read : read a file |char : ascii code of char |0-9 : go to line \"#\""
-64 "write: write a file |case : case sensitive search |exit : leave and save "
-65 "!cmd : shell \"cmd\" |nocase: ignore case in search |quit : leave, no save"
-66 "expand: expand tabs |noexpand: do not expand tabs "
-67 " press Escape (^[) for menu"
-68 "no file"
-69 "ascii code: "
-70 "sending contents of buffer to \"%s\" "
-71 "command: "
-72 "name of file to write: "
-73 "name of file to read: "
-74 "character = %d"
-75 "unknown command \"%s\""
-76 "entered command is not unique"
-77 "line %d "
-78 "length = %d"
-79 "current file is \"%s\" "
-80 "usage: %s [-i] [-e] [-h] [+line_number] [file(s)]\n"
-81 " -i turn off info window\n"
-82 " -e do not convert tabs to spaces\n"
-83 " -h do not use highlighting\n"
-84 "file \"%s\" is a directory"
-85 "new file \"%s\""
-86 "can't open \"%s\""
-87 "file \"%s\", %d lines"
-88 "finished reading file \"%s\""
-89 "reading file \"%s\""
-90 ", read only"
-91 "file \"%s\", %d lines"
-92 "enter name of file: "
-93 "no filename entered: file not saved"
-94 "changes have been made, are you sure? (y/n [n]) "
-95 "y"
-96 "file already exists, overwrite? (y/n) [n] "
-97 "unable to create file \"%s\""
-98 "writing file \"%s\""
-99 "\"%s\" %d lines, %d characters"
-100 " ...searching"
-101 "string \"%s\" not found"
-102 "search for: "
-103 "could not exec %s"
-104 "press return to continue "
-105 "press Esc to cancel"
-106 "menu too large for window"
-107 "press any key to continue "
-108 "shell command: "
-109 "...formatting paragraph..."
-110 "<!echo 'list of unrecognized words'; echo -=-=-=-=-=-"
-111 "sending contents of edit buffer to 'spell'"
-112 "right margin is: "
-113 "restricted mode: unable to perform requested operation"
-114 "ON"
-115 "OFF"
-116 "HELP"
-117 "WRITE"
-118 "READ"
-119 "LINE"
-120 "FILE"
-121 "CHARACTER"
-122 "REDRAW"
-123 "RESEQUENCE"
-124 "AUTHOR"
-125 "VERSION"
-126 "CASE"
-127 "NOCASE"
-128 "EXPAND"
-129 "NOEXPAND"
-130 "EXIT"
-131 "QUIT"
-132 "INFO"
-133 "NOINFO"
-134 "MARGINS"
-135 "NOMARGINS"
-136 "AUTOFORMAT"
-137 "NOAUTOFORMAT"
-138 "ECHO"
-139 "PRINTCOMMAND"
-140 "RIGHTMARGIN"
-141 "HIGHLIGHT"
-142 "NOHIGHLIGHT"
-143 "EIGHTBIT"
-144 "NOEIGHTBIT"
-145 "emacs key bindings "
-146 "^a beginning of line ^i tab ^r restore word "
-147 "^b back 1 char ^j undel char ^t begin of file "
-148 "^c command ^k delete line ^u end of file "
-149 "^d delete char ^l undelete line ^v next page "
-150 "^e end of line ^m newline ^w delete word "
-151 "^f forward 1 char ^n next line ^x search "
-152 "^g go back 1 page ^o ascii char insert ^y search prompt "
-153 "^h backspace ^p prev line ^z next word "
-154 "^[ (escape) menu ^y search prompt ^k delete line ^p prev li ^g prev page"
-155 "^o ascii code ^x search ^l undelete line ^n next li ^v next page"
-156 "^u end of file ^a begin of line ^w delete word ^b back 1 char "
-157 "^t begin of file ^e end of line ^r restore word ^f forward 1 char "
-158 "^c command ^d delete char ^j undelete char ^z next word "
-159 "EMACS"
-160 "NOEMACS"
-161 " +# put cursor at line #\n"
-162 "unable to open .init.ee for writing, no configuration saved!"
-163 "ee configuration saved in file %s"
-164 "save editor configuration"
-165 "save ee configuration"
-166 "save in current directory"
-167 "save in home directory"
-168 "ee configuration not saved"
-169 "must specify a file when invoking ree"
-180 "menu too large for window"
-181 "^^more^^"
-182 "VVmoreVV"
-183 "16 bit characters "
-184 "16BIT"
-185 "NO16BIT"