bringing ee up to date

Eitan Adler eitanadlerlist at gmail.com
Fri Jan 9 13:36:34 PST 2009


I think that these three files bring ee up to date from 1.4.2 to 1.4.6.
-- 
Eitan Adler
"Security is increased by designing for the way humans actually behave."
-Jakob Nielsen
-------------- next part --------------
--- ee/nls/en_US.US-ASCII/ee.msg	2009-01-09 15:52:22.000000000 -0500
+++ easyedit/nls/en_US.US-ASCII/ee.msg	1996-11-29 22:24:20.000000000 -0500
@@ -3,7 +3,7 @@
 $ 
 $ For ee patchlevel 3
 $ 
-$ $FreeBSD$
+$ $Header: /home/hugh/sources/old_ae/RCS/ee.msg,v 1.8 1996/11/30 03:23:40 hugh Exp $
 $ 
 $ 
 $set 1
@@ -51,7 +51,7 @@
 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                                 "
+44 "^[ (escape) menu                                                           "
 45 "                                                                           "
 46 "Commands:                                                                  "
 47 "help    : get this info                 file    : print file name          "
@@ -68,7 +68,7 @@
 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  "
+61 "^c command        ^k delete char    ^f undelete char                          "
 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 +110,7 @@
 100 "           ...searching"
 101 "string \"%s\" not found"
 102 "search for: "
-103 "could not exec %s"
+103 "could not exec %s\n"
 104 "press return to continue "
 105 "press Esc to cancel"
 106 "menu too large for window"
@@ -154,8 +154,8 @@
 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             "
+147 "^b back 1 char          ^j undel char           ^t top of text             "
+148 "^c command              ^k delete line          ^u bottom of text          "
 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 +164,7 @@
 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        "
+157 "^t top of text    ^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"
-------------- next part --------------
Only in easyedit/: Changes
diff -u ee/ee.1 easyedit/ee.1
--- ee/ee.1	2009-01-09 15:52:22.000000000 -0500
+++ easyedit/ee.1	2001-12-15 23:49:37.000000000 -0500
@@ -1,623 +1,543 @@
 .\"
