summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorJeongho Hwang <jbera.hwang@samsung.com>2012-09-19 14:52:42 +0900
committerJeongho Hwang <jbera.hwang@samsung.com>2012-09-19 14:52:42 +0900
commit6946646754d606c72ece70c585e52b7b13495994 (patch)
tree8709ad87750384e4d727d2ef9c6783ec32ade7b5 /doc
parent3366690e172a06e0b95718b8a5436004ce6116f8 (diff)
downloaded-tizen_2.4.tar.gz
ed-tizen_2.4.tar.bz2
ed-tizen_2.4.zip
Signed-off-by: Jeongho Hwang <jbera.hwang@samsung.com>
Diffstat (limited to 'doc')
-rw-r--r--doc/ed.11045
-rw-r--r--doc/ed.info1417
-rw-r--r--doc/ed.texinfo982
-rw-r--r--doc/fdl.texinfo506
4 files changed, 3950 insertions, 0 deletions
diff --git a/doc/ed.1 b/doc/ed.1
new file mode 100644
index 0000000..4a3e81e
--- /dev/null
+++ b/doc/ed.1
@@ -0,0 +1,1045 @@
+.TH ED 1 "13 June 2009"
+.SH NAME
+ed, red \- text editor
+.SH SYNOPSIS
+ed [-GVhs] [-p \fIstring\fR] [\fIfile\fR]
+.LP
+red [-GVhs] [-p \fIstring\fR] [\fIfile\fR]
+.SH DESCRIPTION
+.B ed
+is a line-oriented text editor.
+It is used to create, display, modify and otherwise manipulate text
+files.
+.B red
+is a restricted
+.BR ed :
+it can only edit files in the current
+directory and cannot execute shell commands.
+
+If invoked with a
+.I file
+argument, then a copy of
+.I file
+is read into the editor's buffer.
+Changes are made to this copy and not directly to
+.I file
+itself.
+Upon quitting
+.BR ed ,
+any changes not explicitly saved with a
+.I `w'
+command are lost.
+
+Editing is done in two distinct modes:
+.I command
+and
+.IR input .
+When first invoked,
+.B ed
+is in command mode.
+In this mode commands are read from the standard input and
+executed to manipulate the contents of the editor buffer.
+A typical command might look like:
+.sp
+.RS
+,s/\fIold\fR/\fInew\fR/g
+.RE
+.sp
+which replaces all occurrences of the string
+.I old
+with
+.IR new .
+
+When an input command, such as
+.I `a'
+(append),
+.I `i'
+(insert) or
+.I `c'
+(change), is given,
+.B ed
+enters input mode. This is the primary means
+of adding text to a file.
+In this mode, no commands are available;
+instead, the standard input is written
+directly to the editor buffer. Lines consist of text up to and
+including a
+.IR newline
+character.
+Input mode is terminated by
+entering a single period (\fI.\fR) on a line.
+
+All
+.B ed
+commands operate on whole lines or ranges of lines; e.g.,
+the
+.I `d'
+command deletes lines; the
+.I `m'
+command moves lines, and so on.
+It is possible to modify only a portion of a line by means of replacement,
+as in the example above. However even here, the
+.I `s'
+command is applied to whole lines at a time.
+
+In general,
+.B ed
+commands consist of zero or more line addresses, followed by a single
+character command and possibly additional parameters; i.e.,
+commands have the structure:
+.sp
+.RS
+.I [address [,address]]command[parameters]
+.RE
+.sp
+The address(es) indicate the line or range of lines to be affected by the
+command. If fewer addresses are given than the command accepts, then
+default addresses are supplied.
+
+.SS OPTIONS
+.TP 8
+-G
+Forces backwards compatibility. Affects the commands
+.IR `G' ,
+.IR `V' ,
+.IR `f' ,
+.IR `l' ,
+.IR `m' ,
+.IR `t' ,
+and
+.IR `!!' .
+.TP 8
+-s
+Suppresses diagnostics. This should be used if
+.BR ed 's
+standard input is from a script.
+
+.TP 8
+.RI \-p \ string
+Specifies a command prompt. This may be toggled on and off with the
+.I `P'
+command.
+
+.TP 8
+.I file
+Specifies the name of a file to read. If
+.I file
+is prefixed with a
+bang (!), then it is interpreted as a shell command. In this case,
+what is read is
+the standard output of
+.I file
+executed via
+.IR sh (1).
+To read a file whose name begins with a bang, prefix the
+name with a backslash (\e).
+The default filename is set to
+.I file
+only if it is not prefixed with a bang.
+
+.SS LINE ADDRESSING
+An address represents the number of a line in the buffer.
+.B ed
+maintains a
+.I current address
+which is
+typically supplied to commands as the default address when none is specified.
+When a file is first read, the current address is set to the last line
+of the file. In general, the current address is set to the last line
+affected by a command.
+
+A line address is
+constructed from one of the bases in the list below, optionally followed
+by a numeric offset. The offset may include any combination
+of digits, operators (i.e.
+.IR +
+and
+.IR - )
+and whitespace.
+Addresses are read from left to right, and their values are computed
+relative to the current address.
+
+One exception to the rule that addresses represent line numbers is the
+address
+.I 0
+(zero).
+This means "before the first line,"
+and is legal wherever it makes sense.
+
+An address range is two addresses separated either by a comma or
+semicolon. The value of the first address in a range cannot exceed the
+value of the second. If only one address is given in a range, then
+the second address is set to the given address. If an
+.IR n- tuple
+of addresses is given where
+.I n > 2,
+then the corresponding range is determined by the last two addresses in
+the
+.IR n- tuple.
+If only one address is expected, then the last address is used.
+
+Each address in a comma-delimited range is interpreted relative to the
+current address. In a semicolon-delimited range, the first address is
+used to set the current address, and the second address is interpreted
+relative to the first.
+
+
+The following address symbols are recognized.
+
+.TP 8
+\&.
+The current line (address) in the buffer.
+
+.TP 8
+$
+The last line in the buffer.
+
+.TP 8
+.I n
+The
+.IR n th,
+line in the buffer
+where
+.I n
+is a number in the range
+.IR [0,$] .
+
+.TP 8
+-
+The previous line.
+This is equivalent to
+.I -1
+and may be repeated with cumulative effect.
+
+.TP 8
+^\fIn\fR
+The
+.IR n th
+previous line, where
+.I n
+is a non-negative number.
+
+.TP 8
++
+The
+next line.
+This is equivalent to
+.I +1
+and may be repeated with cumulative effect.
+
+.HP
+.I whitespace n
+.TP 8
++\fIn\fR
+The
+.IR n th
+next line, where
+.I n
+is a non-negative number.
+.I Whitespace
+followed by a number
+.I n
+is interpreted as
+.IR +n .
+
+.TP 8
+,
+The first through last lines in the buffer. This is equivalent to
+the address range
+.IR 1,$ .
+
+.TP 8
+;
+The current through last lines in the buffer. This is equivalent to
+the address range
+.IR .,$ .
+
+.TP 8
+.RI / re /
+The
+next line containing the regular expression
+.IR re .
+The search wraps to the beginning of the buffer and continues down to the
+current line, if necessary.
+// repeats the last search.
+
+.TP 8
+.RI ? re ?
+The
+previous line containing the regular expression
+.IR re .
+The search wraps to the end of the buffer and continues up to the
+current line, if necessary.
+?? repeats the last search.
+
+.TP 8
+.RI ' lc
+The
+line previously marked by a
+.I `k'
+(mark) command, where
+.I lc
+is a lower case letter.
+
+.SS REGULAR EXPRESSIONS
+Regular expressions are patterns used in selecting text.
+For example, the
+.B ed
+command
+.sp
+.RS
+g/\fIstring\fR/
+.RE
+.sp
+prints all lines containing
+.IR string .
+Regular expressions are also
+used by the
+.I `s'
+command for selecting old text to be replaced with new.
+
+In addition to a specifying string literals, regular expressions can
+represent
+classes of strings. Strings thus represented are said to be matched
+by the corresponding regular expression.
+If it is possible for a regular expression
+to match several strings in a line, then the left-most longest match is
+the one selected.
+
+The following symbols are used in constructing regular expressions:
+
+.TP 8
+c
+Any character
+.I c
+not listed below, including `{', '}', `(', `)', `<' and `>',
+matches itself.
+
+.TP 8
+\e\fIc\fR
+A backslash-escaped character
+.IR c
+other than `{', '}', `(', `)', `<', `>',
+`b', 'B', `w', `W', `+', and `?'
+matches itself.
+
+.TP 8
+\&.
+Matches any single character.
+
+.TP 8
+.I [char-class]
+Matches any single character in
+.IR char-class .
+To include a `]'
+in
+.IR char-class ,
+it must be the first character.
+A range of characters may be specified by separating the end characters
+of the range with a `-', e.g., `a-z' specifies the lower case characters.
+The following literal expressions can also be used in
+.I char-class
+to specify sets of characters:
+.sp
+.nf
+\ \ [:alnum:]\ \ [:cntrl:]\ \ [:lower:]\ \ [:space:]
+.PD 0
+\ \ [:alpha:]\ \ [:digit:]\ \ [:print:]\ \ [:upper:]
+.PD 0
+\ \ [:blank:]\ \ [:graph:]\ \ [:punct:]\ \ [:xdigit:]
+.fi
+.sp
+If `-' appears as the first or last
+character of
+.IR char-class ,
+then it matches itself.
+All other characters in
+.I char-class
+match themselves.
+.sp
+Patterns in
+.I char-class
+of the form:
+.sp
+\ \ [.\fIcol-elm\fR.] or,
+.PD 0
+\ \ [=\fIcol-elm\fR=]
+.sp
+where
+.I col-elm
+is a
+.I collating element
+are interpreted according to
+.IR locale (5)
+(not currently supported).
+See
+.IR regex (3)
+for an explanation of these constructs.
+
+.TP 8
+[^\fIchar-class\fR]
+Matches any single character, other than newline, not in
+.IR char-class .
+.IR char-class
+is defined
+as above.
+
+.TP 8
+^
+If `^' is the first character of a regular expression, then it
+anchors the regular expression to the beginning of a line.
+Otherwise, it matches itself.
+
+.TP 8
+$
+If `$' is the last character of a regular expression, it
+anchors the regular expression to the end of a line.
+Otherwise, it matches itself.
+
+.TP 8
+\e(\fIre\fR\e)
+Defines a (possibly null) subexpression
+.IR re .
+Subexpressions may be nested.
+A subsequent backreference of the form `\e\fIn\fR', where
+.I n
+is a number in the range [1,9], expands to the text matched by the
+.IR n th
+subexpression.
+For example, the regular expression `\e(a.c\e)\e1' matches the
+string `abcabc', but not `abcadc'.
+Subexpressions are ordered relative to
+their left delimiter.
+
+.TP 8
+*
+Matches the single character regular expression or subexpression
+immediately preceding it zero or more times. If '*' is the first
+character of a regular expression or subexpression, then it matches
+itself. The `*' operator sometimes yields unexpected results.
+For example, the regular expression `b*' matches the beginning of
+the string `abbb', as opposed to the substring `bbb', since a null match
+is the only left-most match.
+
+.HP
+\fR\e{\fIn,m\fR\e}\fR
+.HP
+\fR\e{\fIn,\fR\e}\fR
+.TP 8
+\fR\e{\fIn\fR\e}\fR
+Matches the single character regular expression or subexpression
+immediately preceding it at least
+.I n
+and at most
+.I m
+times.
+If
+.I m
+is omitted, then it matches at least
+.I n
+times.
+If the comma is also omitted, then it matches exactly
+.I n
+times. If any of these forms occurs first in a regular expression or
+subexpression, then it is interpreted literally (i.e., the regular
+expression `\e{2\e}' matches the string `{2}', and so on).
+
+.HP
+\e<
+.TP 8
+\fR\e>\fR
+Anchors the single character regular expression or subexpression
+immediately following it to the beginning (\e<) or ending
+(\e>) of a \fIword\fR, i.e., in ASCII, a maximal string of alphanumeric
+characters, including the underscore (_).
+
+
+.LP
+The following extended operators are preceded by a backslash (\e) to
+distinguish them from traditional
+.B ed
+syntax.
+
+.HP
+\fR\e\`\fR
+.TP 8
+\fR\e\'\fR
+Unconditionally matches the beginning (\e\`) or ending (\e\') of a line.
+
+.TP 8
+\fR\e?\fR
+Optionally matches the single character regular expression or subexpression
+immediately preceding it. For example, the regular expression `a[bd]\e?c'
+matches the strings `abc', `adc' and `ac'. If \e? occurs at the beginning
+of a regular expressions or subexpression, then it matches a literal `?'.
+
+.TP 8
+\fR\e+\fR
+Matches the single character regular expression or subexpression
+immediately preceding it one or more times. So the regular expression
+`a\e+' is shorthand for `aa*'. If \e+ occurs at the beginning of a
+regular expression or subexpression, then it matches a literal `+'.
+
+
+.TP 8
+\fR\eb\fR
+Matches the beginning or ending (null string) of a word. Thus the regular
+expression `\ebhello\eb' is equivalent to `\e<hello\e>'. However, `\eb\eb'
+is a valid regular expression whereas `\e<\e>' is not.
+
+.TP 8
+\fR\eB\fR
+Matches (a null string) inside a word.
+
+.TP 8
+\fR\ew\fR
+Matches any character in a word.
+
+.TP 8
+\fR\eW\fR
+Matches any character not in a word.
+
+.SS COMMANDS
+All
+.B ed
+commands are single characters, though some require additional parameters.
+If a command's parameters extend over several lines, then
+each line except for the last
+must be terminated with a backslash (\e).
+
+In general, at most one command is allowed per line.
+However, most commands accept a print suffix, which is any of
+.I `p'
+(print),
+.I `l'
+(list) ,
+or
+.I `n'
+(enumerate),
+to print the last line affected by the command.
+
+An interrupt (typically ^C) has the effect of aborting the current command
+and returning the editor to command mode.
+
+.B ed
+recognizes the following commands. The commands are shown together with
+the default address or address range supplied if none is
+specified (in parenthesis).
+
+.TP 8
+(.)a
+Appends text to the buffer after the addressed line, which may be the
+address 0 (zero). Text is entered in input mode. The current address is
+set to last line entered.
+
+.TP 8
+(.,.)c
+Changes lines in the buffer. The addressed lines are deleted
+from the buffer, and text is appended in their place.
+Text is entered in input mode.
+The current address is set to last line entered.
+
+.TP 8
+(.,.)d
+Deletes the addressed lines from the buffer.
+If there is a line after the deleted range, then the current address is set
+to this line. Otherwise the current address is set to the line
+before the deleted range.
+
+.TP 8
+.RI e \ file
+Edits
+.IR file ,
+and sets the default filename.
+If
+.I file
+is not specified, then the default filename is used.
+Any lines in the buffer are deleted before
+the new file is read.
+The current address is set to the last line read.
+
+.TP 8
+e !\fIcommand\fR
+Edits the standard output of
+.IR `!command' ,
+(see
+.RI ! command
+below).
+The default filename is unchanged.
+Any lines in the buffer are deleted before the output of
+.I command
+is read.
+The current address is set to the last line read.
+
+.TP 8
+.RI E \ file
+Edits
+.I file
+unconditionally.
+This is similar to the
+.I e
+command,
+except that unwritten changes are discarded without warning.
+The current address is set to the last line read.
+
+.TP 8
+.RI f \ file
+Sets the default filename to
+.IR file .
+If
+.I file
+is not specified, then the default unescaped filename is printed.
+
+.TP 8
+.RI (1,$)g /re/command-list
+Applies
+.I command-list
+to each of the addressed lines matching a regular expression
+.IR re .
+The current address is set to the
+line currently matched before
+.I command-list
+is executed.
+At the end of the
+.I `g'
+command, the current address is set to the last line affected by
+.IR command-list .
+
+Each command in
+.I command-list
+must be on a separate line,
+and every line except for the last must be terminated by a backslash
+(\e).
+Any commands are allowed, except for
+.IR `g' ,
+.IR `G' ,
+.IR `v' ,
+and
+.IR `V' .
+A newline alone in
+.I command-list
+is equivalent to a
+.I `p'
+command.
+
+.TP 8
+.RI (1,$)G /re/
+Interactively edits the addressed lines matching a regular expression
+.IR re.
+For each matching line,
+the line is printed,
+the current address is set,
+and the user is prompted to enter a
+.IR command-list .
+At the end of the
+.I `G'
+command, the current address
+is set to the last line affected by (the last)
+.IR command-list .
+
+The format of
+.I command-list
+is the same as that of the
+.I `g'
+command. A newline alone acts as a null command list.
+A single `&' repeats the last non-null command list.
+
+.TP 8
+H
+Toggles the printing of error explanations.
+By default, explanations are not printed.
+It is recommended that ed scripts begin with this command to
+aid in debugging.
+
+.TP 8
+h
+Prints an explanation of the last error.
+
+.TP 8
+(.)i
+Inserts text in the buffer before the current line.
+Text is entered in input mode.
+The current address is set to the last line entered.
+
+.TP 8
+(.,.+1)j
+Joins the addressed lines. The addressed lines are
+deleted from the buffer and replaced by a single
+line containing their joined text.
+The current address is set to the resultant line.
+
+.TP 8
+.RI (.)k lc
+Marks a line with a lower case letter
+.IR lc .
+The line can then be addressed as
+.I 'lc
+(i.e., a single quote followed by
+.I lc
+) in subsequent commands. The mark is not cleared until the line is
+deleted or otherwise modified.
+
+.TP 8
+(.,.)l
+Prints the addressed lines unambiguously. If invoked from a terminal,
+.B ed
+pauses at the end of each page until a newline is entered.
+The current address is set to the last line printed.
+
+.TP 8
+(.,.)m(.)
+Moves lines in the buffer. The addressed lines are moved to after the
+right-hand destination address, which may be the address
+.IR 0
+(zero).
+The current address is set to the new address of the last line moved.
+
+.TP 8
+(.,.)n
+Prints the addressed lines along with
+their line numbers. The current address is set to the last line
+printed.
+
+.TP 8
+(.,.)p
+Prints the addressed lines. If invoked from a terminal,
+.B ed
+pauses at the end of each page until a newline is entered.
+The current address is set to the last line
+printed.
+
+.TP 8
+P
+Toggles the command prompt on and off.
+Unless a prompt was specified by with command-line option
+\fI-p string\fR, the command prompt is by default turned off.
+
+.TP 8
+q
+Quits ed.
+
+.TP 8
+Q
+Quits ed unconditionally.
+This is similar to the
+.I q
+command,
+except that unwritten changes are discarded without warning.
+
+.TP 8
+.RI ($)r \ file
+Reads
+.I file
+to after the addressed line. If
+.I file
+is not specified, then the default
+filename is used. If there was no default filename prior to the command,
+then the default filename is set to
+.IR file .
+Otherwise, the default filename is unchanged.
+The current address is set to the last line read.
+
+.TP 8
+($)r !\fIcommand\fR
+Reads
+to after the addressed line
+the standard output of
+.IR `!command' ,
+(see the
+.RI ! command
+below).
+The default filename is unchanged.
+The current address is set to the last line read.
+
+.HP
+.RI (.,.)s /re/replacement/
+.HP
+.RI (.,.)s /re/replacement/\fRg\fR
+.HP
+.RI (.,.)s /re/replacement/n
+.br
+Replaces text in the addressed lines
+matching a regular expression
+.I re
+with
+.IR replacement .
+By default, only the first match in each line is replaced.
+If the
+.I `g'
+(global) suffix is given, then every match to be replaced.
+The
+.I `n'
+suffix, where
+.I n
+is a positive number, causes only the
+.IR n th
+match to be replaced.
+It is an error if no substitutions are performed on any of the addressed
+lines.
+The current address is set to the last line affected.
+
+.I re
+and
+.I replacement
+may be delimited by any character other than space, newline and the
+characters used by the form of the
+.I `s'
+command shown below.
+If one or two of the last delimiters is omitted, then the last line
+affected is printed as though the print suffix
+.I `p'
+were specified.
+
+
+An unescaped `&' in
+.I replacement
+is replaced by the currently matched text.
+The character sequence
+\fI`\em'\fR,
+where
+.I m
+is a number in the range [1,9], is replaced by the
+.IR m th
+backreference expression of the matched text.
+If
+.I replacement
+consists of a single `%', then
+.I replacement
+from the last substitution is used.
+Newlines may be embedded in
+.I replacement
+if they are escaped with a backslash (\e).
+
+.TP 8
+(.,.)s
+Repeats the last substitution.
+This form of the
+.I `s'
+command accepts a count suffix
+.IR `n' ,
+and any combination of the characters
+.IR `r' ,
+.IR `g' ,
+and
+.IR `p' .
+If a count suffix
+.I `n'
+is given, then only the
+.IR n th
+match is replaced.
+The
+.I `r'
+suffix causes
+the regular expression of the last search to be used instead of the
+that of the last substitution.
+The
+.I `g'
+suffix toggles the global suffix of the last substitution.
+The
+.I `p'
+suffix toggles the print suffix of the last substitution.
+The current address is set to the last line affected.
+
+.TP 8
+(.,.)t(.)
+Copies (i.e., transfers) the addressed lines to after the right-hand
+destination address, which may be the address
+.IR 0
+(zero).
+The current address is set to the last line
+copied.
+
+.TP 8
+u
+Undoes the last command and restores the current address
+to what it was before the command.
+The global commands
+.IR `g' ,
+.IR `G' ,
+.IR `v' ,
+and
+.IR `V' .
+are treated as a single command by undo.
+.I `u'
+is its own inverse.
+
+.TP 8
+.RI (1,$)v /re/command-list
+Applies
+.I command-list
+to each of the addressed lines not matching a regular expression
+.IR re .
+This is similar to the
+.I `g'
+command.
+
+.TP 8
+.RI (1,$)V /re/
+Interactively edits the addressed lines not matching a regular expression
+.IR re.
+This is similar to the
+.I `G'
+command.
+
+.TP 8
+.RI (1,$)w \ file
+Writes the addressed lines to
+.IR file .
+Any previous contents of
+.I file
+is lost without warning.
+If there is no default filename, then the default filename is set to
+.IR file,
+otherwise it is unchanged. If no filename is specified, then the default
+filename is used.
+The current address is unchanged.
+
+.TP 8
+.RI (1,$)wq \ file
+Writes the addressed lines to
+.IR file ,
+and then executes a
+.I `q'
+command.
+
+.TP 8
+(1,$)w !\fIcommand\fR
+Writes the addressed lines to the standard input of
+.IR `!command' ,
+(see the
+.RI ! command
+below).
+The default filename and current address are unchanged.
+
+.TP 8
+.RI (1,$)W \ file
+Appends the addressed lines to the end of
+.IR file .
+This is similar to the
+.I `w'
+command, expect that the previous contents of file is not clobbered.
+The current address is unchanged.
+
+.TP 8
+(.)x
+Copies (puts) the contents of the cut buffer to after the addressed line.
+The current address is set to the last line copied.
+
+.TP 8
+(.,.)y
+Copies (yanks) the addressed lines to the cut buffer.
+The cut buffer is overwritten by subsequent
+.IR `y' ,
+.IR `s' ,
+.IR `j' ,
+.IR `d' ,
+or
+.I `c'
+commands.
+The current address is unchanged.
+
+.TP 8
+.RI (.+1)z n
+Scrolls
+.I n
+lines at a time starting at addressed line. If
+.I n
+is not specified, then the current window size is used.
+The current address is set to the last line printed.
+
+.TP 8
+.RI ! command
+Executes
+.I command
+via
+.IR sh (1).
+If the first character of
+.I command
+is `!', then it is replaced by text of the
+previous
+.IR `!command' .
+.B ed
+does not process
+.I command
+for backslash (\e) escapes.
+However, an unescaped
+.I `%'
+is replaced by the default filename.
+When the shell returns from execution, a `!'
+is printed to the standard output.
+The current line is unchanged.
+
+.TP 8
+(.,.)#
+Begins a comment; the rest of the line, up to a newline, is ignored.
+If a line address followed by a semicolon is given, then the
+current address is set to that address. Otherwise, the current address
+is unchanged.
+
+.TP 8
+($)=
+Prints the line number of the addressed line.
+
+.TP 8
+(.+1)newline
+Prints the addressed line, and sets the current address to
+that line.
+
+.SH FILES
+.TP 8
+ed.hup
+The file to which
+.B ed
+attempts to write the buffer if the terminal hangs up.
+
+.SH SEE ALSO
+
+.IR vi (1),
+.IR sed (1),
+.IR regex (3),
+.IR sh (1).
+
+USD:12-13
+
+B. W. Kernighan and P. J. Plauger,
+.I Software Tools in Pascal ,
+Addison-Wesley, 1981.
+
+.SH LIMITATIONS
+.B ed
+processes
+.I file
+arguments for backslash escapes, i.e., in a filename,
+any characters preceded by a backslash (\e) are
+interpreted literally.
+
+If a text (non-binary) file is not terminated by a newline character,
+then
+.B ed
+appends one on reading/writing it. In the case of a binary file,
+.B ed
+does not append a newline on reading/writing.
+
+per line overhead: 4 ints
+
+.SH DIAGNOSTICS
+When an error occurs,
+if
+.BR ed 's
+input is from a regular file or here document, then it
+exits, otherwise it
+prints a `?' and returns to command mode.
+An explanation of the last error can be
+printed with the
+.I `h'
+(help) command.
+
+Attempting to quit
+.B ed
+or edit another file before writing a modified buffer
+results in an error.
+If the command is entered a second time, it succeeds,
+but any changes to the buffer are lost.
+
+.B ed
+exits with 0 if no errors occurred; otherwise >0.
diff --git a/doc/ed.info b/doc/ed.info
new file mode 100644
index 0000000..de0f728
--- /dev/null
+++ b/doc/ed.info
@@ -0,0 +1,1417 @@
+This is ed.info, produced by makeinfo version 4.13 from ed.texinfo.
+
+INFO-DIR-SECTION Basics
+START-INFO-DIR-ENTRY
+* Ed: (ed). The GNU line editor
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 1993, 2006, 2007, 2008, 2009 Free Software Foundation,
+Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+
+
+File: ed.info, Node: Top, Next: Overview, Up: (dir)
+
+The GNU ed line editor
+**********************
+
+This manual is for GNU ed (version 1.4, 10 July 2009).
+
+
+ GNU ed is an 8-bit clean, more or less POSIX-compliant
+implementation of the standard Unix line editor. These days,
+full-screen editors have rendered `ed' mostly of historical interest.
+Nonetheless, it appeals to a handful of aging programmers who still
+believe that "Small is Beautiful".
+
+* Menu:
+
+* Overview:: Overview of the `ed' command
+* Introduction to Line Editing:: Getting started with GNU `ed'
+* Invoking Ed:: Command line interface
+* Line Addressing:: Specifying lines/ranges in the buffer
+* Regular Expressions:: Patterns for selecting text
+* Commands:: Commands recognized by GNU `ed'
+* Limitations:: Intrinsic limits of GNU `ed'
+* Diagnostics:: GNU `ed' error handling
+* Problems:: Reporting bugs
+* GNU Free Documentation License:: How you can copy and share this manual
+
+
+ Copyright (C) 1993, 2006, 2007, 2008, 2009 Free Software Foundation,
+Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+
+
+File: ed.info, Node: Overview, Next: Introduction to Line Editing, Prev: Top, Up: Top
+
+1 Overview
+**********
+
+`ed' is a line-oriented text editor. It is used to create, display,
+modify and otherwise manipulate text files. `red' is a restricted `ed':
+it can only edit files in the current directory and cannot execute
+shell commands.
+
+ If invoked with a FILE argument, then a copy of FILE is read into
+the editor's buffer. Changes are made to this copy and not directly to
+FILE itself. Upon quitting `ed', any changes not explicitly saved with
+a `w' command are lost.
+
+ Editing is done in two distinct modes: "command" and "input". When
+first invoked, `ed' is in command mode. In this mode commands are read
+from the standard input and executed to manipulate the contents of the
+editor buffer. A typical command might look like:
+
+ ,s/OLD/NEW/g
+
+ which replaces all occurences of the string OLD with NEW.
+
+ When an input command, such as `a' (append), `i' (insert) or `c'
+(change), is given, `ed' enters input mode. This is the primary means
+of adding text to a file. In this mode, no commands are available;
+instead, the standard input is written directly to the editor buffer. A
+"line" consists of the text up to and including a <newline> character.
+Input mode is terminated by entering a single period (`.') on a line.
+
+ All `ed' commands operate on whole lines or ranges of lines; e.g.,
+the `d' command deletes lines; the `m' command moves lines, and so on.
+It is possible to modify only a portion of a line by means of
+replacement, as in the example above. However even here, the `s'
+command is applied to whole lines at a time.
+
+ In general, `ed' commands consist of zero or more line addresses,
+followed by a single character command and possibly additional
+parameters; i.e., commands have the structure:
+
+ [ADDRESS [,ADDRESS]]COMMAND[PARAMETERS]
+
+ The ADDRESSes indicate the line or range of lines to be affected by
+the command. If fewer addresses are given than the command accepts,
+then default addresses are supplied.
+
+
+File: ed.info, Node: Introduction to Line Editing, Next: Invoking Ed, Prev: Overview, Up: Top
+
+2 Introduction to Line Editing
+******************************
+
+`ed' was created, along with the Unix operating system, by Ken Thompson
+and Dennis Ritchie. It is the refinement of its more complex,
+programmable predecessor, `QED', to which Thompson and Ritchie had
+already added pattern matching capabilities (*note Regular
+Expressions::).
+
+ For the purposes of this tutorial, a working knowledge of the Unix
+shell `sh' (*note Bash: (bash)Bash.) and the Unix file system is
+recommended, since `ed' is designed to interact closely with them.
+
+ The principal difference between line editors and display editors is
+that display editors provide instant feedback to user commands, whereas
+line editors require sometimes lengthy input before any effects are
+seen. The advantage of instant feedback, of course, is that if a mistake
+is made, it can be corrected immediately, before more damage is done.
+Editing in `ed' requires more strategy and forethought; but if you are
+up to the task, it can be quite efficient.
+
+ Much of the `ed' command syntax is shared with other Unix utilities.
+
+ As with the shell, <RETURN> (the carriage-return key) enters a line
+of input. So when we speak of "entering" a command or some text in
+`ed', <RETURN> is implied at the end of each line. Prior to typing
+<RETURN>, corrections to the line may be made by typing either
+<BACKSPACE> (sometimes labeled <DELETE> or <DEL>) to erase characters
+backwards, or <CONTROL>-u (i.e., hold the CONTROL key and type u) to
+erase the whole line.
+
+ When `ed' first opens, it expects to be told what to do but doesn't
+prompt us like the shell. So let's begin by telling `ed' to do so with
+the <P> ("prompt") command:
+
+ $ ed
+ P
+ *
+
+ By default, `ed' uses asterisk (`*') as command prompt to avoid
+confusion with the shell command prompt (`$').
+
+ We can run Unix shell (`sh') commands from inside `ed' by prefixing
+them with <!> (exclamation mark, aka "bang"). For example:
+
+ *!date
+ Mon Jun 26 10:08:41 PDT 2006
+ !
+ *!for s in hello world; do echo $s; done
+ hello
+ world
+ !
+ *
+
+ So far, this is no different from running commands in the Unix shell.
+But let's say we want to edit the output of a command, or save it to a
+file. First we must capture the command output to a temporary location
+called a "buffer" where `ed' can access it. This is done with `ed''s
+<r> command (mnemonic: "read"):
+
+ *r !cal
+ 143
+ *
+
+ Here `ed' is telling us that it has just read 143 characters into
+the editor buffer - i.e., the output of the `cal' command, which prints
+a simple ASCII calendar. To display the buffer contents we issue the
+<p> ("print") command (not to be confused with the prompt command,
+which is uppercase!). To indicate the range of lines in the buffer that
+should be printed, we prefix the command with <,> (comma) which is
+shorthand for "the whole buffer":
+
+ *,p
+ September 2006
+ Mo Tu We Th Fr Sa Su
+ 1 2 3
+ 4 5 6 7 8 9 10
+ 11 12 13 14 15 16 17
+ 18 19 20 21 22 23 24
+ 25 26 27 28 29 30
+
+ *
+
+ Now let's write the buffer contents to a file named `junk' with the
+<w> ("write") command. Again, we use the <,> prefix to indicate that
+it's the whole buffer we want:
+
+ *,w junk
+ 143
+ *
+
+ Need we say? It's good practice to frequently write the buffer
+contents, since unwritten changes to the buffer will be lost when we
+exit `ed'.
+
+ The sample sessions below illustrate some basic concepts of line
+editing with `ed'. We begin by creating a file, `sonnet', with some
+help from Shakespeare. As with the shell, all input to `ed' must be
+followed by a <newline> character. Comments begin with a `#'.
+
+ $ ed
+ # The `a' command is for appending text to the editor buffer.
+ a
+ No more be grieved at that which thou hast done.
+ Roses have thorns, and filvers foutians mud.
+ Clouds and eclipses stain both moon and sun,
+ And loathsome canker lives in sweetest bud.
+ .
+ # Entering a single period on a line returns `ed' to command mode.
+ # Now write the buffer to the file `sonnet' and quit:
+ w sonnet
+ 183
+ # `ed' reports the number of characters written.
+ q
+ $ ls -l
+ total 2
+ -rw-rw-r-- 1 alm 183 Nov 10 01:16 sonnet
+ $
+
+ In the next example, some typos are corrected in the file `sonnet'.
+
+ $ ed sonnet
+ 183
+ # Begin by printing the buffer to the terminal with the `p' command.
+ # The `,' means ``all lines.''
+ ,p
+ No more be grieved at that which thou hast done.
+ Roses have thorns, and filvers foutians mud.
+ Clouds and eclipses stain both moon and sun,
+ And loathsome canker lives in sweetest bud.
+ # Select line 2 for editing.
+ 2
+ Roses have thorns, and filvers foutians mud.
+ # Use the substitute command, `s', to replace `filvers' with `silver',
+ # and print the result.
+ s/filvers/silver/p
+ Roses have thorns, and silver foutians mud.
+ # And correct the spelling of `fountains'.
+ s/utia/untai/p
+ Roses have thorns, and silver fountains mud.
+ w sonnet
+ 183
+ q
+ $
+
+ Since `ed' is line-oriented, we have to tell it which line, or range
+of lines we want to edit. In the above example, we do this by
+specifying the line's number, or sequence in the buffer. Alternatively,
+we could have specified a unique string in the line, e.g., `/filvers/',
+where the `/'s delimit the string in question. Subsequent commands
+affect only the selected line, a.k.a. the "current" line. Portions of
+that line are then replaced with the substitute command, whose syntax
+is `s/OLD/NEW/'.
+
+ Although `ed' accepts only one command per line, the print command
+`p' is an exception, and may be appended to the end of most commands.
+
+ In the next example, a title is added to our sonnet.
+
+ $ ed sonnet
+ 183
+ a
+ Sonnet #50
+ .
+ ,p
+ No more be grieved at that which thou hast done.
+ Roses have thorns, and silver fountains mud.
+ Clouds and eclipses stain both moon and sun,
+ And loathsome canker lives in sweetest bud.
+ Sonnet #50
+ # The title got appended to the end; we should have used `0a'
+ # to append ``before the first line.''
+ # Move the title to its proper place.
+ 5m0p
+ Sonnet #50
+ # The title is now the first line, and the current line has been
+ # set to this line as well.
+ ,p
+ Sonnet #50
+ No more be grieved at that which thou hast done.
+ Roses have thorns, and silver fountains mud.
+ Clouds and eclipses stain both moon and sun,
+ And loathsome canker lives in sweetest bud.
+ wq sonnet
+ 195
+ $
+
+ When `ed' opens a file, the current line is initially set to the
+last line of that file. Similarly, the move command `m' sets the
+current line to the last line moved.
+
+ In summary:
+
+ Structurally, Related programs or routines are `vi (1)', `sed (1)',
+`regex (3)', `sh (1)'. Relevant documents are:
+
+ Unix User's Manual Supplementary Documents: 12 -- 13
+
+ B. W. Kernighan and P. J. Plauger: "Software Tools in Pascal",
+ Addison-Wesley, 1981.
+
+
+File: ed.info, Node: Invoking Ed, Next: Line Addressing, Prev: Introduction to Line Editing, Up: Top
+
+3 Invoking Ed
+*************
+
+The format for running `ed' is:
+
+ ed [OPTIONS] [FILE]
+ red [OPTIONS] [FILE]
+
+ FILE specifies the name of a file to read. If FILE is prefixed with
+a bang (!), then it is interpreted as a shell command. In this case,
+what is read is the standard output of FILE executed via `sh (1)'. To
+read a file whose name begins with a bang, prefix the name with a
+backslash (`\'). The default filename is set to FILE only if it is not
+prefixed with a bang.
+
+ `ed' supports the following options:
+
+`--help'
+`-h'
+ Print an informative help message describing the options and exit.
+
+`--version'
+`-V'
+ Print the version number of `ed' on the standard output and exit.
+
+`--loose-exit-status'
+`-l'
+ Do not exit with bad status if a command happens to "fail" (for
+ example if a substitution command finds nothing to replace). This
+ can be useful when `ed' is invoked as the editor for crontab.
+
+`--prompt=STRING'
+`-p STRING'
+ Specifies a command prompt. This may be toggled on and off with the
+ `P' command.
+
+`--quiet'
+`--silent'
+`-s'
+ Suppresses diagnostics. This should be used if `ed''s standard
+ input is from a script.
+
+`--traditional'
+`-G'
+ Forces backwards compatibility. This affects the behavior of the
+ `ed' commands `G', `V', `f', `l', `m', `t' and `!!'. If the
+ default behavior of these commands does not seem familiar, then
+ try invoking `ed' with this switch.
+
+`--verbose'
+`-v'
+ Verbose mode. This may be toggled on and off with the `H' command.
+
+
+
+File: ed.info, Node: Line Addressing, Next: Regular Expressions, Prev: Invoking Ed, Up: Top
+
+4 Line Addressing
+*****************
+
+An address represents the number of a line in the buffer. `ed'
+maintains a "current address" which is typically supplied to commands
+as the default address when none is specified. When a file is first
+read, the current address is set to the last line of the file. In
+general, the current address is set to the last line affected by a
+command.
+
+ A line address is constructed from one of the bases in the list
+below, optionally followed by a numeric offset. The offset may include
+any combination of digits, operators (i.e., `+' and `-') and
+whitespace. Addresses are read from left to right, and their values may
+be absolute or relative to the current address.
+
+ One exception to the rule that addresses represent line numbers is
+the address `0' (zero). This means "before the first line," and is
+valid wherever it makes sense.
+
+ An address range is two addresses separated either by a comma or
+semicolon. The value of the first address in a range cannot exceed the
+value of the second. If only one address is given in a range, then the
+second address is set to the given address. If an N-tuple of addresses
+is given where N > 2, then the corresponding range is determined by the
+last two addresses in the N-tuple. If only one address is expected,
+then the last address is used.
+
+ Each address in a comma-delimited range is interpreted relative to
+the current address. In a semicolon-delimited range, the first address
+is used to set the current address, and the second address is
+interpreted relative to the first.
+
+ The following address symbols are recognized.
+
+`.'
+ The current line (address) in the buffer.
+
+`$'
+ The last line in the buffer.
+
+`N'
+ The Nth, line in the buffer where N is a number in the range `0,$'.
+
+`+'
+ The next line. This is equivalent to `+1' and may be repeated with
+ cumulative effect.
+
+`-'
+ The previous line. This is equivalent to `-1' and may be repeated
+ with cumulative effect.
+
+`+N'
+`WHITESPACE N'
+ The Nth next line, where N is a non-negative number. Whitespace
+ followed by a number N is interpreted as `+N'.
+
+`-N'
+ The Nth previous line, where N is a non-negative number.
+
+`,'
+ The first through last lines in the buffer. This is equivalent to
+ the address range `1,$'.
+
+`;'
+ The current through last lines in the buffer. This is equivalent
+ to the address range `.,$'.
+
+`/RE/'
+ The next line containing the regular expression RE. The search
+ wraps to the beginning of the buffer and continues down to the
+ current line, if necessary. `//' repeats the last search.
+
+`?RE?'
+ The previous line containing the regular expression RE. The search
+ wraps to the end of the buffer and continues up to the current
+ line, if necessary. `??' repeats the last search.
+
+`'x'
+ The apostrophe-x character pair addresses the line previously
+ marked by a `k' (mark) command, where `x' is a lower case letter
+ from the portable character set.
+
+
+
+File: ed.info, Node: Regular Expressions, Next: Commands, Prev: Line Addressing, Up: Top
+
+5 Regular Expressions
+*********************
+
+Regular expressions are patterns used in selecting text. For example,
+the `ed' command
+
+ g/STRING/
+
+prints all lines containing STRING. Regular expressions are also used
+by the `s' command for selecting old text to be replaced with new text.
+
+ In addition to a specifying string literals, regular expressions can
+represent classes of strings. Strings thus represented are said to be
+matched by the corresponding regular expression. If it is possible for a
+regular expression to match several strings in a line, then the
+left-most longest match is the one selected.
+
+ The following symbols are used in constructing regular expressions:
+
+`C'
+ Any character C not listed below, including `{', `}', `(', `)',
+ `<' and `>', matches itself.
+
+`\C'
+ Any backslash-escaped character C, other than `{', ``}', `(', `)',
+ `<', `>', `b', `B', `w', `W', `+' and `?', matches itself.
+
+`.'
+ Matches any single character.
+
+`[CHAR-CLASS]'
+ Matches any single character in CHAR-CLASS. To include a `]' in
+ CHAR-CLASS, it must be the first character. A range of characters
+ may be specified by separating the end characters of the range
+ with a `-', e.g., `a-z' specifies the lower case characters. The
+ following literal expressions can also be used in CHAR-CLASS to
+ specify sets of characters:
+
+ [:alnum:] [:cntrl:] [:lower:] [:space:]
+ [:alpha:] [:digit:] [:print:] [:upper:]
+ [:blank:] [:graph:] [:punct:] [:xdigit:]
+
+ If `-' appears as the first or last character of CHAR-CLASS, then
+ it matches itself. All other characters in CHAR-CLASS match
+ themselves.
+
+ Patterns in CHAR-CLASS of the form:
+ [.COL-ELM.]
+ [=COL-ELM=]
+
+ where COL-ELM is a "collating element" are interpreted according
+ to `locale (5)'. See `regex (3)' for an explanation of these
+ constructs.
+
+`[^CHAR-CLASS]'
+ Matches any single character, other than newline, not in
+ CHAR-CLASS. CHAR-CLASS is defined as above.
+
+`^'
+ If `^' is the first character of a regular expression, then it
+ anchors the regular expression to the beginning of a line.
+ Otherwise, it matches itself.
+
+`$'
+ If `$' is the last character of a regular expression, it anchors
+ the regular expression to the end of a line. Otherwise, it matches
+ itself.
+
+`\(RE\)'
+ Defines a (possibly null) subexpression RE. Subexpressions may be
+ nested. A subsequent backreference of the form `\N', where N is a
+ number in the range [1,9], expands to the text matched by the Nth
+ subexpression. For example, the regular expression `\(a.c\)\1'
+ matches the string `abcabc', but not `abcadc'. Subexpressions are
+ ordered relative to their left delimiter.
+
+`*'
+ Matches the single character regular expression or subexpression
+ immediately preceding it zero or more times. If `*' is the first
+ character of a regular expression or subexpression, then it matches
+ itself. The `*' operator sometimes yields unexpected results. For
+ example, the regular expression `b*' matches the beginning of the
+ string `abbb', as opposed to the substring `bbb', since a null
+ match is the only left-most match.
+
+`\{N,M\}'
+`\{N,\}'
+`\{N\}'
+ Matches the single character regular expression or subexpression
+ immediately preceding it at least N and at most M times. If M is
+ omitted, then it matches at least N times. If the comma is also
+ omitted, then it matches exactly N times. If any of these forms
+ occurs first in a regular expression or subexpression, then it is
+ interpreted literally (i.e., the regular expression `\{2\}'
+ matches the string `{2}', and so on).
+
+`\<'
+`\>'
+ Anchors the single character regular expression or subexpression
+ immediately following it to the beginning (in the case of `\<') or
+ ending (in the case of `\>') of a "word", i.e., in ASCII, a
+ maximal string of alphanumeric characters, including the
+ underscore (_).
+
+
+ The following extended operators are preceded by a backslash `\' to
+distinguish them from traditional `ed' syntax.
+
+`\`'
+`\''
+ Unconditionally matches the beginning `\`' or ending `\'' of a
+ line.
+
+`\?'
+ Optionally matches the single character regular expression or
+ subexpression immediately preceding it. For example, the regular
+ expression `a[bd]\?c' matches the strings `abc', `adc' and `ac'.
+ If `\?' occurs at the beginning of a regular expressions or
+ subexpression, then it matches a literal `?'.
+
+`\+'
+ Matches the single character regular expression or subexpression
+ immediately preceding it one or more times. So the regular
+ expression `a+' is shorthand for `aa*'. If `\+' occurs at the
+ beginning of a regular expression or subexpression, then it
+ matches a literal `+'.
+
+`\b'
+ Matches the beginning or ending (null string) of a word. Thus the
+ regular expression `\bhello\b' is equivalent to `\<hello\>'.
+ However, `\b\b' is a valid regular expression whereas `\<\>' is
+ not.
+
+`\B'
+ Matches (a null string) inside a word.
+
+`\w'
+ Matches any character in a word.
+
+`\W'
+ Matches any character not in a word.
+
+
+
+File: ed.info, Node: Commands, Next: Limitations, Prev: Regular Expressions, Up: Top
+
+6 Commands
+**********
+
+All `ed' commands are single characters, though some require additonal
+parameters. If a command's parameters extend over several lines, then
+each line except for the last must be terminated with a backslash (`\').
+
+ In general, at most one command is allowed per line. However, most
+commands accept a print suffix, which is any of `p' (print), `l'
+(list), or `n' (enumerate), to print the last line affected by the
+command.
+
+ An interrupt (typically <Control-C>) has the effect of aborting the
+current command and returning the editor to command mode.
+
+ `ed' recognizes the following commands. The commands are shown
+together with the default address or address range supplied if none is
+specified (in parenthesis).
+
+`(.)a'
+ Appends text to the buffer after the addressed line, which may be
+ the address `0' (zero). Text is entered in input mode. The current
+ address is set to last line entered.
+
+`(.,.)c'
+ Changes lines in the buffer. The addressed lines are deleted from
+ the buffer, and text is appended in their place. Text is entered
+ in input mode. The current address is set to last line entered.
+
+`(.,.)d'
+ Deletes the addressed lines from the buffer. If there is a line
+ after the deleted range, then the current address is set to this
+ line. Otherwise the current address is set to the line before the
+ deleted range.
+
+`e FILE'
+ Edits FILE, and sets the default filename. If FILE is not
+ specified, then the default filename is used. Any lines in the
+ buffer are deleted before the new file is read. The current
+ address is set to the last line read.
+
+`e !COMMAND'
+ Edits the standard output of `!COMMAND', (see the `!' command
+ below). The default filename is unchanged. Any lines in the buffer
+ are deleted before the output of COMMAND is read. The current
+ address is set to the last line read.
+
+`E FILE'
+ Edits FILE unconditionally. This is similar to the `e' command,
+ except that unwritten changes are discarded without warning. The
+ current address is set to the last line read.
+
+`f FILE'
+ Sets the default filename to FILE. If FILE is not specified, then
+ the default unescaped filename is printed.
+
+`(1,$)g /RE/COMMAND-LIST'
+ Global command. Applies COMMAND-LIST to each of the addressed
+ lines matching a regular expression RE. The current address is set
+ to the line currently matched before COMMAND-LIST is executed. At
+ the end of the `g' command, the current address is set to the last
+ line affected by COMMAND-LIST.
+
+ At least the first command of COMMAND-LIST must appear on the same
+ line as the `g' command. All lines of a multi-line COMMAND-LIST
+ except the last line must be terminated with a backslash (`\').
+ Any commands are allowed, except for `g', `G', `v', and `V'. By
+ default, a newline alone in COMMAND-LIST is equivalent to a `p'
+ command. If `ed' is invoked with the command-line option `-G',
+ then a newline in COMMAND-LIST is equivalent to a `.+1p' command.
+
+`(1,$)G /RE/'
+ Interactive global command. Interactively edits the addressed lines
+ matching a regular expression RE. For each matching line, the line
+ is printed, the current address is set, and the user is prompted to
+ enter a COMMAND-LIST. At the end of the `G' command, the current
+ address is set to the last line affected by (the last)
+ COMMAND-LIST.
+
+ The format of COMMAND-LIST is the same as that of the `g' command.
+ A newline alone acts as a null command list. A single `&' repeats
+ the last non-null command list.
+
+`H'
+ Toggles the printing of error explanations. By default,
+ explanations are not printed. It is recommended that ed scripts
+ begin with this command to aid in debugging.
+
+`h'
+ Prints an explanation of the last error.
+
+`(.)i'
+ Inserts text in the buffer before the current line. The address `0'
+ (zero) is valid for this command; it is equivalent to address `1'.
+ Text is entered in input mode. The current address is set to the
+ last line entered.
+
+`(.,.+1)j'
+ Joins the addressed lines. The addressed lines are deleted from the
+ buffer and replaced by a single line containing their joined text.
+ The current address is set to the resultant line.
+
+`(.)kx'
+ Marks a line with a lower case letter `x'. The line can then be
+ addressed as `'x' (i.e., a single quote followed by `x') in
+ subsequent commands. The mark is not cleared until the line is
+ deleted or otherwise modified.
+
+`(.,.)l'
+ Prints the addressed lines unambiguously. The end of each line is
+ marked with a `$', and every `$' character within the text is
+ printed with a preceding backslash. The current address is set to
+ the last line printed.
+
+`(.,.)m(.)'
+ Moves lines in the buffer. The addressed lines are moved to after
+ the right-hand destination address, which may be the address `0'
+ (zero). The current address is set to the new address of the last
+ line moved.
+
+`(.,.)n'
+ Prints the addressed lines, preceding each line by its line number
+ and a <tab>. The current address is set to the last line printed.
+
+`(.,.)p'
+ Prints the addressed lines. The current address is set to the last
+ line printed.
+
+`P'
+ Toggles the command prompt on and off. Unless a prompt is
+ specified with command-line option `-p', the command prompt is by
+ default turned off.
+
+`q'
+ Quits `ed'.
+
+`Q'
+ Quits `ed' unconditionally. This is similar to the `q' command,
+ except that unwritten changes are discarded without warning.
+
+`($)r FILE'
+ Reads FILE to after the addressed line. If FILE is not specified,
+ then the default filename is used. If there is no default filename
+ prior to the command, then the default filename is set to FILE.
+ Otherwise, the default filename is unchanged. The current address
+ is set to the last line read.
+
+`($)r !COMMAND'
+ Reads to after the addressed line the standard output of
+ `!command', (see the `!' command below). The default filename is
+ unchanged. The current address is set to the last line read.
+
+`(.,.)s /RE/REPLACEMENT/'
+`(.,.)s /RE/REPLACEMENT/g'
+`(.,.)s /RE/REPLACEMENT/N'
+ Replaces text in the addressed lines matching a regular expression
+ RE with REPLACEMENT. By default, only the first match in each line
+ is replaced. If the `g' (global) suffix is given, then every match
+ is replaced. The N suffix, where N is a postive number, causes
+ only the Nth match to be replaced. It is an error if no
+ substitutions are performed on any of the addressed lines. The
+ current address is set to the last line affected.
+
+ RE and REPLACEMENT may be delimited by any character other than
+ <space>, <newline> and the characters used by the form of the `s'
+ command shown below. If one or two of the last delimiters is
+ omitted, then the last line affected is printed as if the print
+ suffix `p' were specified.
+
+ An unescaped `&' in REPLACEMENT is replaced by the currently
+ matched text. The character sequence `\M' where M is a number in
+ the range [1,9], is replaced by the Mth backreference expression
+ of the matched text. If REPLACEMENT consists of a single `%', then
+ REPLACEMENT from the last substitution is used. Newlines may be
+ embedded in REPLACEMENT if they are escaped with a backslash (`\').
+
+`(.,.)s'
+ Repeats the last substitution. This form of the `s' command accepts
+ a count suffix N, and any combination of the characters `r', `g',
+ and `p'. If a count suffix N is given, then only the Nth match is
+ replaced. The `r' suffix causes the regular expression of the last
+ search to be used instead of the that of the last substitution.
+ The `g' suffix toggles the global suffix of the last substitution.
+ The `p' suffix toggles the print suffix of the last substitution.
+ The current address is set to the last line affected.
+
+`(.,.)t(.)'
+ Copies (i.e., transfers) the addressed lines to after the
+ right-hand destination address, which may be the address `0'
+ (zero). The current address is set to the last line copied.
+
+`u'
+ Undoes the last command and restores the current address to what
+ it was before the command. The global commands `g', `G', `v', and
+ `V' are treated as a single command by undo. `u' is its own
+ inverse.
+
+`(1,$)v /RE/COMMAND-LIST'
+ This is similar to the `g' command except that it applies
+ COMMAND-LIST to each of the addressed lines not matching the
+ regular expression RE.
+
+`(1,$)V /RE/'
+ This is similar to the `G' command except that it interactively
+ edits the addressed lines not matching the regular expression RE.
+
+`(1,$)w FILE'
+ Writes the addressed lines to FILE. Any previous contents of FILE
+ is lost without warning. If there is no default filename, then the
+ default filename is set to FILE, otherwise it is unchanged. If no
+ filename is specified, then the default filename is used. The
+ current address is unchanged.
+
+`(1,$)w !COMMAND'
+ Writes the addressed lines to the standard input of `!COMMAND',
+ (see the `!' command below). The default filename and current
+ address are unchanged.
+
+`(1,$)wq FILE'
+ Writes the addressed lines to FILE, and then executes a `q'
+ command.
+
+`(1,$)W FILE'
+ Appends the addressed lines to the end of FILE. This is similar to
+ the `w' command, expect that the previous contents of file is not
+ clobbered. The current address is unchanged.
+
+`(.)x'
+ Copies (puts) the contents of the cut buffer to after the addressed
+ line. The current address is set to the last line copied.
+
+`(.,.)y'
+ Copies (yanks) the addressed lines to the cut buffer. The cut
+ buffer is overwritten by subsequent `y', `s', `j', `d', or `c'
+ commands. The current address is unchanged.
+
+`(.+1)z N'
+ Scrolls N lines at a time starting at addressed line. If N is not
+ specified, then the current window size is used. The current
+ address is set to the last line printed.
+
+`!COMMAND'
+ Executes COMMAND via `sh (1)'. If the first character of COMMAND
+ is `!', then it is replaced by text of the previous `!COMMAND'.
+ `ed' does not process COMMAND for backslash (`\') escapes.
+ However, an unescaped `%' is replaced by the default filename.
+ When the shell returns from execution, a `!' is printed to the
+ standard output. The current line is unchanged.
+
+`(.,.)#'
+ Begins a comment; the rest of the line, up to a newline, is
+ ignored. If a line address followed by a semicolon is given, then
+ the current address is set to that address. Otherwise, the current
+ address is unchanged.
+
+`($)='
+ Prints the line number of the addressed line.
+
+`(.+1)<newline>'
+ An address alone prints the addressed line. A <newline> alone is
+ equivalent to `+1p'. the current address is set to the address of
+ the printed line.
+
+
+
+File: ed.info, Node: Limitations, Next: Diagnostics, Prev: Commands, Up: Top
+
+7 Limitations
+*************
+
+If the terminal hangs up, `ed' attempts to write the buffer to file
+`ed.hup'.
+
+ `ed' processes FILE arguments for backslash escapes, i.e., in a
+filename, any characters preceded by a backslash (`\') are interpreted
+literally.
+
+ If a text (non-binary) file is not terminated by a newline character,
+then `ed' appends one on reading/writing it. In the case of a binary
+file, `ed' does not append a newline on reading/writing.
+
+ Per line overhead: 4 `int's.
+
+
+File: ed.info, Node: Diagnostics, Next: Problems, Prev: Limitations, Up: Top
+
+8 Diagnostics
+*************
+
+When an error occurs, if `ed''s input is from a regular file or here
+document, then it exits, otherwise it prints a `?' and returns to
+command mode. An explanation of the last error can be printed with the
+`h' (help) command.
+
+ If the `u' (undo) command occurs in a global command list, then the
+command list is executed only once.
+
+ Attempting to quit `ed' or edit another file before writing a
+modified buffer results in an error. If the command is entered a second
+time, it succeeds, but any changes to the buffer are lost.
+
+ `ed' exits with 0 if no errors occurred; otherwise >0.
+
+
+File: ed.info, Node: Problems, Next: GNU Free Documentation License, Prev: Diagnostics, Up: Top
+
+9 Reporting Bugs
+****************
+
+There are probably bugs in `ed'. There are certainly errors and
+omissions in this manual. If you report them, they will get fixed. If
+you don't, no one will ever know about them and they will remain unfixed
+for all eternity, if not longer.
+
+ If you find a bug in `ed', please send electronic mail to
+<bug-ed@gnu.org>. Include the version number, which you can find by
+running ``ed' --version'.
+
+
+File: ed.info, Node: GNU Free Documentation License, Prev: Problems, Up: Top
+
+10 GNU Free Documentation License
+*********************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ `http://fsf.org/'
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it
+ can be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You
+ accept the license if you copy, modify or distribute the work in a
+ way requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License. If a section does not fit the above definition of
+ Secondary then it is not allowed to be designated as Invariant.
+ The Document may contain zero Invariant Sections. If the Document
+ does not identify any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup, or absence of
+ markup, has been arranged to thwart or discourage subsequent
+ modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A
+ copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML, PostScript or PDF designed for
+ human modification. Examples of transparent image formats include
+ PNG, XCF and JPG. Opaque formats include proprietary formats that
+ can be read and edited only by proprietary word processors, SGML or
+ XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF
+ produced by some word processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a computer-network location from
+ which the general network-using public has access to download
+ using public-standard network protocols a complete Transparent
+ copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of
+ previous versions (which should, if there were any, be listed
+ in the History section of the Document). You may use the
+ same title as a previous version if the original publisher of
+ that version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on
+ the Title Page. If there is no section Entitled "History" in
+ the Document, create one stating the title, year, authors,
+ and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in
+ the previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in
+ the "History" section. You may omit a network location for a
+ work that was published at least four years before the
+ Document itself, or if the original publisher of the version
+ it refers to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the
+ section all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section
+ titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from
+ you under this License. If your rights have been terminated and
+ not permanently reinstated, receipt of a copy of some or all of
+ the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ `http://www.gnu.org/copyleft/'.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation. If the Document specifies that a proxy
+ can decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+
+Tag Table:
+Node: Top544
+Node: Overview2005
+Node: Introduction to Line Editing4062
+Node: Invoking Ed11305
+Node: Line Addressing12953
+Node: Regular Expressions16056
+Node: Commands21401
+Node: Limitations32546
+Node: Diagnostics33121
+Node: Problems33825
+Node: GNU Free Documentation License34360
+
+End Tag Table
diff --git a/doc/ed.texinfo b/doc/ed.texinfo
new file mode 100644
index 0000000..5b77d4d
--- /dev/null
+++ b/doc/ed.texinfo
@@ -0,0 +1,982 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename ed.info
+@settitle GNU @command{ed} Manual
+@finalout
+@c %**end of header
+
+@set UPDATED 10 July 2009
+@set VERSION 1.4
+
+@dircategory Basics
+@direntry
+* Ed: (ed). The GNU line editor
+@end direntry
+
+@copying
+Copyright @copyright{} 1993, 2006, 2007, 2008, 2009
+Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+@end copying
+
+@titlepage
+@title GNU ed
+@subtitle The GNU line editor
+@subtitle for GNU ed version @value{VERSION}, @value{UPDATED}
+@author by Andrew L. Moore and Antonio Diaz Diaz
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top The GNU ed line editor
+
+This manual is for GNU ed (version @value{VERSION}, @value{UPDATED}).
+
+@sp 1
+GNU ed is an 8-bit clean, more or less POSIX-compliant implementation of
+the standard Unix line editor. These days, full-screen editors have
+rendered @command{ed} mostly of historical interest. Nonetheless, it
+appeals to a handful of aging programmers who still believe that ``Small
+is Beautiful''.
+@end ifnottex
+
+@menu
+* Overview:: Overview of the @command{ed} command
+* Introduction to Line Editing:: Getting started with GNU @command{ed}
+* Invoking Ed:: Command line interface
+* Line Addressing:: Specifying lines/ranges in the buffer
+* Regular Expressions:: Patterns for selecting text
+* Commands:: Commands recognized by GNU @command{ed}
+* Limitations:: Intrinsic limits of GNU @command{ed}
+* Diagnostics:: GNU @command{ed} error handling
+* Problems:: Reporting bugs
+* GNU Free Documentation License:: How you can copy and share this manual
+
+@end menu
+
+@sp 1
+@insertcopying
+
+
+@node Overview
+@chapter Overview
+
+@command{ed} is a line-oriented text editor. It is used to create,
+display, modify and otherwise manipulate text files. @command{red} is a
+restricted @command{ed}: it can only edit files in the current directory
+and cannot execute shell commands.
+
+If invoked with a @var{file} argument, then a copy of @var{file} is read
+into the editor's buffer. Changes are made to this copy and not directly
+to @var{file} itself. Upon quitting @command{ed}, any changes not
+explicitly saved with a @samp{w} command are lost.
+
+Editing is done in two distinct modes: @dfn{command} and @dfn{input}.
+When first invoked, @command{ed} is in command mode. In this mode
+commands are read from the standard input and executed to manipulate the
+contents of the editor buffer. A typical command might look like:
+
+@example
+,s/@var{old}/@var{new}/g
+@end example
+
+which replaces all occurences of the string @var{old} with @var{new}.
+
+When an input command, such as @samp{a} (append), @samp{i} (insert) or
+@samp{c} (change), is given, @command{ed} enters input mode. This is the
+primary means of adding text to a file. In this mode, no commands are
+available; instead, the standard input is written directly to the editor
+buffer. A @dfn{line} consists of the text up to and including a
+@key{newline} character. Input mode is terminated by entering a single
+period (@samp{.}) on a line.
+
+All @command{ed} commands operate on whole lines or ranges of lines;
+e.g., the @samp{d} command deletes lines; the @samp{m} command moves
+lines, and so on. It is possible to modify only a portion of a line by
+means of replacement, as in the example above. However even here, the
+@samp{s} command is applied to whole lines at a time.
+
+In general, @command{ed} commands consist of zero or more line
+addresses, followed by a single character command and possibly
+additional parameters; i.e., commands have the structure:
+
+@example
+[@var{address} [,@var{address}]]@var{command}[@var{parameters}]
+@end example
+
+The @var{address}es indicate the line or range of lines to be affected
+by the command. If fewer addresses are given than the command accepts,
+then default addresses are supplied.
+
+
+@node Introduction to Line Editing
+@chapter Introduction to Line Editing
+
+@command{ed} was created, along with the Unix operating system, by Ken
+Thompson and Dennis Ritchie. It is the refinement of its more complex,
+programmable predecessor, @cite{QED}, to which Thompson and Ritchie had
+already added pattern matching capabilities (@pxref{Regular
+Expressions}).
+
+For the purposes of this tutorial, a working knowledge of the Unix shell
+@command{sh} (@pxref{Bash,,, bash, The GNU Bash Reference Manual}) and
+the Unix file system is recommended, since @command{ed} is designed to
+interact closely with them.
+
+The principal difference between line editors and display editors is
+that display editors provide instant feedback to user commands, whereas
+line editors require sometimes lengthy input before any effects are
+seen. The advantage of instant feedback, of course, is that if a mistake
+is made, it can be corrected immediately, before more damage is done.
+Editing in @command{ed} requires more strategy and forethought; but if
+you are up to the task, it can be quite efficient.
+
+Much of the @command{ed} command syntax is shared with other Unix
+utilities.
+
+As with the shell, @key{RETURN} (the carriage-return key) enters a line
+of input. So when we speak of ``entering'' a command or some text in
+@command{ed}, @key{RETURN} is implied at the end of each line. Prior to
+typing @key{RETURN}, corrections to the line may be made by typing
+either @key{BACKSPACE} (sometimes labeled @key{DELETE} or @key{DEL}) to
+erase characters backwards, or @key{CONTROL}-u (i.e., hold the CONTROL
+key and type u) to erase the whole line.
+
+When @command{ed} first opens, it expects to be told what to do but
+doesn't prompt us like the shell. So let's begin by telling @command{ed}
+to do so with the @key{P} (@dfn{prompt}) command:
+
+@example
+$ ed
+P
+*
+@end example
+
+By default, @command{ed} uses asterisk (@samp{*}) as command prompt to
+avoid confusion with the shell command prompt (@samp{$}).
+
+We can run Unix shell (@command{sh}) commands from inside @command{ed}
+by prefixing them with @key{!} (exclamation mark, aka ``bang''). For
+example:
+
+@example
+*!date
+Mon Jun 26 10:08:41 PDT 2006
+!
+*!for s in hello world; do echo $s; done
+hello
+world
+!
+*
+@end example
+
+So far, this is no different from running commands in the Unix shell.
+But let's say we want to edit the output of a command, or save it to a
+file. First we must capture the command output to a temporary location
+called a @dfn{buffer} where @command{ed} can access it. This is done
+with @command{ed}'s @key{r} command (mnemonic: @dfn{read}):
+
+@example
+*r !cal
+143
+*
+@end example
+
+Here @command{ed} is telling us that it has just read 143 characters
+into the editor buffer - i.e., the output of the @command{cal} command,
+which prints a simple ASCII calendar. To display the buffer contents we
+issue the @key{p} (@dfn{print}) command (not to be confused with the
+prompt command, which is uppercase!). To indicate the range of lines in
+the buffer that should be printed, we prefix the command with @key{,}
+(comma) which is shorthand for ``the whole buffer'':
+
+@example
+*,p
+ September 2006
+Mo Tu We Th Fr Sa Su
+ 1 2 3
+ 4 5 6 7 8 9 10
+11 12 13 14 15 16 17
+18 19 20 21 22 23 24
+25 26 27 28 29 30
+
+*
+@end example
+
+Now let's write the buffer contents to a file named @code{junk} with the
+@key{w} (@dfn{write}) command. Again, we use the @key{,} prefix to
+indicate that it's the whole buffer we want:
+
+@example
+*,w junk
+143
+*
+@end example
+
+Need we say? It's good practice to frequently write the buffer contents,
+since unwritten changes to the buffer will be lost when we exit
+@command{ed}.
+
+The sample sessions below illustrate some basic concepts of line editing
+with @command{ed}. We begin by creating a file, @samp{sonnet}, with some
+help from Shakespeare. As with the shell, all input to @command{ed} must
+be followed by a @key{newline} character. Comments begin with a @samp{#}.
+
+@example
+$ ed
+# The `a' command is for appending text to the editor buffer.
+a
+No more be grieved at that which thou hast done.
+Roses have thorns, and filvers foutians mud.
+Clouds and eclipses stain both moon and sun,
+And loathsome canker lives in sweetest bud.
+.
+# Entering a single period on a line returns @command{ed} to command mode.
+# Now write the buffer to the file @samp{sonnet} and quit:
+w sonnet
+183
+# @command{ed} reports the number of characters written.
+q
+$ ls -l
+total 2
+-rw-rw-r-- 1 alm 183 Nov 10 01:16 sonnet
+$
+@end example
+
+In the next example, some typos are corrected in the file @samp{sonnet}.
+
+@example
+$ ed sonnet
+183
+# Begin by printing the buffer to the terminal with the @samp{p} command.
+# The `,' means ``all lines.''
+,p
+No more be grieved at that which thou hast done.
+Roses have thorns, and filvers foutians mud.
+Clouds and eclipses stain both moon and sun,
+And loathsome canker lives in sweetest bud.
+# Select line 2 for editing.
+2
+Roses have thorns, and filvers foutians mud.
+# Use the substitute command, @samp{s}, to replace `filvers' with `silver',
+# and print the result.
+s/filvers/silver/p
+Roses have thorns, and silver foutians mud.
+# And correct the spelling of `fountains'.
+s/utia/untai/p
+Roses have thorns, and silver fountains mud.
+w sonnet
+183
+q
+$
+@end example
+
+Since @command{ed} is line-oriented, we have to tell it which line, or
+range of lines we want to edit. In the above example, we do this by
+specifying the line's number, or sequence in the buffer. Alternatively,
+we could have specified a unique string in the line, e.g.,
+@samp{/filvers/}, where the @samp{/}s delimit the string in question.
+Subsequent commands affect only the selected line, a.k.a. the
+@dfn{current} line. Portions of that line are then replaced with the
+substitute command, whose syntax is @samp{s/@var{old}/@var{new}/}.
+
+Although @command{ed} accepts only one command per line, the print
+command @samp{p} is an exception, and may be appended to the end of most
+commands.
+
+In the next example, a title is added to our sonnet.
+
+@example
+$ ed sonnet
+183
+a
+ Sonnet #50
+.
+,p
+No more be grieved at that which thou hast done.
+Roses have thorns, and silver fountains mud.
+Clouds and eclipses stain both moon and sun,
+And loathsome canker lives in sweetest bud.
+ Sonnet #50
+# The title got appended to the end; we should have used `0a'
+# to append ``before the first line.''
+# Move the title to its proper place.
+5m0p
+ Sonnet #50
+# The title is now the first line, and the current line has been
+# set to this line as well.
+,p
+ Sonnet #50
+No more be grieved at that which thou hast done.
+Roses have thorns, and silver fountains mud.
+Clouds and eclipses stain both moon and sun,
+And loathsome canker lives in sweetest bud.
+wq sonnet
+195
+$
+@end example
+
+When @command{ed} opens a file, the current line is initially set to the
+last line of that file. Similarly, the move command @samp{m} sets the
+current line to the last line moved.
+
+In summary:
+
+Structurally,
+Related programs or routines are @command{vi (1)}, @command{sed (1)},
+@command{regex (3)}, @command{sh (1)}. Relevant documents
+are:
+
+@quotation
+Unix User's Manual Supplementary Documents: 12 --- 13
+@end quotation
+
+@quotation
+B. W. Kernighan and P. J. Plauger: ``Software Tools in Pascal'',
+Addison-Wesley, 1981.
+@end quotation
+
+
+@node Invoking Ed
+@chapter Invoking Ed
+
+The format for running @command{ed} is:
+
+@example
+ed [@var{options}] [@var{file}]
+red [@var{options}] [@var{file}]
+@end example
+
+@var{file} specifies the name of a file to read. If @var{file} is
+prefixed with a bang (!), then it is interpreted as a shell command. In
+this case, what is read is the standard output of @var{file} executed
+via @command{sh (1)}. To read a file whose name begins with a bang,
+prefix the name with a backslash (@kbd{\}). The default filename is set
+to @var{file} only if it is not prefixed with a bang.
+
+@command{ed} supports the following options:
+
+@table @code
+@item --help
+@itemx -h
+Print an informative help message describing the options and exit.
+
+@item --version
+@itemx -V
+Print the version number of @command{ed} on the standard output and exit.
+
+@item --loose-exit-status
+@itemx -l
+Do not exit with bad status if a command happens to "fail" (for example
+if a substitution command finds nothing to replace). This can be useful
+when @command{ed} is invoked as the editor for crontab.
+
+@item --prompt=@var{string}
+@itemx -p @var{string}
+Specifies a command prompt. This may be toggled on and off with the
+@samp{P} command.
+
+@item --quiet
+@itemx --silent
+@itemx -s
+Suppresses diagnostics. This should be used if @command{ed}'s standard
+input is from a script.
+
+@item --traditional
+@itemx -G
+Forces backwards compatibility. This affects the behavior of the
+@command{ed} commands @samp{G}, @samp{V}, @samp{f}, @samp{l}, @samp{m},
+@samp{t} and @samp{!!}. If the default behavior of these commands does
+not seem familiar, then try invoking @command{ed} with this switch.
+
+@item --verbose
+@itemx -v
+Verbose mode. This may be toggled on and off with the @samp{H} command.
+
+@end table
+
+
+@node Line Addressing
+@chapter Line Addressing
+
+An address represents the number of a line in the buffer. @command{ed}
+maintains a @dfn{current address} which is typically supplied to
+commands as the default address when none is specified. When a file is
+first read, the current address is set to the last line of the file. In
+general, the current address is set to the last line affected by a
+command.
+
+A line address is constructed from one of the bases in the list below,
+optionally followed by a numeric offset. The offset may include any
+combination of digits, operators (i.e., @samp{+} and @samp{-}) and
+whitespace. Addresses are read from left to right, and their values may
+be absolute or relative to the current address.
+
+One exception to the rule that addresses represent line numbers is the
+address @samp{0} (zero). This means ``before the first line,'' and is
+valid wherever it makes sense.
+
+An address range is two addresses separated either by a comma or
+semicolon. The value of the first address in a range cannot exceed the
+value of the second. If only one address is given in a range, then the
+second address is set to the given address. If an @var{n}-tuple of
+addresses is given where @var{n} > 2, then the corresponding range is
+determined by the last two addresses in the @var{n}-tuple. If only one
+address is expected, then the last address is used.
+
+Each address in a comma-delimited range is interpreted relative to the
+current address. In a semicolon-delimited range, the first address is
+used to set the current address, and the second address is interpreted
+relative to the first.
+
+The following address symbols are recognized.
+
+@table @code
+@item .
+The current line (address) in the buffer.
+
+@item $
+The last line in the buffer.
+
+@item @var{n}
+The @var{n}th, line in the buffer where @var{n} is a number in the range
+@samp{0,$}.
+
+@item +
+The next line. This is equivalent to @samp{+1} and may be repeated with
+cumulative effect.
+
+@item -
+The previous line. This is equivalent to @samp{-1} and may be repeated
+with cumulative effect.
+
+@item +@var{n}
+@itemx @var{whitespace} @var{n}
+The @var{n}th next line, where @var{n} is a non-negative number.
+Whitespace followed by a number @var{n} is interpreted as
+@samp{+@var{n}}.
+
+@item -@var{n}
+The @var{n}th previous line, where @var{n} is a non-negative number.
+
+@item ,
+The first through last lines in the buffer. This is equivalent to the
+address range @samp{1,$}.
+
+@item ;
+The current through last lines in the buffer. This is equivalent to the
+address range @samp{.,$}.
+
+@item /@var{re}/
+The next line containing the regular expression @var{re}. The search
+wraps to the beginning of the buffer and continues down to the current
+line, if necessary. @samp{//} repeats the last search.
+
+@item ?@var{re}?
+The previous line containing the regular expression @var{re}. The search
+wraps to the end of the buffer and continues up to the current line, if
+necessary. @samp{??} repeats the last search.
+
+@item 'x
+The apostrophe-x character pair addresses the line previously marked by
+a @samp{k} (mark) command, where @samp{x} is a lower case letter from
+the portable character set.
+
+@end table
+
+
+@node Regular Expressions
+@chapter Regular Expressions
+
+Regular expressions are patterns used in selecting text. For example,
+the @command{ed} command
+
+@example
+g/@var{string}/
+@end example
+
+@noindent
+prints all lines containing @var{string}. Regular expressions are also
+used by the @samp{s} command for selecting old text to be replaced with
+new text.
+
+In addition to a specifying string literals, regular expressions can
+represent classes of strings. Strings thus represented are said to be
+matched by the corresponding regular expression. If it is possible for a
+regular expression to match several strings in a line, then the
+left-most longest match is the one selected.
+
+The following symbols are used in constructing regular expressions:
+
+@table @code
+
+@item @var{c}
+Any character @var{c} not listed below, including @samp{@{}, @samp{@}},
+@samp{(}, @samp{)}, @samp{<} and @samp{>}, matches itself.
+
+@item \@var{c}
+Any backslash-escaped character @var{c}, other than @samp{@{},
+`@samp{@}}, @samp{(}, @samp{)}, @samp{<}, @samp{>}, @samp{b}, @samp{B},
+@samp{w}, @samp{W}, @samp{+} and @samp{?}, matches itself.
+
+@item .
+Matches any single character.
+
+@item [@var{char-class}]
+Matches any single character in @var{char-class}. To include a @samp{]}
+in @var{char-class}, it must be the first character. A range of
+characters may be specified by separating the end characters of the
+range with a @samp{-}, e.g., @samp{a-z} specifies the lower case
+characters. The following literal expressions can also be used in
+@var{char-class} to specify sets of characters:
+
+@example
+[:alnum:] [:cntrl:] [:lower:] [:space:]
+[:alpha:] [:digit:] [:print:] [:upper:]
+[:blank:] [:graph:] [:punct:] [:xdigit:]
+@end example
+
+If @samp{-} appears as the first or last character of @var{char-class},
+then it matches itself. All other characters in @var{char-class} match
+themselves.
+
+Patterns in
+@var{char-class}
+of the form:
+@example
+[.@var{col-elm}.]
+[=@var{col-elm}=]
+@end example
+
+@noindent
+where @var{col-elm} is a @dfn{collating element} are interpreted
+according to @code{locale (5)}. See
+@code{regex (3)} for an explanation of these constructs.
+
+@item [^@var{char-class}]
+Matches any single character, other than newline, not in
+@var{char-class}. @var{char-class} is defined as above.
+
+@item ^
+If @samp{^} is the first character of a regular expression, then it
+anchors the regular expression to the beginning of a line. Otherwise,
+it matches itself.
+
+@item $
+If @samp{$} is the last character of a regular expression, it anchors
+the regular expression to the end of a line. Otherwise, it matches
+itself.
+
+@item \(@var{re}\)
+Defines a (possibly null) subexpression @var{re}. Subexpressions may be
+nested. A subsequent backreference of the form @samp{\@var{n}}, where
+@var{n} is a number in the range [1,9], expands to the text matched by
+the @var{n}th subexpression. For example, the regular expression
+@samp{\(a.c\)\1} matches the string @samp{abcabc}, but not
+@samp{abcadc}. Subexpressions are ordered relative to their left
+delimiter.
+
+@item *
+Matches the single character regular expression or subexpression
+immediately preceding it zero or more times. If @samp{*} is the first
+character of a regular expression or subexpression, then it matches
+itself. The @samp{*} operator sometimes yields unexpected results. For
+example, the regular expression @samp{b*} matches the beginning of the
+string @samp{abbb}, as opposed to the substring @samp{bbb}, since a null
+match is the only left-most match.
+
+@item \@{@var{n},@var{m}\@}
+@itemx \@{@var{n},\@}
+@itemx \@{@var{n}\@}
+Matches the single character regular expression or subexpression
+immediately preceding it at least @var{n} and at most @var{m} times. If
+@var{m} is omitted, then it matches at least @var{n} times. If the comma
+is also omitted, then it matches exactly @var{n} times. If any of these
+forms occurs first in a regular expression or subexpression, then it is
+interpreted literally (i.e., the regular expression @samp{\@{2\@}}
+matches the string @samp{@{2@}}, and so on).
+
+@item \<
+@itemx \>
+Anchors the single character regular expression or subexpression
+immediately following it to the beginning (in the case of @samp{\<}) or
+ending (in the case of @samp{\>}) of a @dfn{word}, i.e., in ASCII, a
+maximal string of alphanumeric characters, including the underscore (_).
+
+@end table
+
+The following extended operators are preceded by a backslash @samp{\} to
+distinguish them from traditional @command{ed} syntax.
+
+@table @code
+
+@item \`
+@itemx \'
+Unconditionally matches the beginning @samp{\`} or ending @samp{\'} of a line.
+
+@item \?
+Optionally matches the single character regular expression or
+subexpression immediately preceding it. For example, the regular
+expression @samp{a[bd]\?c} matches the strings @samp{abc}, @samp{adc}
+and @samp{ac}. If @samp{\?} occurs at the beginning of a regular
+expressions or subexpression, then it matches a literal @samp{?}.
+
+@item \+
+Matches the single character regular expression or subexpression
+immediately preceding it one or more times. So the regular expression
+@samp{a+} is shorthand for @samp{aa*}. If @samp{\+} occurs at the
+beginning of a regular expression or subexpression, then it matches a
+literal @samp{+}.
+
+@item \b
+Matches the beginning or ending (null string) of a word. Thus the
+regular expression @samp{\bhello\b} is equivalent to @samp{\<hello\>}.
+However, @samp{\b\b} is a valid regular expression whereas @samp{\<\>}
+is not.
+
+@item \B
+Matches (a null string) inside a word.
+
+@item \w
+Matches any character in a word.
+
+@item \W
+Matches any character not in a word.
+
+@end table
+
+
+@node Commands
+@chapter Commands
+
+All @command{ed} commands are single characters, though some require
+additonal parameters. If a command's parameters extend over several
+lines, then each line except for the last must be terminated with a
+backslash (@samp{\}).
+
+In general, at most one command is allowed per line. However, most
+commands accept a print suffix, which is any of @samp{p} (print),
+@samp{l} (list), or @samp{n} (enumerate), to print the last line
+affected by the command.
+
+An interrupt (typically @key{Control-C}) has the effect of aborting the
+current command and returning the editor to command mode.
+
+@command{ed} recognizes the following commands. The commands are shown
+together with the default address or address range supplied if none is
+specified (in parenthesis).
+
+@table @code
+
+@item (.)a
+Appends text to the buffer after the addressed line, which may be the
+address @samp{0} (zero). Text is entered in input mode. The current
+address is set to last line entered.
+
+@item (.,.)c
+Changes lines in the buffer. The addressed lines are deleted from the
+buffer, and text is appended in their place. Text is entered in input
+mode. The current address is set to last line entered.
+
+@item (.,.)d
+Deletes the addressed lines from the buffer. If there is a line after
+the deleted range, then the current address is set to this line.
+Otherwise the current address is set to the line before the deleted
+range.
+
+@item e @var{file}
+Edits @var{file}, and sets the default filename. If @var{file} is not
+specified, then the default filename is used. Any lines in the buffer
+are deleted before the new file is read. The current address is set to
+the last line read.
+
+@item e !@var{command}
+Edits the standard output of @samp{!@var{command}}, (see the @samp{!}
+command below). The default filename is unchanged. Any lines in the
+buffer are deleted before the output of @var{command} is read. The
+current address is set to the last line read.
+
+@item E @var{file}
+Edits @var{file} unconditionally. This is similar to the @samp{e}
+command, except that unwritten changes are discarded without warning.
+The current address is set to the last line read.
+
+@item f @var{file}
+Sets the default filename to @var{file}. If @var{file} is not specified,
+then the default unescaped filename is printed.
+
+@item (1,$)g /@var{re}/@var{command-list}
+Global command. Applies @var{command-list} to each of the addressed
+lines matching a regular expression @var{re}. The current address is set
+to the line currently matched before @var{command-list} is executed. At
+the end of the @samp{g} command, the current address is set to the last
+line affected by @var{command-list}.
+
+At least the first command of @var{command-list} must appear on the same
+line as the @samp{g} command. All lines of a multi-line
+@var{command-list} except the last line must be terminated with a
+backslash (@samp{\}). Any commands are allowed, except for @samp{g},
+@samp{G}, @samp{v}, and @samp{V}. By default, a newline alone in
+@var{command-list} is equivalent to a @samp{p} command. If @command{ed}
+is invoked with the command-line option @samp{-G}, then a newline in
+@var{command-list} is equivalent to a @samp{.+1p} command.
+
+@item (1,$)G /@var{re}/
+Interactive global command. Interactively edits the addressed lines
+matching a regular expression @var{re}. For each matching line, the line
+is printed, the current address is set, and the user is prompted to
+enter a @var{command-list}. At the end of the @samp{G} command, the
+current address is set to the last line affected by (the last)
+@var{command-list}.
+
+The format of @var{command-list} is the same as that of the @samp{g}
+command. A newline alone acts as a null command list. A single @samp{&}
+repeats the last non-null command list.
+
+@item H
+Toggles the printing of error explanations. By default, explanations are
+not printed. It is recommended that ed scripts begin with this command
+to aid in debugging.
+
+@item h
+Prints an explanation of the last error.
+
+@item (.)i
+Inserts text in the buffer before the current line. The address @samp{0}
+(zero) is valid for this command; it is equivalent to address @samp{1}.
+Text is entered in input mode. The current address is set to the last
+line entered.
+
+@item (.,.+1)j
+Joins the addressed lines. The addressed lines are deleted from the
+buffer and replaced by a single line containing their joined text. The
+current address is set to the resultant line.
+
+@item (.)kx
+Marks a line with a lower case letter @samp{x}. The line can then be
+addressed as @samp{'x} (i.e., a single quote followed by @samp{x}) in
+subsequent commands. The mark is not cleared until the line is deleted
+or otherwise modified.
+
+@item (.,.)l
+Prints the addressed lines unambiguously. The end of each line is marked
+with a @samp{$}, and every @samp{$} character within the text is printed
+with a preceding backslash. The current address is set to the last line
+printed.
+
+@item (.,.)m(.)
+Moves lines in the buffer. The addressed lines are moved to after the
+right-hand destination address, which may be the address @samp{0}
+(zero). The current address is set to the new address of the last line
+moved.
+
+@item (.,.)n
+Prints the addressed lines, preceding each line by its line number and a
+@key{tab}. The current address is set to the last line printed.
+
+@item (.,.)p
+Prints the addressed lines. The current address is set to the last line
+printed.
+
+@item P
+Toggles the command prompt on and off. Unless a prompt is specified with
+command-line option @samp{-p}, the command prompt is by default turned
+off.
+
+@item q
+Quits @command{ed}.
+
+@item Q
+Quits @command{ed} unconditionally. This is similar to the @code{q}
+command, except that unwritten changes are discarded without warning.
+
+@item ($)r @var{file}
+Reads @var{file} to after the addressed line. If @var{file} is not
+specified, then the default filename is used. If there is no default
+filename prior to the command, then the default filename is set to
+@var{file}. Otherwise, the default filename is unchanged. The current
+address is set to the last line read.
+
+@item ($)r !@var{command}
+Reads to after the addressed line the standard output of
+@samp{!command}, (see the @samp{!} command below). The default filename
+is unchanged. The current address is set to the last line read.
+
+@item (.,.)s /@var{re}/@var{replacement}/
+@itemx (.,.)s /@var{re}/@var{replacement}/g
+@itemx (.,.)s /@var{re}/@var{replacement}/@var{n}
+Replaces text in the addressed lines matching a regular expression
+@var{re} with @var{replacement}. By default, only the first match in
+each line is replaced. If the @samp{g} (global) suffix is given, then
+every match is replaced. The @var{n} suffix, where @var{n} is a postive
+number, causes only the @var{n}th match to be replaced. It is an error
+if no substitutions are performed on any of the addressed lines. The
+current address is set to the last line affected.
+
+@var{re} and @var{replacement} may be delimited by any character other
+than @key{space}, @key{newline} and the characters used by the form of
+the @samp{s} command shown below. If one or two of the last delimiters
+is omitted, then the last line affected is printed as if the print
+suffix @samp{p} were specified.
+
+An unescaped @samp{&} in @var{replacement} is replaced by the currently
+matched text. The character sequence @samp{\@var{m}} where @var{m} is a
+number in the range [1,9], is replaced by the @var{m}th backreference
+expression of the matched text. If @var{replacement} consists of a
+single @samp{%}, then @var{replacement} from the last substitution is
+used. Newlines may be embedded in @var{replacement} if they are escaped
+with a backslash (@samp{\}).
+
+@item (.,.)s
+Repeats the last substitution. This form of the @samp{s} command accepts
+a count suffix @var{n}, and any combination of the characters @samp{r},
+@samp{g}, and @samp{p}. If a count suffix @var{n} is given, then only
+the @var{n}th match is replaced. The @samp{r} suffix causes the regular
+expression of the last search to be used instead of the that of the last
+substitution. The @samp{g} suffix toggles the global suffix of the last
+substitution. The @samp{p} suffix toggles the print suffix of the last
+substitution. The current address is set to the last line affected.
+
+@item (.,.)t(.)
+Copies (i.e., transfers) the addressed lines to after the right-hand
+destination address, which may be the address @samp{0} (zero). The
+current address is set to the last line copied.
+
+@item u
+Undoes the last command and restores the current address to what it was
+before the command. The global commands @samp{g}, @samp{G}, @samp{v},
+and @samp{V} are treated as a single command by undo. @samp{u} is its
+own inverse.
+
+@item (1,$)v /@var{re}/@var{command-list}
+This is similar to the @samp{g} command except that it applies
+@var{command-list} to each of the addressed lines not matching the
+regular expression @var{re}.
+
+@item (1,$)V /@var{re}/
+This is similar to the @samp{G} command except that it interactively
+edits the addressed lines not matching the regular expression @var{re}.
+
+@item (1,$)w @var{file}
+Writes the addressed lines to @var{file}. Any previous contents of
+@var{file} is lost without warning. If there is no default filename,
+then the default filename is set to @var{file}, otherwise it is
+unchanged. If no filename is specified, then the default filename is
+used. The current address is unchanged.
+
+@item (1,$)w !@var{command}
+Writes the addressed lines to the standard input of
+@samp{!@var{command}}, (see the @samp{!} command below). The default
+filename and current address are unchanged.
+
+@item (1,$)wq @var{file}
+Writes the addressed lines to @var{file}, and then executes a @samp{q}
+command.
+
+@item (1,$)W @var{file}
+Appends the addressed lines to the end of @var{file}. This is similar to
+the @samp{w} command, expect that the previous contents of file is not
+clobbered. The current address is unchanged.
+
+@item (.)x
+Copies (puts) the contents of the cut buffer to after the addressed
+line. The current address is set to the last line copied.
+
+@item (.,.)y
+Copies (yanks) the addressed lines to the cut buffer. The cut buffer is
+overwritten by subsequent @samp{y}, @samp{s}, @samp{j}, @samp{d}, or
+@samp{c} commands. The current address is unchanged.
+
+@item (.+1)z @var{n}
+Scrolls @var{n} lines at a time starting at addressed line. If @var{n}
+is not specified, then the current window size is used. The current
+address is set to the last line printed.
+
+@item !@var{command}
+Executes @var{command} via @command{sh (1)}. If the first character of
+@var{command} is @samp{!}, then it is replaced by text of the previous
+@samp{!@var{command}}. @command{ed} does not process @var{command} for
+backslash (@samp{\}) escapes. However, an unescaped @samp{%} is replaced
+by the default filename. When the shell returns from execution, a
+@samp{!} is printed to the standard output. The current line is
+unchanged.
+
+@item (.,.)#
+Begins a comment; the rest of the line, up to a newline, is ignored. If
+a line address followed by a semicolon is given, then the current
+address is set to that address. Otherwise, the current address is
+unchanged.
+
+@item ($)=
+Prints the line number of the addressed line.
+
+@item (.+1)@key{newline}
+An address alone prints the addressed line. A @key{newline} alone is
+equivalent to @samp{+1p}. the current address is set to the address of
+the printed line.
+
+@end table
+
+
+@node Limitations
+@chapter Limitations
+
+If the terminal hangs up, @command{ed} attempts to write the buffer to
+file @file{ed.hup}.
+
+@command{ed} processes @var{file} arguments for backslash escapes, i.e.,
+in a filename, any characters preceded by a backslash (@samp{\}) are
+interpreted literally.
+
+If a text (non-binary) file is not terminated by a newline character,
+then @command{ed} appends one on reading/writing it. In the case of a
+binary file, @command{ed} does not append a newline on reading/writing.
+
+Per line overhead: 4 @code{int}s.
+
+
+@node Diagnostics
+@chapter Diagnostics
+
+When an error occurs, if @command{ed}'s input is from a regular file or
+here document, then it exits, otherwise it prints a @samp{?} and returns
+to command mode. An explanation of the last error can be printed with
+the @samp{h} (help) command.
+
+If the @samp{u} (undo) command occurs in a global command list, then the
+command list is executed only once.
+
+Attempting to quit @command{ed} or edit another file before writing a
+modified buffer results in an error. If the command is entered a second
+time, it succeeds, but any changes to the buffer are lost.
+
+@command{ed} exits with 0 if no errors occurred; otherwise >0.
+
+
+@node Problems
+@chapter Reporting Bugs
+
+There are probably bugs in @command{ed}. There are certainly errors and
+omissions in this manual. If you report them, they will get fixed. If
+you don't, no one will ever know about them and they will remain unfixed
+for all eternity, if not longer.
+
+If you find a bug in @command{ed}, please send electronic mail to
+@email{bug-ed@@gnu.org}. Include the version number, which you can
+find by running @w{@samp{@command{ed} --version}}.
+
+
+@node GNU Free Documentation License
+@chapter GNU Free Documentation License
+@include fdl.texinfo
+
+@bye
diff --git a/doc/fdl.texinfo b/doc/fdl.texinfo
new file mode 100644
index 0000000..8805f1a
--- /dev/null
+++ b/doc/fdl.texinfo
@@ -0,0 +1,506 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+