Date: Fri, 09 Jan 2009 16:03:49 -0500 From: Eitan Adler <eitanadlerlist@gmail.com> To: freebsd-hackers@freebsd.org Subject: bringing ee up to date Message-ID: <4967BBB5.3030703@gmail.com>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------050806020601080608000204 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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 --------------050806020601080608000204 Content-Type: text/plain; name="ee.msg.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ee.msg.patch" --- 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" --------------050806020601080608000204 Content-Type: text/plain; name="ee.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ee.patch" 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 --------------050806020601080608000204 Content-Type: text/plain; name="ee_version.h" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="ee_version.h" /* | provide a version number for ee */ #define EE_VERSION "1.4.6" #define DATE_STRING "$Date: 2002/09/21 00:50:54 $" --------------050806020601080608000204--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4967BBB5.3030703>