-.\" $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
+.\"  To format this reference page, use the command:
+.\"
+.\"    nroff -man ee.1
+.\"
+.\"  $Header: /home/hugh/sources/old_ae/RCS/ee.1,v 1.22 2001/12/16 04:49:27 hugh Exp $
+.\"
+.\"
+.TH ee 1 "" "" "" ""
+.SH NAME
+ee \- easy editor
+.SH SYNOPSIS
+.nf
+ee [-e] [-i] [-h] [+#] [\fIfile\fR ...]
+ree [-e] [-i] [-h] [+#] [\fIfile\fR ...]
+.ta
+.fi
+.ad b
+.SH DESCRIPTION
+The command 
+.I ee 
+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 command 
+.I ree 
+is the same as 
+.I ee, 
+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
+.PP
+An editor with similar user-friendly qualities but more features is available 
+and is called 
+.I aee.
+.PP
+For 
+.I ee
+to work properly, the environment variable 
+.SM TERM 
+must be set to indicate the type of terminal being used.  For 
+example, for an 
+.SM HP 700/92 
+terminal, the 
+.SM 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
+.\"
+.\"     options
+.\"
+.SS Options
+The following options are available from the command line:
+.PP
+.TP 4
+.B -e
+Turns off expansion of tab character to spaces.
+.TP 
+.B -i
+Turns off display of information window at top of terminal.
+.TP
+.B -h
+Turns 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" ,
+.TP
+.B +#
+Moves the cursor to line '#' at startup.
+.br
+.\"
+.\"     control keys
+.\"
+.SS "Control keys"
+To do anything other than insert text, the user must use the control 
+keys (the 
+.B Control 
+key, represented by a "^",  pressed in conjunction with an 
+alphabetic key, e.g., ^a) and function keys available on the keyboard 
+(such as 
+.BR "Next Page" ", " "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
+.PP
+Since not all terminals have function keys, 
+.I ee
+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 
+.BR ^u .
+.RS 4
+.nf
+.ta 1.4i
+.sp
+^a 	Prompt for the decimal value of a character to insert.
+^b 	Move to the bottom of the text.
+^c 	Get the prompt for a command.
+^d 	Move the cursor down.
+^e 	Prompt for the string to search for.
+^f 	Undelete the last deleted character.
+^g 	Move to the beginning of the line.
+^h 	Backspace.
+^i 	Tab.
+^j 	Insert a newline.
+^k 	Delete the character the cursor is sitting on.
+^l 	Move the cursor left.
+^m 	Insert a newline.
+^n 	Move to the next page.
+^o 	Move to the end of the line.
+^p 	Move to the previous page.
+^r 	Move the cursor to the right.
+^t 	Move to the top of the text.
+^u 	Move the cursor up.
+^v 	Undelete the last deleted word.
+^w 	Delete the word beginning at the cursor position.
+^x 	Search.
+^y 	Delete from the cursor position to the end of line.
+^z 	Undelete the last deleted line.
+^[ (ESC)	Pop up menu.
+.ta
+.fi
+.RE
+.sp
+.SS "EMACS keys mode"
+.PP
+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 
+.B settings 
+menu, or via the initialization file (see below).  The mappings are as follows:
+.RS
+.nf
+.ta 1.4i
+^a	Move to the beginning of the line.
+^b	Back 1 character.
+^c	Command prompt.
+^d	Delete character the cursor is sitting on.
+^e	End of line.
+^f	Forward 1 character.
+^g	Go back 1 page.
+^h	Backspace.
+^i	Tab.
+^j	Undelete last deleted character.
+^k	Delete line.
+^l	Undelete last deleted line.
+^m	Insert a newline.
+^n	Move to the next line.
+^o	Prompt for the decimal value of a character to insert.
+^p	Previous line.
+^r	Restore last deleted word.
+^t	Move to the top of the text.
+^u	Move to the bottom of the text.
+^v	Move to the next page.
+^w	Delete the word beginning at the cursor position.
+^y	Prompt for the string to search for.
+^z	Next word.
+^[ (ESC)	Pop up menu.
+.ta
+.fi
+.RE
+.sp
+.\"
+.\"     function keys
+.\"
+.SS "Function Keys"
+.RS 4
+.IP "\fBNext Page\fR"
 Move to the next page.
-.It Prev Page
+.IP "\fBPrev Page\fR"
 Move to the previous page.
-.It Delete Char
+.IP "\fBDelete Char\fR"
 Delete the character the cursor is on.
-.It Delete Line
+.IP "\fBDelete Line\fR"
 Delete from the cursor to the end of line.
-.It Insert line
+.IP "\fBInsert line\fR"
 Insert a newline at the cursor position.
-.It Arrow keys
+.IP "\fBArrow keys\fR"
 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
+.RE
+.\"
+.\"     commands
+.\"
+.SS Commands
+.PP
+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 
+.SM \fBESC\fR
+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
+.RS 4
+.IP "!\fBcmd\fR"
+Execute \fBcmd\fR in a shell.
+.IP "\fB0-9\fR"
 Move to the line indicated.
-.It case
+.IP "\fBcase\fR"
 Make searches case sensitive.
-.It character
-Display the ASCII value of the character at the cursor.
-.It exit
+.IP "\fBcharacter\fR"
+Display the ascii value of the character at the cursor.
+.IP "\fBexit\fR"
 Save the edited text, and leave the editor.
-.It expand
+.IP "\fBexpand\fR"
 Expand tabs to spaces.
-.It file
+.IP "\fBfile\fR"
 Print the name of the file.
-.It help
+.IP "\fBhelp\fR"
 Display help screen.
-.It line
+.IP "\fBline\fR"
 Display the current line number.
-.It nocase
+.IP "\fBnocase\fR
 Make searches insensitive to case (the default).
-.It noexpand
-Do not expand tab to spaces when the TAB key is pressed.
-.It quit
+.IP "\fBnoexpand\fR"
+Don't expand tab to spaces when the TAB key is pressed.
+.IP "\fBquit\fR"
 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
+.IP "\fBread\fR \fIfile\fR"
+Read the named \fIfile\fR.
+.IP "\fBwrite\fR \fIfile\fR"
+Write the text to the named \fIfile\fR.
+.RE
+.\"
+.\"     menu operations
+.\"
+.SS "Menu Operations"
+.PP
+Pop-up menus can be obtained by pressing the 
+.B escape 
+key (or 
+.B ^[ 
+if no 
+.B 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 
+.B ^u
+for moving up and 
+.B ^d 
+for moving down to move to the desired items in the menu, then press 
+.B return 
 to perform the indicated task.
-.Pp
-To the left of each menu item is a letter, which if the corresponding
+.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
+.PP
+The main menu in \fIee\fR is as follows:
+.RS 4
+.IP "\fBleave editor\fR" 
+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
+.IP "\fBhelp\fR"
+Displays a help screen, with all of the keyboard operations and commands.
+.IP "\fBfile operations\fR"
+Pops 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 \fBInitializing ee from a 
+file\fR).
+.IP "\fBredraw screen\fR"
+Provides a means to repaint the screen if the screen has been corrupted.
+.IP "\fBsettings\fR"
+Shows 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 \fBescape\fR key.  (See \fBModes\fR 
 below.)
-.It search
-Pop up a menu in which the user may choose to enter a string to search
+.IP "\fBsearch\fR"
+.br
+Pops 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,
+.IP "\fBmiscellaneous\fR"
+Pops 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
+.RE
+.\"
+.\"     paragraph formatting
+.\"
+.SS "Paragraph Formatting"
+.PP
+Paragraphs are defined for \fIee\fR by a block of text bounded by:
+.sp 
+.RS 8
+.IP \(bu 
 Begin or end of file.
-.It
+.IP \(bu
 Line with no characters, or only spaces and/or tabs.
-.It
+.IP \(bu
 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
+.RE
+.PP
+A paragraph may be formatted two ways:  explicitly by choosing the 
+\fBformat paragraph\fR menu item, or by setting \fIee\fR 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,
+.PP
+There are three states for text operation in \fIee\fR: free-form, margins, 
 and automatic formatting.
-.Pp
-"Free-form" is best used for things like programming.
-There are no
+.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
+.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 \fBsettings\fR 
+menu, the default is for the margin to be the right edge of the 
+terminal).  This is the mode that allows the \fBformat paragraph\fR menu 
+item to work.
+.PP
+"Automatic formatting" provides word-processor-like behavior.  The user 
+may type in text, while \fIee\fR 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
+.\"
+.\"     modes
+.\"
+.SS Modes
+.PP
+Although ee 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:
+.RS 4
+.IP "\fBtab expansion\fR"
 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
+.IP "\fBcase sensitivity\fR"
+The search operation can be sensitive to whether characters are upper- or 
 lower-case, or ignore case completely.
-.It margins observed
+.IP "\fBmargins observed\fR"
 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
+.IP "\fBauto paragraph formatting\fR"
+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
+.IP "\fBeightbit characters\fR"
+Toggles whether eight bit characters are displayed as their value in angle 
+brackets (e.g. "<220>") or as a character.
+.IP "\fBinfo window\fR"
+A window showing the keyboard operations that can be performed can be 
 displayed or not.
-.It emacs keys
+.IP "\fBemacs keys\fR"
 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
+.IP "\f16 bit characters\fR"
+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.
+.RE
+.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
+.\"
+.\"     spell checking
+.\"
+.SS "Spell Checking"
+.PP
+There are two ways to have the spelling in the text checked from \fIee\fR.  
+One is by the traditional \fIspell\fR(1) command, the other is with the 
+optional \fIispell\fR(1) command.
+.PP
+Using \fIspell\fR, the words that are not recognized will be placed at the top 
+of the file.  For the \fIispell\fR option, the file is written to disk, 
+then \fIispell\fR run on the file, and the file read back in once 
+\fIispell\fR has completed making changes to the file.
+.\"
+.\"     printing
+.\"
+.SS "Printing the contents of the editor"
+.PP
+The user may select a menu item which prints the contents of the editor.  
+.I ee
+pipes the text in the editor to the command specified by the 
+initialization command 
+.B printcommand
+(see the section 
+.B Initializing ee from a file 
+below).  The default is to send the contents to "lp".  
+.PP
+Whatever the user assigns to 
+.B printcommand 
+must take input from 
+standard input.  See your system administrator for more details.
+.\"
+.\"     shell operations
+.\"
+.SS "Shell operations"
+.PP
+Shell commands can be executed from within 
+.I ee 
+by selecting the 
+.B shell command 
+item in the 
+.B miscellaneous 
+menu, or by placing an exclamation mark ("!") before the command to 
+execute at the 
+.B 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
+.RS 4
+.sp
+><!sort
+.sp
+.RE
+This would send the contents of the editor to be piped into the 
+.I sort 
+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.
+.\"
+.\"     initializing ee from a file
+.\"
+.SS "Initializing ee from a file"
+.PP
+Since different users have different preferences, \fIee\fR allows some 
+slight configurability.  There are three possible locations for an 
+initialization file for ee:  the file \fI/usr/local/lib/init.ee\fR, the 
+file \fI.init.ee\fR in the user's home directory, or the file \fI.init.ee\fR 
+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 \fBprint\fR 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
+.PP
+The file \fI\/usr/local/lib/init.ee\fR is read first, then 
+\fI$HOME/.init.ee\fR, then \fI.init.ee\fR, with the settings specified by the 
 most recent file read taking precedence.
-.Pp
+.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
+.RS 4
+.IP \fBcase\fR
+Sets searches to be case sensitive.
+.IP \fBnocase\fR
+Sets searches to be insensitive to case (default).
+.IP \fBexpand\fR
+Causes \fIee\fR to expand tabs to spaces (default).
+.IP \fBnoexpand\fR 
+Causes \fIee\fR to insert tabs as a single character.
+.IP \fBinfo\fR
+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
+.IP \fBnoinfo\fR
+Turns off the display of the information window.
+.IP \fBmargins\fR
+Causes \fIee\fR 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
+.IP \fBnomargins\fR
+Allows lines to extend beyond the right margin.
+.IP \fBautoformat\fR
+Causes \fIee\fR 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
+.IP \fBnoautoformat\fR
+Turns off automatic paragraph formatting (default).
+.IP \fBprintcommand\fR
+Allows the setting of the print command (default: "lp").
+.IP \fBrightmargin\fR
+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
+.IP \fBhighlight\fR
+Turns on highlighting border of information window and menus (default).
+.IP \fBnohighlight\fR
+Turns off highlighting of border of information window and menus.
+.IP \fBeightbit\fR
+Turns on display of eight bit characters.
+.IP \fBnoeightbit\fR
+Turns off display of eight bit characters (they are displayed as their decimal 
 value inside angle brackets, e.g., "<220>").
-.It 16bit
+.IP \fB16bit\fR
 Turns on handling of 16-bit characters.
-.It no16bit
+.IP \fbno16bit\fR
 Turns off handling of 16-bit characters.
-.It emacs
+.IP \fBemacs\fR
 Turns on emacs key bindings.
-.It noemacs
+.IP \fBnoemacs\fR
 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
+.RE
+.\"
+.\"     save editor configuration
+.\"
+.SS "Save Editor Configuration"
+.PP
+When using this entry from the 
+.B settings 
+menu, the user may choose to save the current configuration of 
+the editor (see \fBInitializing ee from a 
+file\fR above) to a file named 
+.I .init.ee 
+in the current directory or the user's home directory.  If a file named 
+.I .init.ee 
+already exists, it will be renamed 
+.IR .init.ee.old .
+.\"
+.\"     Caveats
+.\"
+.SH CAVEATS
+.PP
+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"
+.I ee 
+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
+.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
+.SH FILES
+.PP
+.I /usr/local/lib/init.ee
+.br
+.I $HOME/.init.ee
+.br
+.I .init.ee
+.SH AUTHOR
+.PP
+The software 
+.I ee
+was developed by 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, 2001 Hugh Mahon.
+.SH "SEE ALSO"
+.PP
+termcap(4), terminfo(4), environ(5), spell(1), ispell(1), lp(1), aee(1)
+
diff -u ee/ee.c easyedit/ee.c
--- ee/ee.c	2009-01-09 15:52:22.000000000 -0500
+++ easyedit/ee.c	2002-09-20 20:46:16.000000000 -0400
@@ -48,11 +48,11 @@
  |	This software and documentation contains
  |	proprietary information which is protected by
  |	copyright.  All rights are reserved.
+ |
+ |	$Header: /home/hugh/sources/old_ae/RCS/ee.c,v 1.99 2001/12/24 05:43:32 hugh Exp $
+ |
  */
 
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
 char *ee_copyright_message = 
 "Copyright (c) 1986, 1990, 1991, 1992, 1993, 1994, 1995, 1996 Hugh Mahon ";
 
@@ -62,41 +62,45 @@
 	"copyright.  All rights are reserved."
 	};
 
-char *version = "@(#) ee, version 1.4.1";
+#include "ee_version.h"
+
+char *version = "@(#) ee, version "  EE_VERSION  " $Revision: 1.99 $";
 
 #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 <fcntl.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_STDARG
-#include <stdarg.h>
-#endif
+
 #ifdef HAS_STDLIB
 #include <stdlib.h>
 #endif
-#include <string.h>
+
+#ifdef HAS_STDARG
+#include <stdarg.h>
+#endif
+
 #ifdef HAS_UNISTD
 #include <unistd.h>
 #endif
 
+#ifdef HAS_CTYPE
+#include <ctype.h>
+#endif
+
+
 #ifndef NO_CATGETS
 #include <locale.h>
 #include <nl_types.h>
@@ -200,11 +204,8 @@
 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 *print_command = "lp";	/* 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		*/
@@ -220,7 +221,6 @@
 WINDOW *text_win;
 WINDOW *help_win;
 WINDOW *info_win;
-WINDOW *count_win;
 
 #if defined(__STDC__) || defined(__cplusplus)
 #define P_(s) s
@@ -300,7 +300,7 @@
 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 write_file P_((char *file_name));
 int search P_((int display_message));
 void search_prompt P_((void));
 void del_char P_((void));
@@ -341,7 +341,6 @@
 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_
@@ -538,23 +537,29 @@
 
 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[];
 {
-	/* 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);
-	}
+	int counter;
+	pid_t parent_pid;
+
+	for (counter = 1; counter < 24; counter++)
+		signal(counter, SIG_IGN);
 
 	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;
@@ -575,7 +580,7 @@
 	scr_pos =0;
 	scr_vert = 0;
 	scr_horz = 0;
-	bit_bucket = fopen(_PATH_DEVNULL, "w");
+	bit_bucket = fopen("/dev/null", "w");
 	edit = TRUE;
 	gold = case_sen = FALSE;
 	shell_fork = TRUE;
@@ -604,26 +609,30 @@
 
 	clear_com_win = TRUE;
 
+	counter = 0;
+
 	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();
+		wrefresh(text_win);
 		in = wgetch(text_win);
 		if (in == -1)
-			continue;
-
+			exit(0);
+		/*
+		 |	The above check used to work to detect if the parent 
+		 |	process died, but now it seems we need a more 
+		 |	sophisticated check.
+		 */
+		if (counter > 50)
+		{
+			parent_pid = getppid();
+			if (parent_pid == 1)
+				edit_abort(1);
+			else
+				counter = 0;
+		}
+		else
+			counter++;
+		
 		resize_check();
 
 		if (clear_com_win)
@@ -821,7 +830,6 @@
 		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)
 		{
@@ -955,13 +963,13 @@
 		}
 		else
 		{
-			waddch(window, (unsigned char)character );
+			waddch(window, (char)character );
 			return(1);
 		}
 	}
 	else
 	{
-		waddch(window, (unsigned char)character);
+		waddch(window, (char)character);
 		return(1);
 	}
 	for (i2 = 0; (string[i2] != (char) NULL) && (((column+i2+1)-horiz_offset) < last_col); i2++)
@@ -1066,8 +1074,8 @@
 	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;
@@ -1519,10 +1527,8 @@
 		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_HOME)
+		top();
 	else if ( in == KEY_UP)
 		up();
 	else if (in == KEY_DOWN)
@@ -1688,7 +1694,7 @@
 			cmd_str = cmd_str2 = get_string(file_write_prompt_str, TRUE);
 		}
 		tmp_file = resolve_name(cmd_str);
-		write_file(tmp_file, 1);
+		write_file(tmp_file);
 		if (tmp_file != cmd_str)
 			free(tmp_file);
 	}
@@ -1869,7 +1875,7 @@
 		esc_flag = FALSE;
 		in = wgetch(com_win);
 		if (in == -1)
-			continue;
+			exit(0);
 		if (((in == 8) || (in == 127) || (in == KEY_BACKSPACE)) && (g_pos > 0))
 		{
 			tmp_int = g_horz;
@@ -1894,7 +1900,7 @@
 				esc_flag = TRUE;
 				in = wgetch(com_win);
 				if (in == -1)
-					continue;
+					exit(0);
 			}
 			*nam_str = in;
 			g_pos++;
@@ -1968,7 +1974,7 @@
 	int number;
 	int i;
 	char *ptr;
-	char *direction = NULL;
+	char *direction;
 	struct text *t_line;
 
 	ptr = cmd_str;
@@ -2039,7 +2045,7 @@
 {
 	char *buff;
 	int count;
-	struct files *temp_names = NULL;
+	struct files *temp_names;
 	char *name;
 	char *ptr;
 	int no_more_opts = FALSE;
@@ -2059,7 +2065,7 @@
 	input_file = FALSE;
 	recv_file = FALSE;
 	count = 1;
-	while ((count < numargs) && (!no_more_opts))
+	while ((count < numargs)&& (!no_more_opts))
 	{
 		buff = arguments[count];
 		if (!strcmp("-i", buff))
@@ -2083,7 +2089,7 @@
 			fprintf(stderr, usage4);
 			exit(1);
 		}
-		else if (*buff == '+')
+		else if ((*buff == '+') && (start_at_line == NULL))
 		{
 			buff++;
 			start_at_line = buff;
@@ -2315,8 +2321,8 @@
 		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)
@@ -2395,7 +2401,7 @@
 		file_name = tmp_file;
 	}
 
-	if (write_file(file_name, 1))
+	if (write_file(file_name))
 	{
 		text_changes = FALSE;
 		quit(0);
@@ -2435,7 +2441,6 @@
 		recv_file = TRUE;
 		input_file = TRUE;
 		check_fp();
-		text_changes = FALSE;
 	}
 	return(0);
 }
@@ -2472,9 +2477,8 @@
 }
 
 int 
-write_file(file_name, warn_if_exists)
+write_file(file_name)
 char *file_name;
-int warn_if_exists;
 {
 	char cr;
 	char *tmp_point;
@@ -2484,8 +2488,7 @@
 	int write_flag = TRUE;
 
 	charac = lines = 0;
-	if (warn_if_exists &&
-	    ((in_file_name == NULL) || strcmp(in_file_name, file_name)))
+	if ((in_file_name == NULL) || strcmp(in_file_name, file_name))
 	{
 		if ((temp_fp = fopen(file_name, "r")))
 		{
@@ -3151,8 +3154,9 @@
 			}
 			for (value = 1; value < 24; value++)
 				signal(value, SIG_DFL);
-			execl(path, last_slash, "-c", string, (char *)NULL);
-			errx(1, exec_err_msg, path);
+			execl(path, last_slash, "-c", string, NULL);
+			printf(exec_err_msg, path);
+			exit(-1);
 		}
 		else	/* if the parent	*/
 		{
@@ -3195,7 +3199,7 @@
 	}
 	if (shell_fork)
 	{
-		printf("%s", continue_msg);
+		printf(continue_msg);
 		fflush(stdout);
 		while ((in = getchar()) != '\n')
 			;
@@ -3255,12 +3259,9 @@
 	if (info_window)
 	{
 		info_type = CONTROL_KEYS;
-		info_win = newwin(5, COLS, 0, 0);
+		info_win = newwin(6, 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;
@@ -3285,7 +3286,6 @@
 	delwin(text_win);
 	delwin(com_win);
 	delwin(help_win);
-	delwin(count_win);
 	set_up_term();
 	redraw();
 	wrefresh(text_win);
@@ -3303,7 +3303,7 @@
 	int counter;
 	int length;
 	int input;
-	int temp = 0;
+	int temp;
 	int list_size;
 	int top_offset;		/* offset from top where menu items start */
 	int vert_pos;		/* vertical position			  */
@@ -3385,7 +3385,10 @@
 			wmove(temp_win, (counter + top_offset - off_start), 3);
 
 		wrefresh(temp_win);
-		input = wgetch(temp_win);
+		in = wgetch(temp_win);
+		input = in;
+		if (input == -1)
+			exit(0);
 
 		if (((tolower(input) >= 'a') && (tolower(input) <= 'z')) || 
 		    ((input >= '0') && (input <= '9')))
@@ -3628,6 +3631,8 @@
 	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);
@@ -3655,6 +3660,11 @@
 		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);
 }
 
@@ -3688,15 +3698,12 @@
 	idlok(text_win, TRUE);
 	werase(text_win);
 	info_window = TRUE;
-	info_win = newwin(5, COLS, 0, 0);
+	info_win = newwin(6, 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;
 }
@@ -3727,7 +3734,7 @@
 	{
 		string = get_string(file_write_prompt_str, TRUE);
 		tmp_file = resolve_name(string);
-		write_file(tmp_file, 1);
+		write_file(tmp_file);
 		if (tmp_file != string)
 			free(tmp_file);
 		free(string);
@@ -3764,7 +3771,7 @@
 				string = tmp_file;
 			}
 		}
-		if (write_file(string, 1))
+		if (write_file(string))
 		{
 			in_file_name = string;
 			text_changes = FALSE;
@@ -4073,7 +4080,7 @@
 }
 
 unsigned char *init_name[3] = {
-	"/usr/share/misc/init.ee", 
+	"/usr/local/lib/init.ee", 
 	NULL, 
 	".init.ee"
 	};
@@ -4090,8 +4097,6 @@
 	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");
@@ -4377,25 +4382,17 @@
 void 
 ispell_op()
 {
-	char template[128], *name;
+	char name[128];
 	char string[256];
-	int fd;
+	int pid;
 
 	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))
