-\input texinfo
-@c %**start of header
-@setfilename regex.info
-@settitle Regex
-@c %**end of header
-
-@c \\{fill-paragraph} works better (for me, anyway) if the text in the
-@c source file isn't indented.
-@paragraphindent 2
-
-@c Define a new index for our magic constants.
-@defcodeindex cn
-
-@c Put everything in one index (arbitrarily chosen to be the concept index).
-@syncodeindex cn cp
-@syncodeindex ky cp
-@syncodeindex pg cp
-@syncodeindex tp cp
-@syncodeindex vr cp
-
-@c Here is what we use in the Info `dir' file:
-@c * Regex: (regex). Regular expression library.
-
-
-@ifinfo
-This file documents the GNU regular expression library.
-
-Copyright (C) 1992, 1993 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries a copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-@end ignore
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-section entitled ``GNU General Public License'' is included exactly as
-in the original, and provided that the entire resulting derived work is
-distributed under the terms of a permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the section entitled ``GNU General Public License'' may be
-included in a translation approved by the Free Software Foundation
-instead of in the original English.
-@end ifinfo
-
-
-@titlepage
-
-@title Regex
-@subtitle edition 0.12a
-@subtitle 19 September 1992
-@author Kathryn A. Hargreaves
-@author Karl Berry
-
-@page
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1992 Free Software Foundation.
-
-Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-section entitled ``GNU General Public License'' is included exactly as
-in the original, and provided that the entire resulting derived work is
-distributed under the terms of a permission notice identical to this
-one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the section entitled ``GNU General Public License'' may be
-included in a translation approved by the Free Software Foundation
-instead of in the original English.
-
-@end titlepage
-
-
-@ifinfo
-@node Top, Overview, (dir), (dir)
-@top Regular Expression Library
-
-This manual documents how to program with the GNU regular expression
-library. This is edition 0.12a of the manual, 19 September 1992.
-
-The first part of this master menu lists the major nodes in this Info
-document, including the index. The rest of the menu lists all the
-lower level nodes in the document.
-
-@menu
-* Overview::
-* Regular Expression Syntax::
-* Common Operators::
-* GNU Operators::
-* GNU Emacs Operators::
-* What Gets Matched?::
-* Programming with Regex::
-* Copying:: Copying and sharing Regex.
-* Index:: General index.
- --- The Detailed Node Listing ---
-
-Regular Expression Syntax
-
-* Syntax Bits::
-* Predefined Syntaxes::
-* Collating Elements vs. Characters::
-* The Backslash Character::
-
-Common Operators
-
-* Match-self Operator:: Ordinary characters.
-* Match-any-character Operator:: .
-* Concatenation Operator:: Juxtaposition.
-* Repetition Operators:: * + ? @{@}
-* Alternation Operator:: |
-* List Operators:: [...] [^...]
-* Grouping Operators:: (...)
-* Back-reference Operator:: \digit
-* Anchoring Operators:: ^ $
-
-Repetition Operators
-
-* Match-zero-or-more Operator:: *
-* Match-one-or-more Operator:: +
-* Match-zero-or-one Operator:: ?
-* Interval Operators:: @{@}
-
-List Operators (@code{[} @dots{} @code{]} and @code{[^} @dots{} @code{]})
-
-* Character Class Operators:: [:class:]
-* Range Operator:: start-end
-
-Anchoring Operators
-
-* Match-beginning-of-line Operator:: ^
-* Match-end-of-line Operator:: $
-
-GNU Operators
-
-* Word Operators::
-* Buffer Operators::
-
-Word Operators
-
-* Non-Emacs Syntax Tables::
-* Match-word-boundary Operator:: \b
-* Match-within-word Operator:: \B
-* Match-beginning-of-word Operator:: \<
-* Match-end-of-word Operator:: \>
-* Match-word-constituent Operator:: \w
-* Match-non-word-constituent Operator:: \W
-
-Buffer Operators
-
-* Match-beginning-of-buffer Operator:: \`
-* Match-end-of-buffer Operator:: \'
-
-GNU Emacs Operators
-
-* Syntactic Class Operators::
-
-Syntactic Class Operators
-
-* Emacs Syntax Tables::
-* Match-syntactic-class Operator:: \sCLASS
-* Match-not-syntactic-class Operator:: \SCLASS
-
-Programming with Regex
-
-* GNU Regex Functions::
-* POSIX Regex Functions::
-* BSD Regex Functions::
-
-GNU Regex Functions
-
-* GNU Pattern Buffers:: The re_pattern_buffer type.
-* GNU Regular Expression Compiling:: re_compile_pattern ()
-* GNU Matching:: re_match ()
-* GNU Searching:: re_search ()
-* Matching/Searching with Split Data:: re_match_2 (), re_search_2 ()
-* Searching with Fastmaps:: re_compile_fastmap ()
-* GNU Translate Tables:: The `translate' field.
-* Using Registers:: The re_registers type and related fns.
-* Freeing GNU Pattern Buffers:: regfree ()
-
-POSIX Regex Functions
-
-* POSIX Pattern Buffers:: The regex_t type.
-* POSIX Regular Expression Compiling:: regcomp ()
-* POSIX Matching:: regexec ()
-* Reporting Errors:: regerror ()
-* Using Byte Offsets:: The regmatch_t type.
-* Freeing POSIX Pattern Buffers:: regfree ()
-
-BSD Regex Functions
-
-* BSD Regular Expression Compiling:: re_comp ()
-* BSD Searching:: re_exec ()
-@end menu
-@end ifinfo
-@node Overview, Regular Expression Syntax, Top, Top
+@node Overview
@chapter Overview
A @dfn{regular expression} (or @dfn{regexp}, or @dfn{pattern}) is a text
particular program understands.
-@node Regular Expression Syntax, Common Operators, Overview, Top
+@node Regular Expression Syntax
@chapter Regular Expression Syntax
@cindex regular expressions, syntax of
@end menu
-@node Syntax Bits, Predefined Syntaxes, , Regular Expression Syntax
+@node Syntax Bits
@section Syntax Bits
@cindex syntax bits
@end table
-@node Predefined Syntaxes, Collating Elements vs. Characters, Syntax Bits, Regular Expression Syntax
+@node Predefined Syntaxes
@section Predefined Syntaxes
If you're programming with Regex, you can set a pattern buffer's
| RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
@end example
-@node Collating Elements vs. Characters, The Backslash Character, Predefined Syntaxes, Regular Expression Syntax
+@node Collating Elements vs. Characters
@section Collating Elements vs.@: Characters
@sc{posix} generalizes the notion of a character to that of a
Since @sc{posix}'s ``collating element'' preserves the essential idea of
a ``character,'' we use the latter, more familiar, term in this document.
-@node The Backslash Character, , Collating Elements vs. Characters, Regular Expression Syntax
+@node The Backslash Character
@section The Backslash Character
@cindex \
@end enumerate
-@node Common Operators, GNU Operators, Regular Expression Syntax, Top
+@node Common Operators
@chapter Common Operators
You compose regular expressions from operators. In the following
* Anchoring Operators:: ^ $
@end menu
-@node Match-self Operator, Match-any-character Operator, , Common Operators
+@node Match-self Operator
@section The Match-self Operator (@var{ordinary character})
This operator matches the character itself. All ordinary characters
expression @samp{f} matches only the string @samp{f}. In
particular, it does @emph{not} match the string @samp{ff}.
-@node Match-any-character Operator, Concatenation Operator, Match-self Operator, Common Operators
+@node Match-any-character Operator
@section The Match-any-character Operator (@code{.})
@cindex @samp{.}
@samp{a.b} matches any three-character string beginning with @samp{a}
and ending with @samp{b}.
-@node Concatenation Operator, Repetition Operators, Match-any-character Operator, Common Operators
+@node Concatenation Operator
@section The Concatenation Operator
This operator concatenates two regular expressions @var{a} and @var{b}.
@var{a} matches its first part and @var{b} matches the rest. For
example, @samp{xy} (two match-self operators) matches @samp{xy}.
-@node Repetition Operators, Alternation Operator, Concatenation Operator, Common Operators
+@node Repetition Operators
@section Repetition Operators
Repetition operators repeat the preceding regular expression a specified
* Interval Operators:: @{@}
@end menu
-@node Match-zero-or-more Operator, Match-one-or-more Operator, , Repetition Operators
+@node Match-zero-or-more Operator
@subsection The Match-zero-or-more Operator (@code{*})
@cindex @samp{*}
in the string. It can then match the remaining @samp{ar}.
-@node Match-one-or-more Operator, Match-zero-or-one Operator, Match-zero-or-more Operator, Repetition Operators
+@node Match-one-or-more Operator
@subsection The Match-one-or-more Operator (@code{+} or @code{\+})
@cindex @samp{+}
operator; then @samp{ca+r} matches, e.g., @samp{car} and
@samp{caaaar}, but not @samp{cr}.
-@node Match-zero-or-one Operator, Interval Operators, Match-one-or-more Operator, Repetition Operators
+@node Match-zero-or-one Operator
@subsection The Match-zero-or-one Operator (@code{?} or @code{\?})
@cindex @samp{?}
operator; then @samp{ca?r} matches both @samp{car} and @samp{cr}, but
nothing else.
-@node Interval Operators, , Match-zero-or-one Operator, Repetition Operators
+@node Interval Operators
@subsection Interval Operators (@code{@{} @dots{} @code{@}} or @code{\@{} @dots{} @code{\@}})
@cindex interval expression
ordinary.
-@node Alternation Operator, List Operators, Repetition Operators, Common Operators
+@node Alternation Operator
@section The Alternation Operator (@code{|} or @code{\|})
@kindex |
@comment xx something about leftmost-longest
-@node List Operators, Grouping Operators, Alternation Operator, Common Operators
+@node List Operators
@section List Operators (@code{[} @dots{} @code{]} and @code{[^} @dots{} @code{]})
@cindex matching list
@end ignore
-@node Character Class Operators, Range Operator, , List Operators
+@node Character Class Operators
@subsection Character Class Operators (@code{[:} @dots{} @code{:]})
@cindex character classes
@samp{[:alpha:]} outside of a bracket expression and not followed by a
repetition operator matches just itself.
-@node Range Operator, , Character Class Operators, List Operators
+@node Range Operator
@subsection The Range Operator (@code{-})
Regex recognizes @dfn{range expressions} inside a list. They represent
English, in @sc{ascii}).
-@node Grouping Operators, Back-reference Operator, List Operators, Common Operators
+@node Grouping Operators
@section Grouping Operators (@code{(} @dots{} @code{)} or @code{\(} @dots{} @code{\)})
@kindex (
considers it to match @samp{)}.
-@node Back-reference Operator, Anchoring Operators, Grouping Operators, Common Operators
+@node Back-reference Operator
@section The Back-reference Operator (@dfn{\}@var{digit})
@cindex back references
expression is invalid.
-@node Anchoring Operators, , Back-reference Operator, Common Operators
+@node Anchoring Operators
@section Anchoring Operators
@cindex anchoring
@end menu
-@node Match-beginning-of-line Operator, Match-end-of-line Operator, , Anchoring Operators
+@node Match-beginning-of-line Operator
@subsection The Match-beginning-of-line Operator (@code{^})
@kindex ^
regard the string to be matched as broken into lines.
-@node Match-end-of-line Operator, , Match-beginning-of-line Operator, Anchoring Operators
+@node Match-end-of-line Operator
@subsection The Match-end-of-line Operator (@code{$})
@kindex $
``after'' becomes ``before''.)
-@node GNU Operators, GNU Emacs Operators, Common Operators, Top
+@node GNU Operators
@chapter GNU Operators
Following are operators that @sc{gnu} defines (and @sc{posix} doesn't).
* Buffer Operators::
@end menu
-@node Word Operators, Buffer Operators, , GNU Operators
+@node Word Operators
@section Word Operators
The operators in this section require Regex to recognize parts of words.
* Match-non-word-constituent Operator:: \W
@end menu
-@node Non-Emacs Syntax Tables, Match-word-boundary Operator, , Word Operators
+@node Non-Emacs Syntax Tables
@subsection Non-Emacs Syntax Tables
A @dfn{syntax table} is an array indexed by the characters in your
@end itemize
-@node Match-word-boundary Operator, Match-within-word Operator, Non-Emacs Syntax Tables, Word Operators
+@node Match-word-boundary Operator
@subsection The Match-word-boundary Operator (@code{\b})
@cindex @samp{\b}
either the beginning or the end of a word. For example, @samp{\brat\b}
matches the separate word @samp{rat}.
-@node Match-within-word Operator, Match-beginning-of-word Operator, Match-word-boundary Operator, Word Operators
+@node Match-within-word Operator
@subsection The Match-within-word Operator (@code{\B})
@cindex @samp{\B}
a word. For example, @samp{c\Brat\Be} matches @samp{crate}, but
@samp{dirty \Brat} doesn't match @samp{dirty rat}.
-@node Match-beginning-of-word Operator, Match-end-of-word Operator, Match-within-word Operator, Word Operators
+@node Match-beginning-of-word Operator
@subsection The Match-beginning-of-word Operator (@code{\<})
@cindex @samp{\<}
This operator (represented by @samp{\<}) matches the empty string at the
beginning of a word.
-@node Match-end-of-word Operator, Match-word-constituent Operator, Match-beginning-of-word Operator, Word Operators
+@node Match-end-of-word Operator
@subsection The Match-end-of-word Operator (@code{\>})
@cindex @samp{\>}
This operator (represented by @samp{\>}) matches the empty string at the
end of a word.
-@node Match-word-constituent Operator, Match-non-word-constituent Operator, Match-end-of-word Operator, Word Operators
+@node Match-word-constituent Operator
@subsection The Match-word-constituent Operator (@code{\w})
@cindex @samp{\w}
This operator (represented by @samp{\w}) matches any word-constituent
character.
-@node Match-non-word-constituent Operator, , Match-word-constituent Operator, Word Operators
+@node Match-non-word-constituent Operator
@subsection The Match-non-word-constituent Operator (@code{\W})
@cindex @samp{\W}
not word-constituent.
-@node Buffer Operators, , Word Operators, GNU Operators
+@node Buffer Operators
@section Buffer Operators
Following are operators which work on buffers. In Emacs, a @dfn{buffer}
@end menu
-@node Match-beginning-of-buffer Operator, Match-end-of-buffer Operator, , Buffer Operators
+@node Match-beginning-of-buffer Operator
@subsection The Match-beginning-of-buffer Operator (@code{\`})
@cindex @samp{\`}
This operator (represented by @samp{\`}) matches the empty string at the
beginning of the buffer.
-@node Match-end-of-buffer Operator, , Match-beginning-of-buffer Operator, Buffer Operators
+@node Match-end-of-buffer Operator
@subsection The Match-end-of-buffer Operator (@code{\'})
@cindex @samp{\'}
end of the buffer.
-@node GNU Emacs Operators, What Gets Matched?, GNU Operators, Top
+@node GNU Emacs Operators
@chapter GNU Emacs Operators
Following are operators that @sc{gnu} defines (and @sc{posix} doesn't)
@end menu
-@node Syntactic Class Operators, , , GNU Emacs Operators
+@node Syntactic Class Operators
@section Syntactic Class Operators
The operators in this section require Regex to recognize the syntactic
* Match-not-syntactic-class Operator:: \SCLASS
@end menu
-@node Emacs Syntax Tables, Match-syntactic-class Operator, , Syntactic Class Operators
+@node Emacs Syntax Tables
@subsection Emacs Syntax Tables
A @dfn{syntax table} is an array indexed by the characters in your
Tables}). @xref{Syntax, , Syntax, emacs, The GNU Emacs User's Manual},
for a description of Emacs' syntax tables.
-@node Match-syntactic-class Operator, Match-not-syntactic-class Operator, Emacs Syntax Tables, Syntactic Class Operators
+@node Match-syntactic-class Operator
@subsection The Match-syntactic-class Operator (@code{\s}@var{class})
@cindex @samp{\s}
class of word-constituent characters, so @samp{\sw} matches any
word-constituent character.
-@node Match-not-syntactic-class Operator, , Match-syntactic-class Operator, Syntactic Class Operators
+@node Match-not-syntactic-class Operator
@subsection The Match-not-syntactic-class Operator (@code{\S}@var{class})
@cindex @samp{\S}
not word-constituent.
-@node What Gets Matched?, Programming with Regex, GNU Emacs Operators, Top
+@node What Gets Matched?
@chapter What Gets Matched?
Regex usually matches strings according to the ``leftmost longest''
first subexpression.
-@node Programming with Regex, Copying, What Gets Matched?, Top
+@node Programming with Regex
@chapter Programming with Regex
Here we describe how you use the Regex data structures and functions in
@end menu
-@node GNU Regex Functions, POSIX Regex Functions, , Programming with Regex
+@node GNU Regex Functions
@section GNU Regex Functions
If you're writing code that doesn't need to be compatible with either
@end menu
-@node GNU Pattern Buffers, GNU Regular Expression Compiling, , GNU Regex Functions
+@node GNU Pattern Buffers
@subsection GNU Pattern Buffers
@cindex pattern buffer, definition of
@end example
-@node GNU Regular Expression Compiling, GNU Matching, GNU Pattern Buffers, GNU Regex Functions
+@node GNU Regular Expression Compiling
@subsection GNU Regular Expression Compiling
In @sc{gnu}, you can both match and search for a given regular
Regular Expression Compiling}.
-@node GNU Matching, GNU Searching, GNU Regular Expression Compiling, GNU Regex Functions
+@node GNU Matching
@subsection GNU Matching
@cindex matching with GNU functions
@code{re_match} returns @math{-1}.
-@node GNU Searching, Matching/Searching with Split Data, GNU Matching, GNU Regex Functions
+@node GNU Searching
@subsection GNU Searching
@cindex searching with GNU functions
internal error happens, it returns @math{-2}.
-@node Matching/Searching with Split Data, Searching with Fastmaps, GNU Searching, GNU Regex Functions
+@node Matching/Searching with Split Data
@subsection Matching and Searching with Split Data
Using the functions @code{re_match_2} and @code{re_search_2}, you can
is similarly related to @code{re_search}.
-@node Searching with Fastmaps, GNU Translate Tables, Matching/Searching with Split Data, GNU Regex Functions
+@node Searching with Fastmaps
@subsection Searching with Fastmaps
@cindex fastmaps
@code{fastmap} is null or, if it isn't, compile a new fastmap for the
new pattern.
-@node GNU Translate Tables, Using Registers, Searching with Fastmaps, GNU Regex Functions
+@node GNU Translate Tables
@subsection GNU Translate Tables
If you set the @code{translate} field of a pattern buffer to a translate
anytime between compiling the pattern buffer, compiling its fastmap, and
matching or searching with the pattern buffer.
-@node Using Registers, Freeing GNU Pattern Buffers, GNU Translate Tables, GNU Regex Functions
+@node Using Registers
@subsection Using Registers
A group in a regular expression can match a (posssibly empty) substring
@end itemize
-@node Freeing GNU Pattern Buffers, , Using Registers, GNU Regex Functions
+@node Freeing GNU Pattern Buffers
@subsection Freeing GNU Pattern Buffers
To free any allocated fields of a pattern buffer, you can use the
a matching or searching function.
-@node POSIX Regex Functions, BSD Regex Functions, GNU Regex Functions, Programming with Regex
+@node POSIX Regex Functions
@section POSIX Regex Functions
If you're writing code that has to be @sc{posix} compatible, you'll need
@end menu
-@node POSIX Pattern Buffers, POSIX Regular Expression Compiling, , POSIX Regex Functions
+@node POSIX Pattern Buffers
@subsection POSIX Pattern Buffers
To compile or match a given regular expression the @sc{posix} way, you
type @code{re_pattern_buffer}.
-@node POSIX Regular Expression Compiling, POSIX Matching, POSIX Pattern Buffers, POSIX Regex Functions
+@node POSIX Regular Expression Compiling
@subsection POSIX Regular Expression Compiling
With @sc{posix}, you can only search for a given regular expression; you
@end table
-@node POSIX Matching, Reporting Errors, POSIX Regular Expression Compiling, POSIX Regex Functions
+@node POSIX Matching
@subsection POSIX Matching
Matching the @sc{posix} way means trying to match a null-terminated
function returns zero if the compiled pattern matches @var{string} and
@code{REG_NOMATCH} (defined in @file{regex.h}) if it doesn't.
-@node Reporting Errors, Using Byte Offsets, POSIX Matching, POSIX Regex Functions
+@node Reporting Errors
@subsection Reporting Errors
If either @code{regcomp} or @code{regexec} fail, they return a nonzero
@var{errbuf_size} to determine how large @var{errbuf} need be to
accommodate @code{regerror}'s error string.
-@node Using Byte Offsets, Freeing POSIX Pattern Buffers, Reporting Errors, POSIX Regex Functions
+@node Using Byte Offsets
@subsection Using Byte Offsets
In @sc{posix}, variables of type @code{regmatch_t} hold analogous
@code{@w{@var{pmatch}[@var{i}]->}rm_eo} for
@code{@w{@var{regs}->}end[@var{i}]}.
-@node Freeing POSIX Pattern Buffers, , Using Byte Offsets, POSIX Regex Functions
+@node Freeing POSIX Pattern Buffers
@subsection Freeing POSIX Pattern Buffers
To free any allocated fields of a pattern buffer, use:
Matching}).
-@node BSD Regex Functions, , POSIX Regex Functions, Programming with Regex
+@node BSD Regex Functions
@section BSD Regex Functions
If you're writing code that has to be Berkeley @sc{unix} compatible,
* BSD Searching:: re_exec ()
@end menu
-@node BSD Regular Expression Compiling, BSD Searching, , BSD Regex Functions
+@node BSD Regular Expression Compiling
@subsection BSD Regular Expression Compiling
With Berkeley @sc{unix}, you can only search for a given regular
of @code{re_compile_pattern} (@pxref{GNU Regular Expression
Compiling}).
-@node BSD Searching, , BSD Regular Expression Compiling, BSD Regex Functions
+@node BSD Searching
@subsection BSD Searching
Searching the Berkeley @sc{unix} way means searching in a string
@code{re_exec} returns either 1 for success or 0 for failure. It
automatically uses a @sc{gnu} fastmap (@pxref{Searching with Fastmaps}).
-
-
-@node Copying, Index, Programming with Regex, Top
-@appendix GNU GENERAL PUBLIC LICENSE
-@center Version 2, June 1991
-
-@display
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-675 Mass Ave, Cambridge, MA 02139, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-@end display
-
-@unnumberedsec Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software---to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
-@iftex
-@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end iftex
-@ifinfo
-@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end ifinfo
-
-@enumerate
-@item
-This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The ``Program'', below,
-refers to any such program or work, and a ``work based on the Program''
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term ``modification''.) Each licensee is addressed as ``you''.
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-@item
-You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-@item
-You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-@enumerate a
-@item
-You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
-
-@item
-You must cause any work that you distribute or publish, that in
-whole or in part contains or is derived from the Program or any
-part thereof, to be licensed as a whole at no charge to all third
-parties under the terms of this License.
-
-@item
-If the modified program normally reads commands interactively
-when run, you must cause it, when started running for such
-interactive use in the most ordinary way, to print or display an
-announcement including an appropriate copyright notice and a
-notice that there is no warranty (or else, saying that you provide
-a warranty) and that users may redistribute the program under
-these conditions, and telling the user how to view a copy of this
-License. (Exception: if the Program itself is interactive but
-does not normally print such an announcement, your work based on
-the Program is not required to print an announcement.)
-@end enumerate
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-@item
-You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-@enumerate a
-@item
-Accompany it with the complete corresponding machine-readable
-source code, which must be distributed under the terms of Sections
-1 and 2 above on a medium customarily used for software interchange; or,
-
-@item
-Accompany it with a written offer, valid for at least three
-years, to give any third party, for a charge no more than your
-cost of physically performing source distribution, a complete
-machine-readable copy of the corresponding source code, to be
-distributed under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
-
-@item
-Accompany it with the information you received as to the offer
-to distribute corresponding source code. (This alternative is
-allowed only for noncommercial distribution and only if you
-received the program in object code or executable form with such
-an offer, in accord with Subsection b above.)
-@end enumerate
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-@item
-You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-@item
-You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-@item
-Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-@item
-If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-@item
-If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-@item
-The Free Software Foundation may publish revised and/or new versions
-of the General Public 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.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and ``any
-later version'', you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-@item
-If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-@iftex
-@heading NO WARRANTY
-@end iftex
-@ifinfo
-@center NO WARRANTY
-@end ifinfo
-
-@item
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-@item
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-@end enumerate
-
-@iftex
-@heading END OF TERMS AND CONDITIONS
-@end iftex
-@ifinfo
-@center END OF TERMS AND CONDITIONS
-@end ifinfo
-
-@page
-@unnumberedsec Appendix: How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the ``copyright'' line and a pointer to where the full notice is found.
-
-@smallexample
-@var{one line to give the program's name and a brief idea of what it does.}
-Copyright (C) 19@var{yy} @var{name of author}
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-@end smallexample
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-@smallexample
-Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-This is free software, and you are welcome to redistribute it
-under certain conditions; type `show c' for details.
-@end smallexample
-
-The hypothetical commands @samp{show w} and @samp{show c} should show
-the appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than @samp{show w} and
-@samp{show c}; they could even be mouse-clicks or menu items---whatever
-suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a ``copyright disclaimer'' for the program, if
-necessary. Here is a sample; alter the names:
-
-@example
-Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-`Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-@var{signature of Ty Coon}, 1 April 1989
-Ty Coon, President of Vice
-@end example
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-
-@node Index, , Copying, Top
-@unnumbered Index
-
-@printindex cp
-
-@contents
-
-@bye