+	pid = getpid();
+	sprintf(name, "/tmp/ee.%d", pid);
+	if (write_file(name))
 	{
 		sprintf(string, "ispell %s", name);
 		sh_command(string);
@@ -4993,19 +4990,6 @@
 	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, 
@@ -5046,7 +5030,7 @@
 
 #ifndef NO_CATGETS
 	setlocale(LC_ALL, "");
-	catalog = catopen("ee", NL_CAT_LOCALE);
+	catalog = catopen("ee", 0);
 #endif /* NO_CATGETS */
 
 	modes_menu[0].item_string = catgetlocal( 1, "modes menu");
@@ -5092,7 +5076,7 @@
 	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[9] = catgetlocal( 44, "^[ (escape) menu                                                           ");
 	help_text[10] = catgetlocal( 45, "                                                                           ");
 	help_text[11] = catgetlocal( 46, "Commands:                                                                  ");
 	help_text[12] = catgetlocal( 47, "help    : get this info                 file    : print file name          ");
@@ -5109,7 +5093,7 @@
 	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  ");
+	control_keys[4] = catgetlocal( 61, "^c command        ^k delete char    ^f undelete char                          ");
 	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 ");
@@ -5151,7 +5135,7 @@
 	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");
+	exec_err_msg = catgetlocal( 103, "could not exec %s\n");
 	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");
@@ -5199,8 +5183,8 @@
 	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[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[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                  ");
@@ -5219,11 +5203,11 @@
 	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_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_string = catgetlocal( 159, "EMACS");
 	NOEMACS_string = catgetlocal( 160, "NOEMACS");
 	usage4 = catgetlocal( 161, "       +#   put cursor at line #\n");
Only in easyedit/: ee_version.h
diff -u ee/new_curse.c easyedit/new_curse.c
--- ee/new_curse.c	2009-01-09 15:52:22.000000000 -0500
+++ easyedit/new_curse.c	2002-09-20 20:48:03.000000000 -0400
@@ -37,15 +37,14 @@
  |	Copyright (c) 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995 Hugh Mahon
  |	All are rights reserved.
  |
- |	$Header: /home/hugh/sources/old_ae/RCS/new_curse.c,v 1.49 1998/12/21 02:25:59 hugh Exp hugh $
+ |	$Header: /home/hugh/sources/old_ae/RCS/new_curse.c,v 1.54 2002/09/21 00:47:14 hugh Exp $
  |
  */
 
 char *copyright_message[] = { "Copyright (c) 1986, 1987, 1988, 1991, 1992, 1993, 1994, 1995 Hugh Mahon",
 				"All rights are reserved."};
 
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+char * new_curse_name= "@(#) new_curse.c $Revision: 1.54 $";
 
 #include "new_curse.h"
 #include <signal.h>
@@ -71,7 +70,11 @@
 #include <stdlib.h>
 #endif
 
+#if defined(__STDC__)
 #include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
 
 #ifdef HAS_UNISTD
 #include <unistd.h>
@@ -498,6 +501,10 @@
 char *Strings;
 #endif
 
+#if !defined(TERMCAP)
+#define TERMCAP "/etc/termcap"
+#endif 
+
 struct KEYS {
 	int length;	/* length of string sent by key			*/
 	char *string;	/* string sent by key				*/
@@ -655,15 +662,39 @@
 
 static char nc_scrolling_ability = FALSE;
 
+char *terminfo_path[] = {
+        "/usr/lib/terminfo", 
+        "/usr/share/lib/terminfo", 
+        "/usr/share/terminfo", 
+        NULL 
+        };
+
 #ifdef CAP
 
-int tc_Get_int(int);
-void CAP_PARSE(void);
-void Find_term(void);
+#if defined(__STDC__) || defined(__cplusplus)
+#define P_(s) s
+#else
+#define P_(s) ()
+#endif /* __STDC__ */
+
+int tc_Get_int P_((int));
+void CAP_PARSE P_((void));
+void Find_term P_((void));
+
+#undef P_
 
 #endif /* CAP */
 
 
+#ifndef __STDC__
+#ifndef HAS_STDLIB
+extern char *fgets();
+extern char *malloc();
+extern char *getenv();
+FILE *fopen();			/* declaration for open function	*/
+#endif /* HAS_STDLIB */
+#endif /* __STDC__ */
+
 #ifdef SIGWINCH
 
 /*
@@ -747,6 +778,7 @@
 initscr()		/* initialize terminal for operations	*/
 {
 	int value;
+	int counter;
 	char *lines_string;
 	char *columns_string;
 #ifdef CAP
@@ -879,30 +911,26 @@
 		Term_File_name = malloc(Data_Line_len);
 		sprintf(Term_File_name, "%s/%c/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE);
 		Fildes = open(Term_File_name, O_RDONLY);
+		if (Fildes == -1)
+		{
+        		sprintf(Term_File_name, "%s/%x/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE);
+        		Fildes = open(Term_File_name, O_RDONLY);
+		}
 	}
-	if (Fildes == -1)
-	{
-		TERM_PATH = "/usr/lib/terminfo";
-		Data_Line_len = 23 + strlen(TERM_PATH) + strlen(TERMINAL_TYPE);
-		Term_File_name = malloc(Data_Line_len);
-		sprintf(Term_File_name, "%s/%c/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE);
-		Fildes = open(Term_File_name, O_RDONLY);
-	}
-	if (Fildes == -1)
-	{
-		TERM_PATH = "/usr/share/lib/terminfo";
-		Data_Line_len = 23 + strlen(TERM_PATH) + strlen(TERMINAL_TYPE);
-		Term_File_name = malloc(Data_Line_len);
-		sprintf(Term_File_name, "%s/%c/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE);
-		Fildes = open(Term_File_name, O_RDONLY);
-	}
-	if (Fildes == -1)
+	counter = 0;
+	while ((Fildes == -1) && (terminfo_path[counter] != NULL))
 	{
-		TERM_PATH = "/usr/share/terminfo";
+		TERM_PATH = terminfo_path[counter];
 		Data_Line_len = 23 + strlen(TERM_PATH) + strlen(TERMINAL_TYPE);
 		Term_File_name = malloc(Data_Line_len);
 		sprintf(Term_File_name, "%s/%c/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE);
 		Fildes = open(Term_File_name, O_RDONLY);
+		if (Fildes == -1)
+		{
+        		sprintf(Term_File_name, "%s/%x/%s", TERM_PATH, *TERMINAL_TYPE, TERMINAL_TYPE);
+        		Fildes = open(Term_File_name, O_RDONLY);
+		}
+		counter++;
 	}
 	if (Fildes == -1)
 	{
@@ -919,15 +947,15 @@
 	if ((pointer = Term_File_name = getenv("TERMCAP")) != NULL)
 	{
 		if (*Term_File_name != '/')
-			Term_File_name = "/etc/termcap";
+			Term_File_name = TERMCAP;
 	}
 	else
 	{
-		Term_File_name = "/etc/termcap";
+		Term_File_name = TERMCAP;
 	}
 	if ((TFP = fopen(Term_File_name, "r")) == NULL)
 	{
-		printf("unable to open /etc/termcap file \n");
+		printf("unable to open %s file \n", TERMCAP);
 		exit(0);
 	}
  	for (value = 0; value < 1024; value++)	
@@ -1340,7 +1368,7 @@
 	char *Name;
 	char *Ftemp;
 
-	Ftemp = Name = malloc(strlen(TERMINAL_TYPE + 1) + 1);
+	Ftemp = Name = malloc(strlen(TERMINAL_TYPE) + 2);
 	strcpy(Name, TERMINAL_TYPE);
 	while (*Ftemp != (char)NULL)
 		Ftemp++;
@@ -1425,7 +1453,6 @@
 		TERMINAL_TYPE = tc_;
 		rewind(TFP);
 		Find_term();
-		free(tc_);
 		tc_ = NULL;
 		CAP_PARSE();
 	}
@@ -1480,12 +1507,17 @@
 	Ntemp->Attrib = FALSE;
 	Ntemp->first_line = temp_screen = Screenalloc(cols);
 	Ntemp->first_line->number = 0;
+	Ntemp->line_array = (struct _line **) malloc(LINES * sizeof(struct _line *));
+	
+	Ntemp->line_array[0] = Ntemp->first_line;
+
 	for (i = 1; i < lines; i++)
 	{
 		temp_screen->next_screen = Screenalloc(cols);
 		temp_screen->next_screen->number = i;
 		temp_screen->next_screen->prev_screen = temp_screen;
 		temp_screen = temp_screen->next_screen;
+		Ntemp->line_array[i] = temp_screen;
 	}
 	Ntemp->first_line->prev_screen = NULL;
 	temp_screen->next_screen = NULL;
@@ -2010,16 +2042,17 @@
 	int j;
 
 	if (column > line->last_char)
-		line->row[line->last_char] = ' ';
+	{
+		for (j = line->last_char; j < column; j++)
+		{
+			line->row[j] = ' ';
+			line->attributes[j] = (char) NULL;
+		}
+	}
 	line->last_char = column;
 	line->row[column] = (char) NULL;
 	line->attributes[column] = (char) NULL;
 	line->changed = TRUE;
-	for (j = column + 1; j < cols; j++)
-	{
-		line->row[j] = ' ';
-		line->attributes[j] = (char) NULL;
-	}
 }
 
 void 
@@ -2137,12 +2170,21 @@
 		{
 			for (user_col = 0, virt_col = window->SC; 
 				(virt_col < virtual_scr->Num_cols) 
-				  && (user_col < window->Num_cols); 
+				  && (user_col < user_line->last_char); 
 				  	virt_col++, user_col++)
 			{
 				virtual_line->row[virt_col] = user_line->row[user_col];
 				virtual_line->attributes[virt_col] = user_line->attributes[user_col];
 			}
+			for (user_col = user_line->last_char, 
+			     virt_col = window->SC + user_line->last_char; 
+				(virt_col < virtual_scr->Num_cols) 
+				  && (user_col < window->Num_cols); 
+				  	virt_col++, user_col++)
+			{
+				virtual_line->row[virt_col] = ' ';
+				virtual_line->attributes[virt_col] = (char) NULL;
+			}
 		}
 		if (virtual_scr->Num_cols != window->Num_cols)
 		{
@@ -2154,11 +2196,6 @@
 					min(virtual_scr->Num_cols, 
 					  (user_line->last_char + window->SC));
 			}
-			else if (virtual_line->last_char > (user_line->last_char + window->SC))
-			{
-				virtual_line->row[min(virtual_scr->Num_cols, 
-					  (user_line->last_char + window->SC))] = ' ';
-			}
 		}
 		else
 			virtual_line->last_char = user_line->last_char;
@@ -2214,7 +2251,7 @@
 		return(-1);
 	}
 
-	return(read(STDIN_FILENO, &temp, 1)? temp : -1);
+	return(read(0, &temp, 1)? temp : -1);
 }
 #endif
 
@@ -2232,11 +2269,11 @@
 	if (Noblock)
 		in_value = ((bufp > 0) ? in_buff[--bufp] : timed_getchar());
 	else
-		in_value = ((bufp > 0) ? in_buff[--bufp] : read(STDIN_FILENO, &temp, 1)? temp : -1);
+		in_value = ((bufp > 0) ? in_buff[--bufp] : read(0, &temp, 1)? temp : -1);
 #else /* BSD_SELECT */
 #ifdef SYS5
 	in_value = ((bufp > 0) ? in_buff[--bufp] : 
-					(read(STDIN_FILENO, &temp, 1)> 0) ? temp : -1);
+					(read(0, &temp, 1)> 0) ? temp : -1);
 #else /* SYS5 */
 	if (Noblock)
 	{
@@ -2244,7 +2281,7 @@
 		old_arg = fcntl(0, F_GETFL, 0);
 		in_value = fcntl(0, F_SETFL, old_arg | FNDELAY);
 	}
-	in_value = ((bufp > 0) ? in_buff[--bufp] : read(STDIN_FILENO, &temp, 1)? temp : -1);
+	in_value = ((bufp > 0) ? in_buff[--bufp] : read(0, &temp, 1)? temp : -1);
 	if (Noblock)
 	{
 		fcntl(0, F_SETFL, old_arg);
@@ -2379,14 +2416,13 @@
 WINDOW *window;
 int c;
 {
-	int row, column;
+	int column, j;
 	int shift;	/* number of spaces to shift if a tab		*/
 	struct _line *tmpline;
 
 #ifdef DIAG
 /*printf("starting waddch \n");fflush(stdout);*/
 #endif
-	row = window->LY;
 	column = window->LX;
 	if (c == '\t')
 	{
@@ -2401,27 +2437,25 @@
 			waddch(window, ' ');
 		}
 	}
-	else if ((column < window->Num_cols) && (row < window->Num_lines))
+	else if ((column < window->Num_cols) && (window->LY < window->Num_lines))
 	{
 		if ((c == '~') && (Booleans[hz__]))
 			c = '@';
 
 		if (( c != '\b') && (c != '\n') && (c != '\r'))
 		{
-			row = 0;
-			tmpline = window->first_line; 
-			while (row < window->LY)
-			{
-				row++;
-				tmpline = tmpline->next_screen;
-			}
+			tmpline = window->line_array[window->LY];
 			tmpline->row[column] = c;
 			tmpline->attributes[column] = window->Attrib;
 			tmpline->changed = TRUE;
 			if (column >= tmpline->last_char)
 			{
 				if (column > tmpline->last_char)
-					tmpline->row[tmpline->last_char] = ' ';
+					for (j = tmpline->last_char; j < column; j++)
+					{
+						tmpline->row[j] = ' ';
+						tmpline->attributes[j] = (char) NULL;
+					}
 				tmpline->row[column + 1] = (char) NULL;
 				tmpline->attributes[column + 1] = (char) NULL;
 				tmpline->last_char = column + 1;
@@ -2495,6 +2529,13 @@
 	}
 	if (window->LY == 0)
 		window->first_line = tmp1;
+
+	for (row = 0, tmp1 = window->first_line; 
+		row < window->Num_lines; row++)
+	{
+		window->line_array[row] = tmp1;
+		tmp1 = tmp1->next_screen;
+	}
 }
 
 void 
@@ -2538,6 +2579,12 @@
 		else
 			tmp = tmpline;
 		tmp->next_screen = NULL;
+
+		for (row = 0, tmp = window->first_line; row < window->Num_lines; row++)
+		{
+			window->line_array[row] = tmp;
+			tmp = tmp->next_screen;
+		}
 	}
 	else
 	{
@@ -2648,7 +2695,7 @@
 	Terminal.c_lflag &= ~IEXTEN;
 #endif
 	Terminal.c_cc[VMIN] = 1;		/* minimum of one character */
-	Terminal.c_cc[VTIME] = 255;		/* timeout value	*/
+	Terminal.c_cc[VTIME] = 0;		/* timeout value	*/
 	Terminal.c_cc[VINTR] = 0;		/* eliminate interrupt	*/
 	value = ioctl(0, TCSETA, &Terminal);	/* set characteristics	*/
 #else
@@ -2805,15 +2852,33 @@
 	}
 }
 
+#ifndef __STDC__
+void 
+wprintw(va_alist)
+va_dcl
+#else /* __STDC__ */
 void 
 wprintw(WINDOW *window, const char *format, ...)
+#endif /* __STDC__ */
 {
+#ifndef __STDC__
+	WINDOW *window;
+	char *format;
+	va_list ap;
+#else
 	va_list ap;
+#endif
 	int value;
 	char *fpoint;
 	char *wtemp;
 
+#ifndef __STDC__
+	va_start(ap);
+	window = va_arg(ap, WINDOW *);
+	format = va_arg(ap, char *);
+#else /* __STDC__ */
 	va_start(ap, format);
+#endif /* __STDC__ */
 
 	fpoint = (char *) format;
 	while (*fpoint != (char) NULL)
@@ -2858,7 +2923,9 @@
 		else
 			waddch(window, *fpoint++);
 	}
+#ifdef __STDC__
 	va_end(ap);
+#endif /* __STDC__ */
 }
 
 void 
@@ -2878,35 +2945,28 @@
 struct _line *line1;
 struct _line *line2;
 {
-	int count1, count2;
+	int count1;
 	int i;
 	char *att1, *att2;
 	char *c1, *c2;
 
+	if (line1->last_char != line2->last_char)
+		return(2);
+
 	c1 = line1->row;
 	c2 = line2->row;
 	att1 = line1->attributes;
 	att2 = line2->attributes;
-	count2 = strlen(c1) + 1;
-	count1 = strlen(c2) + 1;
-	if (count1 > count2)
-	{
-		i = count2;
-		count2 = count1;
-		count1 = i;
-	}
-	if (count2 > (count1 + count1))
-		return(2);
 	i = 0;
 	while ((c1[i] != (char) NULL) && (c2[i] != (char) NULL) && (c1[i] == c2[i]) && (att1[i] == att2[i]))
 		i++;
 	count1 = i + 1;
-	if ((count1 == 1) && (count2 == 1))
+	if ((count1 == 1) && (c1[i] == (char) NULL) && (c2[i] == (char) NULL))
 		count1 = 0;			/* both lines blank	*/
-	else if (count2 == count1)
+	else if ((c1[i] == (char) NULL) && (c2[i] == (char) NULL))
 		count1 = -1;			/* equal		*/
 	else
-		count1 = count2 / count1;	/* lines unequal	*/
+		count1 = 1;			/* lines unequal	*/
 	return(count1);
 }
 
@@ -3212,6 +3272,7 @@
 	int first_same;
 	int last_same;
 	int list[10];
+	int bottom;
 
 	struct _line *curr;
 	struct _line *virt;
@@ -3219,6 +3280,8 @@
 
 	struct _line *new;
 
+	struct _line *old1, *new1;
+
 	char *cur_lin;
 	char *vrt_lin;
 	char *cur_att;
@@ -3302,7 +3365,6 @@
 		    (first_same > from_top) && (virtual_lines[first_same - 1]);
 		     first_same--)
 			;
-		count1 = first_same - 1;
 		for (last_same = 0;
 		    (last_same < window->Num_lines) && (virtual_lines[last_same]== FALSE);
 		     last_same++)
@@ -3311,7 +3373,6 @@
 					/* check entire lines for diffs	*/
 		{
 
-
 			if (from_top >= last_same)
 			{
 				for (last_same = from_top; 
@@ -3334,39 +3395,55 @@
 				{
 					if ((Comp_line(old, virt) == -1) && (!virtual_lines[from_top]))
 					{
-						if (String_table[cs__]) /* scrolling region */
+						/*
+						 |	Find the bottom of the 
+						 |	area that should be 
+						 |	scrolled.
+						 */
+						for (bottom = tmp_ft, old1 = old, 
+						     new1 = virt, count1 = 0;
+							(bottom < window->Num_lines) && 
+								(Comp_line(old1, new1) <= 0);
+								bottom++, old1 = old1->next_screen, 
+								new1 = new1->next_screen, 
+								count1++)
+							;
+						if (count1 > 3)
 						{
-							list[1] = from_top;
-							list[0] = min((last_same - 1), (window->Num_lines - 1));
-							String_Out(String_table[cs__], list, 2);
-							Curr_y = Curr_x = -1;
-						}
+							if (String_table[cs__]) /* scrolling region */
+							{
+								list[1] = from_top;
+								list[0] = min((bottom - 1), (window->Num_lines - 1));
+								String_Out(String_table[cs__], list, 2);
+								Curr_y = Curr_x = -1;
+							}
 
-						for (offset = (tmp_ft - from_top); (offset > 0); offset--)
-						{
-							old = Delete_line(from_top, min((last_same - 1), (window->Num_lines - 1)), window);
-							diff = FALSE;
-						}
+							for (offset = (tmp_ft - from_top); (offset > 0); offset--)
+							{
+								old = Delete_line(from_top, min((bottom - 1), (window->Num_lines - 1)), window);
+								diff = FALSE;
+							}
 
-						if (String_table[cs__]) /* scrolling region */
-						{
-							list[1] = 0;
-							list[0] = LINES - 1;
-							String_Out(String_table[cs__], list, 2);
-							Curr_y = Curr_x = -1;
+							if (String_table[cs__]) /* scrolling region */
+							{
+								list[1] = 0;
+								list[0] = LINES - 1;
+								String_Out(String_table[cs__], list, 2);
+								Curr_y = Curr_x = -1;
 							}
 
-						top_of_win = curscr->first_line;
-						curr = top_of_win;
-						for (offset = 0; offset < from_top; offset++)
-							curr = curr->next_screen;
-						for (offset = from_top, old=curr, new=virt; 
-						   offset < window->Num_lines; 
-						   old=old->next_screen, new=new->next_screen,
-						   offset++)
-						{
-							similar = Comp_line(old, new);
-							virtual_lines[offset] = (similar > 0 ? FALSE : TRUE);
+							top_of_win = curscr->first_line;
+							curr = top_of_win;
+							for (offset = 0; offset < from_top; offset++)
+								curr = curr->next_screen;
+							for (offset = from_top, old=curr, new=virt; 
+							   offset < window->Num_lines; 
+							   old=old->next_screen, new=new->next_screen,
+							   offset++)
+							{
+								similar = Comp_line(old, new);
+								virtual_lines[offset] = (similar > 0 ? FALSE : TRUE);
+							}
 						}
 					}
 					else
@@ -3383,39 +3460,55 @@
 				{
 					if (Comp_line(old, virt) == -1)
 					{
-						if (String_table[cs__]) /* scrolling region */
+						/*
+						 |	Find the bottom of the 
+						 |	area that should be 
+						 |	scrolled.
+						 */
+						for (bottom = from_top, old1 = old, 
+						     new1 = virt, count1 = 0;
+							(bottom < window->Num_lines) && 
+								(Comp_line(old1, new1) <= 0);
+								bottom++, old1 = old1->next_screen, 
+								new1 = new1->next_screen, 
+								count1++)
+							;
+						if (count1 > 3)
 						{
-							list[1] = tmp_ft;
-							list[0] = min((last_same - 1), (window->Num_lines - 1));
-							String_Out(String_table[cs__], list, 2);
-							Curr_y = Curr_x = -1;
-						}
+							if (String_table[cs__]) /* scrolling region */
+							{
+								list[1] = tmp_ft;
+								list[0] = min((bottom - 1), (window->Num_lines - 1));
+								String_Out(String_table[cs__], list, 2);
+								Curr_y = Curr_x = -1;
+							}
 
-						for (offset = (from_top - tmp_ft); (offset > 0); offset--)
-						{
-							old = Insert_line(tmp_ft, min((last_same - 1), (window->Num_lines -1)), window);
-							diff = FALSE;
-						}
+							for (offset = (from_top - tmp_ft); (offset > 0); offset--)
+							{
+								old = Insert_line(tmp_ft, min((bottom - 1), (window->Num_lines -1)), window);
+								diff = FALSE;
+							}
 
-						if (String_table[cs__]) /* scrolling region */
-						{
-							list[1] = 0;
-							list[0] = LINES - 1;
-							String_Out(String_table[cs__], list, 2);
-							Curr_y = Curr_x = -1;
-						}
+							if (String_table[cs__]) /* scrolling region */
+							{
+								list[1] = 0;
+								list[0] = LINES - 1;
+								String_Out(String_table[cs__], list, 2);
+								Curr_y = Curr_x = -1;
+							}
 
-						top_of_win = curscr->first_line;
-						curr = top_of_win;
-						for (offset = 0; offset < from_top; offset++)
-							curr = curr->next_screen;
-						for (offset = from_top, old=curr, new=virt; 
-						   offset < window->Num_lines; 
-						   old=old->next_screen, new=new->next_screen,
-						   offset++)
-						{
-							similar = Comp_line(old, new);
-							virtual_lines[offset] = (similar > 0 ? FALSE : TRUE);
+							top_of_win = curscr->first_line;
+							curr = top_of_win;
+							for (offset = 0; offset < from_top; offset++)
+								curr = curr->next_screen;
+							for (offset = from_top, old=curr, new=virt; 
+							   offset < window->Num_lines; 
+							   old=old->next_screen, new=new->next_screen,
+							   offset++)
+							{
+								similar = Comp_line(old, new);
+								virtual_lines[offset] = (similar > 0 ? FALSE : TRUE);
+							}
 						}
 					}
 					else
diff -u ee/new_curse.h easyedit/new_curse.h
--- ee/new_curse.h	2009-01-09 15:52:22.000000000 -0500
+++ easyedit/new_curse.h	1997-05-02 23:57:42.000000000 -0400
@@ -37,8 +37,6 @@
  |	Copyright (c) 1986, 1987, 1988, 1991, 1995 Hugh Mahon
  |	All are rights reserved.
  |
- | $FreeBSD$
- |
  */
 
 #include <stdio.h>
@@ -178,6 +176,7 @@
 	int scroll_down;
 	int SCROLL_CLEAR;	/* indicates that window has been scrolled or cleared	*/
 	struct _line *first_line;
+	struct _line **line_array;
 	} WINDOW;
 
 extern WINDOW *curscr;
@@ -185,7 +184,7 @@
 
 extern int LINES, COLS;
 
-#if __STDC__ || defined(__cplusplus)
+#if defined(__STDC__) || defined(__cplusplus)
 #define P_(s) s
 #else
 #define P_(s) ()
Common subdirectories: ee/nls and easyedit/nls
-------------- next part --------------
/*
 |	provide a version number for ee
 */

#define EE_VERSION "1.4.6"
#define DATE_STRING "$Date: 2002/09/21 00:50:54 $"


More information about the freebsd-hackers mailing list