summaryrefslogtreecommitdiffstats
path: root/contrib/less
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2009-05-08 23:34:35 +0000
committerdelphij <delphij@FreeBSD.org>2009-05-08 23:34:35 +0000
commitd069efd47cacc3156036ed37d5532d6a1d4f55c3 (patch)
tree2526f6b109843b646672c1537476dc51e56c0454 /contrib/less
parent6aa3e25391d160482339ee072c010bcd22dfbbd1 (diff)
downloadFreeBSD-src-d069efd47cacc3156036ed37d5532d6a1d4f55c3.zip
FreeBSD-src-d069efd47cacc3156036ed37d5532d6a1d4f55c3.tar.gz
Flatten all tags of the dist tree of less.
Diffstat (limited to 'contrib/less')
-rw-r--r--contrib/less/COPYING340
-rw-r--r--contrib/less/INSTALL186
-rw-r--r--contrib/less/LICENSE27
-rw-r--r--contrib/less/Makefile.aut122
-rw-r--r--contrib/less/Makefile.dsb50
-rw-r--r--contrib/less/Makefile.dsg91
-rw-r--r--contrib/less/Makefile.dsu58
-rw-r--r--contrib/less/Makefile.in120
-rw-r--r--contrib/less/Makefile.o2e42
-rw-r--r--contrib/less/Makefile.o9c46
-rw-r--r--contrib/less/Makefile.o9u42
-rw-r--r--contrib/less/Makefile.wnb70
-rw-r--r--contrib/less/Makefile.wnm55
-rw-r--r--contrib/less/NEWS712
-rw-r--r--contrib/less/README238
-rw-r--r--contrib/less/brac.c101
-rw-r--r--contrib/less/ch.c893
-rw-r--r--contrib/less/charset.c1167
-rw-r--r--contrib/less/charset.h19
-rw-r--r--contrib/less/cmd.h131
-rw-r--r--contrib/less/cmdbuf.c1484
-rw-r--r--contrib/less/command.c1678
-rwxr-xr-xcontrib/less/configure8523
-rw-r--r--contrib/less/configure.ac652
-rw-r--r--contrib/less/decode.c839
-rw-r--r--contrib/less/defines.ds400
-rw-r--r--contrib/less/defines.h.in420
-rw-r--r--contrib/less/defines.o2328
-rw-r--r--contrib/less/defines.o9340
-rw-r--r--contrib/less/defines.wn333
-rw-r--r--contrib/less/edit.c818
-rw-r--r--contrib/less/filename.c1048
-rw-r--r--contrib/less/forwback.c412
-rw-r--r--contrib/less/funcs.h270
-rw-r--r--contrib/less/help.c226
-rw-r--r--contrib/less/ifile.c346
-rw-r--r--contrib/less/input.c406
-rwxr-xr-xcontrib/less/install.sh119
-rw-r--r--contrib/less/jump.c299
-rw-r--r--contrib/less/less.h495
-rw-r--r--contrib/less/less.hlp221
-rw-r--r--contrib/less/less.man1559
-rw-r--r--contrib/less/less.nro1692
-rw-r--r--contrib/less/lessecho.c272
-rw-r--r--contrib/less/lessecho.man49
-rw-r--r--contrib/less/lessecho.nro47
-rw-r--r--contrib/less/lesskey.c871
-rw-r--r--contrib/less/lesskey.h40
-rw-r--r--contrib/less/lesskey.man360
-rw-r--r--contrib/less/lesskey.nro384
-rw-r--r--contrib/less/lglob.h95
-rw-r--r--contrib/less/line.c1245
-rw-r--r--contrib/less/linenum.c452
-rw-r--r--contrib/less/lsystem.c369
-rw-r--r--contrib/less/main.c413
-rw-r--r--contrib/less/mark.c258
-rw-r--r--contrib/less/mkfuncs.awk9
-rw-r--r--contrib/less/mkhelp.c69
-rwxr-xr-xcontrib/less/mkinstalldirs32
-rw-r--r--contrib/less/optfunc.c668
-rw-r--r--contrib/less/option.c700
-rw-r--r--contrib/less/option.h63
-rw-r--r--contrib/less/opttbl.c602
-rw-r--r--contrib/less/os.c355
-rw-r--r--contrib/less/output.c615
-rw-r--r--contrib/less/pckeys.h34
-rw-r--r--contrib/less/position.c232
-rw-r--r--contrib/less/position.h19
-rw-r--r--contrib/less/prompt.c584
-rw-r--r--contrib/less/regexp.c1250
-rw-r--r--contrib/less/regexp.h34
-rw-r--r--contrib/less/screen.c2471
-rw-r--r--contrib/less/scrsize.c104
-rw-r--r--contrib/less/search.c1551
-rw-r--r--contrib/less/signal.c274
-rw-r--r--contrib/less/tags.c757
-rw-r--r--contrib/less/ttyin.c178
-rw-r--r--contrib/less/version.c707
78 files changed, 0 insertions, 43581 deletions
diff --git a/contrib/less/COPYING b/contrib/less/COPYING
deleted file mode 100644
index d104746..0000000
--- a/contrib/less/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- 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.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. 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.
-
- 1. 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.
-
- 2. 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:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) 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.
-
- c) 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.)
-
-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.
-
- 3. 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:
-
- a) 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,
-
- b) 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,
-
- c) 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.)
-
-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.
-
- 4. 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.
-
- 5. 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.
-
- 6. 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.
-
- 7. 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.
-
- 8. 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.
-
- 9. 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.
-
- 10. 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.
-
- NO WARRANTY
-
- 11. 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.
-
- 12. 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 OF TERMS AND CONDITIONS
-
- 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.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-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:
-
- Gnomovision version 69, Copyright (C) year 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.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `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:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-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.
diff --git a/contrib/less/INSTALL b/contrib/less/INSTALL
deleted file mode 100644
index c2ab230..0000000
--- a/contrib/less/INSTALL
+++ /dev/null
@@ -1,186 +0,0 @@
- This file describes how to build and install less using
-the "configure" script. This only works on Unix systems.
-To install on other systems, read the README file.
-
-
-Basic Installation
-==================
-
- These are generic installation instructions.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
- The file `configure.in' is used to create `configure' by a program
-called `autoconf'. You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
- using `csh' on an old version of System V, you might need to type
- `sh ./configure' instead to prevent `csh' from trying to execute
- `configure' itself.
-
- Running `configure' takes awhile. While running, it prints some
- messages telling which features it is checking for.
-
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
-
- 4. Type `make install' to install the programs and any data files and
- documentation.
-
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
- a different kind of computer), type `make distclean'. There is
- also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
-Compilers and Options
-=====================
-
- Some systems require unusual options for compilation or linking that
-the `configure' script does not know about. You can give `configure'
-initial values for variables by setting them in the environment. Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
- CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-
-Or on systems that have the `env' program, you can do it like this:
- env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-
-Compiling For Multiple Architectures
-====================================
-
- You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'. `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script. `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
- If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory. After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
-
-Installation Names
-==================
-
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files. Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
- Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
- There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on. Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
- CPU-COMPANY-SYSTEM
-
-See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
- If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
-
-Sharing Defaults
-================
-
- If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists. Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Operation Controls
-==================
-
- `configure' recognizes the following options to control how it
-operates.
-
-`--cache-file=FILE'
- Use and save the results of the tests in FILE instead of
- `./config.cache'. Set FILE to `/dev/null' to disable caching, for
- debugging `configure'.
-
-`--help'
- Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
- Do not print messages saying which checks are being made.
-
-`--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- `configure' can determine that directory automatically.
-
-`--version'
- Print the version of Autoconf used to generate the `configure'
- script, and exit.
-
-`configure' also accepts some other, not widely useful, options.
-
diff --git a/contrib/less/LICENSE b/contrib/less/LICENSE
deleted file mode 100644
index 8112859..0000000
--- a/contrib/less/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
- Less License
- ------------
-
-Less
-Copyright (C) 1984-2007 Mark Nudelman
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice in the documentation and/or other materials provided with
- the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
-OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/contrib/less/Makefile.aut b/contrib/less/Makefile.aut
deleted file mode 100644
index b2497c0..0000000
--- a/contrib/less/Makefile.aut
+++ /dev/null
@@ -1,122 +0,0 @@
-# Makefile for authoring less.
-
-EMAIL = markn@greenwoodsoftware.com
-HOMEPAGE = http://www.greenwoodsoftware.com/less
-SHELL = /bin/sh
-RCS = rcs
-NROFF = nroff -man
-
-srcdir = .
-
-SRC = \
- main.c screen.c brac.c ch.c charset.c cmdbuf.c \
- command.c decode.c edit.c filename.c forwback.c \
- help.c ifile.c input.c jump.c line.c linenum.c \
- lsystem.c mark.c optfunc.c option.c opttbl.c os.c \
- output.c position.c prompt.c search.c signal.c \
- tags.c ttyin.c version.c
-DISTFILES_W = \
- defines.ds Makefile.dsb Makefile.dsg Makefile.dsu \
- defines.o2 Makefile.o2e \
- defines.o9 Makefile.o9c Makefile.o9u \
- defines.wn Makefile.wnm Makefile.wnb
-DISTFILES = \
- ${SRC} regexp.c regexp.h \
- COPYING INSTALL LICENSE Makefile.in Makefile.aut NEWS README \
- configure configure.ac lesskey.c lessecho.c scrsize.c \
- charset.h cmd.h funcs.h lglob.h less.h lesskey.h option.h pckeys.h position.h \
- install.sh defines.h.in mkinstalldirs \
- less.nro less.man lesskey.nro lesskey.man lessecho.nro lessecho.man \
- less.hlp \
- mkfuncs.awk mkhelp.c \
- ${DISTFILES_W}
-
-all: help.c funcs.h ${srcdir}/configure
-
-help.c: less.hlp mkhelp
- -mv -f ${srcdir}/help.c ${srcdir}/help.c.old
- rm -rf help.c
- ./mkhelp < less.hlp > help.c
- if cmp -s help.c help.c.old; then mv help.c.old help.c; fi
-
-mkhelp: mkhelp.c
- ${CC} -o mkhelp mkhelp.c
-
-${srcdir}/configure: ${srcdir}/configure.ac \
- ${srcdir}/Makefile.in
- cd ${srcdir}; autoheader; autoconf
-
-funcs.h: ${SRC:%=${srcdir}/%}
- -mv -f ${srcdir}/funcs.h ${srcdir}/funcs.h.old
- awk -f ${srcdir}/mkfuncs.awk ${SRC:%=${srcdir}/%} >${srcdir}/funcs.h
- if cmp -s funcs.h funcs.h.old; then mv funcs.h.old funcs.h; fi
-
-lint:
- lint -I. ${CPPFLAGS} ${SRC}
-
-clean:
- rm -f Makefile config.status config.log config.cache defines.h stamp-h \
- README NEWS \
- less.nro less.man lesskey.nro lesskey.man lessecho.nro lessecho.man
-
-distclean: clean
-realclean: clean
-
-REPLACE_VERSION = \
- @REL=`sed -e '/char version/!d' -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q ${srcdir}/version.c`; \
- DT=`date '+%d %h %Y'`; \
- echo "Stuffing version number $$REL into $@"; \
- sed \
- -e "s;@@VERSION@@;$$REL;" \
- -e "s;@@DATE@@;$$DT;" \
- -e "s;@@EMAIL@@;${EMAIL};" \
- -e "s;@@HOMEPAGE@@;${HOMEPAGE};" >$@
-
-${srcdir}/README: ${srcdir}/README.VER ${srcdir}/version.c
- ${REPLACE_VERSION} ${srcdir}/README.VER
-${srcdir}/NEWS: ${srcdir}/NEWS.VER ${srcdir}/version.c
- ${REPLACE_VERSION} ${srcdir}/NEWS.VER
-${srcdir}/less.nro: ${srcdir}/less.nro.VER ${srcdir}/version.c
- ${REPLACE_VERSION} ${srcdir}/less.nro.VER
-${srcdir}/lesskey.nro: ${srcdir}/lesskey.nro.VER ${srcdir}/version.c
- ${REPLACE_VERSION} ${srcdir}/lesskey.nro.VER
-${srcdir}/lessecho.nro: ${srcdir}/lessecho.nro.VER ${srcdir}/version.c
- ${REPLACE_VERSION} ${srcdir}/lessecho.nro.VER
-${srcdir}/less.hlp: ${srcdir}/less.hlp.VER ${srcdir}/version.c
- ${REPLACE_VERSION} ${srcdir}/less.hlp.VER
-
-${srcdir}/less.man: ${srcdir}/less.nro
- ${NROFF} ${srcdir}/less.nro >${srcdir}/less.man
-${srcdir}/lesskey.man: ${srcdir}/lesskey.nro
- ${NROFF} ${srcdir}/lesskey.nro >${srcdir}/lesskey.man
-${srcdir}/lessecho.man: ${srcdir}/lessecho.nro
- ${NROFF} ${srcdir}/lessecho.nro >${srcdir}/lessecho.man
-
-
-distfiles: ${DISTFILES}
-
-dist: ${DISTFILES}
- if [ ! -d ${srcdir}/release ]; then mkdir ${srcdir}/release; fi
- @cd ${srcdir}; \
- REL=`sed -e '/char version/!d' -e 's/[^0-9.]*\([0-9.]*\).*/less-\1/' -e q version.c`; \
- rm -rf release/$$REL; mkdir release/$$REL; \
- echo "Preparing $$REL"; \
- rm -rf $$REL; mkdir $$REL; \
- for file in ${DISTFILES}; do \
- cp -p $$file $$REL; \
- chmod -w $$REL/$$file; \
- done; \
- cd $$REL; chmod +w ${DISTFILES_W}; cd ..; \
- echo "Creating release/$$REL/$$REL.tar.gz"; \
- tar -cf - $$REL | gzip -c >release/$$REL/$$REL.tar.gz; \
- echo "Creating release/$$REL/$$REL.zip"; \
- zip -rq release/$$REL/$$REL.zip $$REL; \
- rm -rf $$REL
-
-tagall:
- @REL=`sed -e '/char version/!d' -e 's/[^0-9.]*\([0-9.]*\).*/v\1/' -e q ${srcdir}/version.c`; \
- echo "tagging $$REL"; \
- for f in ${srcdir}/RCS/*,v; do \
- REV=`co -p $$f 2>&1 | sed -e '1d' -e '3,$$d' -e 's/revision //'`; \
- ${RCS} -N$$REL:$$REV $$f; \
- done
diff --git a/contrib/less/Makefile.dsb b/contrib/less/Makefile.dsb
deleted file mode 100644
index f9fb0f5..0000000
--- a/contrib/less/Makefile.dsb
+++ /dev/null
@@ -1,50 +0,0 @@
-# Makefile for less.
-# MS-DOS version (Borland C/C++ 4.02)
-
-#### Start of system configuration section. ####
-
-CC = bcc
-LIBDIR = \bc\lib
-
-CFLAGS = -A- -mm -O2 -w- -1- -2- -a -d -Z
-LDFLAGS = -mm
-LIBS =
-EXT = .EXE
-
-#### End of system configuration section. ####
-
-# This rule allows us to supply the necessary -D options
-# in addition to whatever the user asks for.
-.c.obj:
- $(CC) -c -I. $(CPPFLAGS) $(CFLAGS) $<
-
-OBJ = main.obj screen.obj brac.obj ch.obj charset.obj cmdbuf.obj command.obj \
- decode.obj edit.obj filename.obj forwback.obj help.obj ifile.obj \
- input.obj jump.obj line.obj linenum.obj lsystem.obj \
- mark.obj optfunc.obj option.obj opttbl.obj os.obj output.obj \
- position.obj prompt.obj search.obj signal.obj tags.obj \
- ttyin.obj version.obj
-
-all: less$(EXT) lesskey$(EXT)
-
-# This is really horrible, but the command line is too long for
-# MS-DOS if we try to link $(OBJ).
-less$(EXT): $(OBJ)
- ren lesskey.obj lesskey.obo
- $(CC) $(LDFLAGS) -e$@ *.obj $(LIBS)
- ren lesskey.obo lesskey.obj
-
-lesskey$(EXT): lesskey.obj version.obj
- $(CC) $(LDFLAGS) -e$@ lesskey.obj version.obj $(LIBS)
-
-defines.h: defines.ds
- -del defines.h
- -copy defines.ds defines.h
-
-$(OBJ): less.h defines.h
-
-clean:
- -del *.obj
- -del less.exe
- -del lesskey.exe
-
diff --git a/contrib/less/Makefile.dsg b/contrib/less/Makefile.dsg
deleted file mode 100644
index 984589b..0000000
--- a/contrib/less/Makefile.dsg
+++ /dev/null
@@ -1,91 +0,0 @@
-# Makefile for less under DJGPP v2.0 or later.
-
-#### Start of system configuration section. ####
-
-srcdir = .
-VPATH = .
-
-CC = gcc
-INSTALL = ginstall -c
-INSTALL_PROGRAM = ginstall
-INSTALL_DATA = ginstall -m 644
-AWK = gawk
-
-CFLAGS = -O2 -g
-CFLAGS_COMPILE_ONLY = -c
-#LDFLAGS = -s
-LDFLAGS = -g
-O=o
-
-LIBS =
-prefix = /dev/env/DJDIR
-exec_prefix = ${prefix}
-
-bindir = ${exec_prefix}/bin
-sysconfdir = ${prefix}/etc
-mandir = ${prefix}/man
-manext = 1
-
-#### End of system configuration section. ####
-
-# This rule allows us to supply the necessary -D options
-# in addition to whatever the user asks for.
-.c.o:
- ${CC} -I. ${CFLAGS_COMPILE_ONLY} -DBINDIR=\"${bindir}\" -DSYSDIR=\"${sysconfdir}\" ${CPPFLAGS} ${CFLAGS} $<
-
-OBJ = main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
- command.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
- help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
- lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
- output.${O} position.${O} prompt.${O} search.${O} signal.${O} \
- tags.${O} ttyin.${O} version.${O}
-
-all: less lesskey lessecho
-
-less: ${OBJ}
- ${CC} ${LDFLAGS} -o $@ ${OBJ} ${LIBS}
-
-lesskey: lesskey.${O} version.${O}
- ${CC} ${LDFLAGS} -o $@ lesskey.${O} version.${O}
-
-lessecho: lessecho.${O} version.${O}
- ${CC} ${LDFLAGS} -o $@ lessecho.${O} version.${O}
-
-defines.h: defines.ds
- command.com /c copy $< $@
-
-${OBJ}: ${srcdir}/less.h defines.h ${srcdir}/funcs.h
-
-install: all ${srcdir}/less.man ${srcdir}/lesskey.man
- ${INSTALL_PROGRAM} less.exe ${bindir}/less.exe
- ${INSTALL_PROGRAM} lesskey.exe ${bindir}/lesskey.exe
- ${INSTALL_PROGRAM} lessecho.exe ${bindir}/lessecho.exe
- ${INSTALL_DATA} ${srcdir}/less.man ${mandir}/man${manext}/less.${manext}
- ${INSTALL_DATA} ${srcdir}/lesskey.man ${mandir}/man${manext}/lesskey.${manext}
-
-info:
-install-info:
-dvi:
-check:
-installcheck:
-
-TAGS:
- etags *.c *.h
-
-newfuncs:
- command.com /c if exist funcs.h del funcs.h
- ${AWK} -f mkfuncs.awk ${OBJ:.${O}=.c} > funcs.h
-
-clean:
- command.com /c for %f in (*.${O} less lesskey lessecho *.exe) do if exist %f del %f
-
-mostlyclean: clean
-
-distclean: clean
- command.com /c if not exist Makefile.dsg ren Makefile Makefile.dsg
- command.com /c if not exist defines.ds ren defines.h defines.ds
- command.com /c for %f in (Makefile defines.h) do if exist %f del %f
-
-realclean: distclean
- command.com /c if exist TAGS del TAGS
-
diff --git a/contrib/less/Makefile.dsu b/contrib/less/Makefile.dsu
deleted file mode 100644
index 5bc5282..0000000
--- a/contrib/less/Makefile.dsu
+++ /dev/null
@@ -1,58 +0,0 @@
-# Makefile for less.
-# MS-DOS version
-
-#### Start of system configuration section. ####
-
-CC = cl
-# Change the following directories to match your installation.
-LIBDIR = c:\msvc\lib
-INCDIR = c:\msvc\include
-
-# CFLAGS are compile-time options and LDFLAGS are link-time options. They are
-# customized for MSVC 1.0 (MSC 8.0). If you have a different version of the
-# compiler, you may need to change some of the options to their equivalents.
-# -Ot optimize for speed
-# -AL large memory model
-# -Za ANSI C conformance
-# -nologo suppress MSVC banners
-# -onerror:noexe no .EXE file if link errors occur
-CFLAGS = -Ot -AL -Za -nologo
-LDFLAGS = -onerror:noexe -nologo
-LIBS = $(LIBDIR)\llibce.lib $(LIBDIR)\graphics.lib
-
-#### End of system configuration section. ####
-
-# This rule allows us to supply the necessary -D options
-# in addition to whatever the user asks for.
-.c.obj:
- $(CC) -c -I. -I$(INCDIR) $(CPPFLAGS) $(CFLAGS) $<
-
-OBJ = main.obj screen.obj brac.obj ch.obj charset.obj cmdbuf.obj command.obj \
- decode.obj edit.obj filename.obj forwback.obj help.obj ifile.obj \
- input.obj jump.obj line.obj linenum.obj lsystem.obj \
- mark.obj optfunc.obj option.obj opttbl.obj os.obj output.obj \
- position.obj prompt.obj search.obj signal.obj tags.obj \
- ttyin.obj version.obj
-
-all: less lesskey
-
-# This is really horrible, but the command line is too long for
-# MS-DOS if we try to link $(OBJ).
-less: $(OBJ)
- -if exist lesskey.obj del lesskey.obj
- $(CC) $(LDFLAGS) -o $@ *.obj $(LIBS)
-
-lesskey: lesskey.obj version.obj
- $(CC) $(LDFLAGS) -o $@ lesskey.obj version.obj $(LIBS)
-
-defines.h: defines.ds
- -del defines.h
- -copy defines.ds defines.h
-
-$(OBJ): less.h defines.h
-
-clean:
- -del *.obj
- -del less.exe
- -del lesskey.exe
-
diff --git a/contrib/less/Makefile.in b/contrib/less/Makefile.in
deleted file mode 100644
index 287bd8e..0000000
--- a/contrib/less/Makefile.in
+++ /dev/null
@@ -1,120 +0,0 @@
-# Makefile for less.
-
-#### Start of system configuration section. ####
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-CC = @CC@
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-
-CFLAGS = @CFLAGS@
-CFLAGS_COMPILE_ONLY = -c
-LDFLAGS = @LDFLAGS@
-CPPFLAGS = @CPPFLAGS@
-O=o
-
-LIBS = @LIBS@
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-# Where the installed binary goes.
-bindir = @bindir@
-binprefix =
-
-sysconfdir = @sysconfdir@
-datarootdir = @datarootdir@
-
-mandir = @mandir@
-manext = 1
-manprefix =
-DESTDIR =
-
-#### End of system configuration section. ####
-
-SHELL = /bin/sh
-
-# This rule allows us to supply the necessary -D options
-# in addition to whatever the user asks for.
-.c.o:
- ${CC} -I. ${CFLAGS_COMPILE_ONLY} -DBINDIR=\"${bindir}\" -DSYSDIR=\"${sysconfdir}\" ${CPPFLAGS} ${CFLAGS} $<
-
-OBJ = main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
- command.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
- help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
- lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
- output.${O} position.${O} prompt.${O} search.${O} signal.${O} \
- tags.${O} ttyin.${O} version.${O} @REGEX_O@
-
-all: less lesskey lessecho
-
-less: ${OBJ}
- ${CC} ${LDFLAGS} -o $@ ${OBJ} ${LIBS}
-
-lesskey: lesskey.${O} version.${O}
- ${CC} ${LDFLAGS} -o $@ lesskey.${O} version.${O}
-
-lessecho: lessecho.${O} version.${O}
- ${CC} ${LDFLAGS} -o $@ lessecho.${O} version.${O}
-
-${OBJ}: ${srcdir}/less.h ${srcdir}/funcs.h defines.h
-
-install: all ${srcdir}/less.nro ${srcdir}/lesskey.nro ${srcdir}/lessecho.nro installdirs
- ${INSTALL_PROGRAM} less ${DESTDIR}${bindir}/${binprefix}less
- ${INSTALL_PROGRAM} lesskey ${DESTDIR}${bindir}/${binprefix}lesskey
- ${INSTALL_PROGRAM} lessecho ${DESTDIR}${bindir}/${binprefix}lessecho
- ${INSTALL_DATA} ${srcdir}/less.nro ${DESTDIR}${mandir}/man${manext}/${manprefix}less.${manext}
- ${INSTALL_DATA} ${srcdir}/lesskey.nro ${DESTDIR}${mandir}/man${manext}/${manprefix}lesskey.${manext}
- ${INSTALL_DATA} ${srcdir}/lessecho.nro ${DESTDIR}${mandir}/man${manext}/${manprefix}lessecho.${manext}
-
-install-strip:
- ${MAKE} INSTALL_PROGRAM='${INSTALL_PROGRAM} -s' install
-
-installdirs: mkinstalldirs
- ${srcdir}/mkinstalldirs ${DESTDIR}${bindir} ${DESTDIR}${mandir}/man${manext}
-
-uninstall:
- rm -f ${DESTDIR}${bindir}/${binprefix}less
- rm -f ${DESTDIR}${bindir}/${binprefix}lesskey
- rm -f ${DESTDIR}${bindir}/${binprefix}lessecho
- rm -f ${DESTDIR}${mandir}/man${manext}/${manprefix}less.${manext}
- rm -f ${DESTDIR}${mandir}/man${manext}/${manprefix}lesskey.${manext}
- rm -f ${DESTDIR}${mandir}/man${manext}/${manprefix}lessecho.${manext}
-
-info:
-install-info:
-dvi:
-check:
-installcheck:
-
-TAGS:
- cd ${srcdir} && etags *.c *.h
-
-# config.status might not change defines.h
-# Don't rerun config.status if we just configured (so there's no stamp-h).
-defines.h: stamp-h
-stamp-h: defines.h.in config.status
- test ! -f stamp-h || CONFIG_FILES= CONFIG_HEADERS=defines.h ./config.status
- touch stamp-h
-Makefile: ${srcdir}/Makefile.in config.status
- CONFIG_FILES=Makefile CONFIG_HEADERS= ./config.status
-config.status: ${srcdir}/configure
- ./config.status --recheck
-
-${srcdir}/configure: ${srcdir}/configure.ac
- cd ${srcdir}; autoheader; autoconf
-
-clean:
- rm -f *.${O} core less lesskey lessecho
-
-mostlyclean: clean
-
-distclean: clean
- rm -f Makefile config.status config.log config.cache defines.h stamp-h
-
-realclean: distclean
- rm -f TAGS
-
diff --git a/contrib/less/Makefile.o2e b/contrib/less/Makefile.o2e
deleted file mode 100644
index b0b9db2..0000000
--- a/contrib/less/Makefile.o2e
+++ /dev/null
@@ -1,42 +0,0 @@
-# Makefile for less.
-# OS/2 version, for emx+gcc compiler
-
-#### Start of system configuration section. ####
-
-CC = gcc -Zomf
-CFLAGS = -I. -O2 -Wall
-LDFLAGS = -s -Zcrtdll
-LIBS = -ltermcap
-O = obj
-
-#### End of system configuration section. ####
-
-.SUFFIXES: .c .${O}
-
-# This rule allows us to supply the necessary -D options
-# in addition to whatever the user asks for.
-.c.${O}:
- ${CC} -c ${CPPFLAGS} ${CFLAGS} $<
-
-OBJ = main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
- command.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
- help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
- lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
- output.${O} position.${O} prompt.${O} search.${O} signal.${O} \
- tags.${O} ttyin.${O} version.${O} regexp.${O}
-
-all: less.exe lesskey.exe scrsize.exe
-
-less.exe: ${OBJ}
- ${CC} ${OBJ} -o $@ ${LDFLAGS} ${LIBS}
-
-lesskey.exe: lesskey.${O} version.${O}
- ${CC} lesskey.${O} version.${O} -o $@ ${LDFLAGS}
-
-scrsize.exe: scrsize.c
- ${CC} ${CFLAGS} -D__ST_MT_ERRNO__ -s -Zmtd -lX11 $<
-
-${OBJ}: defines.h less.h
-
-defines.h: defines.o2
- copy defines.o2 defines.h
diff --git a/contrib/less/Makefile.o9c b/contrib/less/Makefile.o9c
deleted file mode 100644
index 0a1b503..0000000
--- a/contrib/less/Makefile.o9c
+++ /dev/null
@@ -1,46 +0,0 @@
-# Makefile for less.
-# OS-9 version for Microware C 3.2.
-
-#### Start of system configuration section. ####
-
-CC = cc
-CPPFLAGS = -D_OSK_MWC32 -DDEBUG=0 -DSTRCSPN
-CFLAGS = -k=0 -v=.
-CFLAGS_COMPILE_ONLY = -r
-LDFLAGS = -igm=8
-LIBS = -l=/dd/lib/termlib.l
-O = r
-
-
-#### End of system configuration section. ####
-
-.SUFFIXES: .c .${O}
-
-# This rule allows us to supply the necessary -D options
-# in addition to whatever the user asks for.
-
-.c.${O}:
- ${CC} ${CFLAGS_COMPILE_ONLY} ${CPPFLAGS} ${CFLAGS} $<
-
-OBJ = main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
- command.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
- help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
- lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
- output.${O} position.${O} prompt.${O} search.${O} signal.${O} \
- tags.${O} ttyin.${O} version.${O} regexp.${O}
-
-all: less lessecho lesskey
-
-less: ${OBJ}
- ${CC} ${OBJ} -f=$@ ${LDFLAGS} ${LIBS}
-
-lesskey: lesskey.${O} version.${O}
- ${CC} lesskey.${O} version.${O} -f=$@ ${LDFLAGS}
-
-lessecho: lessecho.${O} version.${O}
- ${CC} lessecho.${O} version.${O} -f=$@ ${LDFLAGS}
-
-${OBJ}: defines.h less.h
-
-defines.h: defines.o9
- copy defines.o9 defines.h -rf
diff --git a/contrib/less/Makefile.o9u b/contrib/less/Makefile.o9u
deleted file mode 100644
index 2dec7cc..0000000
--- a/contrib/less/Makefile.o9u
+++ /dev/null
@@ -1,42 +0,0 @@
-# Makefile for less.
-# OS-9 version for Ultra C.
-
-#### Start of system configuration section. ####
-
-CC = cc
-CPPFLAGS =
-CFLAGS = -v=.
-CFLAGS_COMPILE_ONLY = -eas
-LDFLAGS = -olM=24k
-LIBS = -ltermlib.l -lsys_clib.l -lunix.l
-O = r
-
-
-#### End of system configuration section. ####
-
-.SUFFIXES: .c .${O}
-
-# This rule allows us to supply the necessary -D options
-# in addition to whatever the user asks for.
-.c.${O}:
- ${CC} ${CFLAGS_COMPILE_ONLY} ${CPPFLAGS} ${CFLAGS} $<
-
-OBJ = main.${O} screen.${O} brac.${O} ch.${O} charset.${O} cmdbuf.${O} \
- command.${O} decode.${O} edit.${O} filename.${O} forwback.${O} \
- help.${O} ifile.${O} input.${O} jump.${O} line.${O} linenum.${O} \
- lsystem.${O} mark.${O} optfunc.${O} option.${O} opttbl.${O} os.${O} \
- output.${O} position.${O} prompt.${O} search.${O} signal.${O} \
- tags.${O} ttyin.${O} version.${O} regexp.${O}
-
-all: less lesskey
-
-less: ${OBJ}
- ${CC} ${OBJ} -f=$@ ${LDFLAGS} ${LIBS}
-
-lesskey: lesskey.${O} version.${O}
- ${CC} lesskey.${O} version.${O} -f=$@ ${LDFLAGS}
-
-${OBJ}: defines.h less.h
-
-defines.h: defines.o9
- copy defines.o9 defines.h -rf
diff --git a/contrib/less/Makefile.wnb b/contrib/less/Makefile.wnb
deleted file mode 100644
index 2d1c85b..0000000
--- a/contrib/less/Makefile.wnb
+++ /dev/null
@@ -1,70 +0,0 @@
-# Makefile for less.
-# Windows version
-# Bolarnd C++ 5.5.1 free command line tools
-
-#### Start of system configuration section. ####
-#
-# Borland's make knows its own location in the
-# filesystem.
-#
-
-CC = bcc32
-LIBDIR = $(MAKEDIR)\..\lib
-
-CFLAGS = -O2 -w-pro -TWC -P-c -v- -d -f- -ff- -vi
-LDFLAGS = -Tpe -v- -ap -c -x -V4.0 -GF:AGGRESSIVE
-LD = ilink32
-LIBS = ${LIBDIR}\import32.lib ${LIBDIR}\cw32.lib
-
-#### End of system configuration section. ####
-
-#
-# This rule allows us to supply the necessary -D options
-# in addition to whatever the user asks for.
-#
-.c.obj:
- ${CC} -c -I. ${CPPFLAGS} ${CFLAGS} $<
-
-OBJ = main.obj screen.obj brac.obj ch.obj charset.obj cmdbuf.obj command.obj \
- decode.obj edit.obj filename.obj forwback.obj help.obj ifile.obj \
- input.obj jump.obj line.obj linenum.obj lsystem.obj \
- mark.obj optfunc.obj option.obj opttbl.obj os.obj output.obj \
- position.obj prompt.obj search.obj signal.obj tags.obj \
- ttyin.obj version.obj regexp.obj
-
-all: less lesskey lessecho
-
-#
-# This is really horrible, but the command line is too long for
-# MS-DOS if we try to link ${OBJ}.
-#
-less: ${OBJ}
- ${LD} ${LDFLAGS} ${LIBDIR}\c0x32.obj $**, $@,,${LIBS}
-
-lesskey: lesskey.obj version.obj
- ${LD} ${LDFLAGS} ${LIBDIR}\c0x32.obj $**, $@,,${LIBS}
-
-lessecho: lessecho.obj version.obj
- ${LD} ${LDFLAGS} ${LIBDIR}\c0x32.obj $**, $@,,${LIBS}
-
-defines.h: defines.wn
- -del defines.h
- -copy defines.wn defines.h
-
-${OBJ}: less.h defines.h funcs.h cmd.h
-
-clean:
- -del *.obj
- -del *.il?
- -del *.tds
- -del defines.h
-
-spotless: clean
- -del less.exe
- -del lesskey.exe
- -del lessecho.exe
-
-realclean: spotless
-
-distclean: spotless
-
diff --git a/contrib/less/Makefile.wnm b/contrib/less/Makefile.wnm
deleted file mode 100644
index 972090a..0000000
--- a/contrib/less/Makefile.wnm
+++ /dev/null
@@ -1,55 +0,0 @@
-# Makefile for less.
-# Windows 32 Visual C++ version
-
-#### Start of system configuration section. ####
-
-CC = cl
-
-# Normal flags
-CFLAGS = /nologo /ML /W3 /GX /O2 /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
-LDFLAGS = /subsystem:console /incremental:no /machine:I386
-
-# Debugging flags
-#CFLAGS = /nologo /MDd /W3 /GX /Od /Gm /Zi /I "." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /c
-#LDFLAGS = /subsystem:console /incremental:yes /debug /machine:I386
-
-LD = link
-LIBS = user32.lib
-
-#### End of system configuration section. ####
-
-# This rule allows us to supply the necessary -D options
-# in addition to whatever the user asks for.
-.c.obj:
- $(CC) $(CFLAGS) $<
-
-OBJ = main.obj screen.obj brac.obj ch.obj charset.obj cmdbuf.obj command.obj \
- decode.obj edit.obj filename.obj forwback.obj help.obj ifile.obj \
- input.obj jump.obj line.obj linenum.obj lsystem.obj \
- mark.obj optfunc.obj option.obj opttbl.obj os.obj output.obj \
- position.obj prompt.obj search.obj signal.obj tags.obj \
- ttyin.obj version.obj regexp.obj
-
-all: less.exe lesskey.exe
-
-# This is really horrible, but the command line is too long for
-# MS-DOS if we try to link ${OBJ}.
-less.exe: $(OBJ)
- -del lesskey.obj
- $(LD) $(LDFLAGS) *.obj $(LIBS) /out:$@
-
-lesskey.exe: lesskey.obj version.obj
- $(LD) $(LDFLAGS) lesskey.obj version.obj $(LIBS) /out:$@
-
-defines.h: defines.wn
- -del defines.h
- -copy defines.wn defines.h
-
-$(OBJ): less.h defines.h funcs.h cmd.h
-
-clean:
- -del *.obj
- -del less.exe
- -del lesskey.exe
-
-
diff --git a/contrib/less/NEWS b/contrib/less/NEWS
deleted file mode 100644
index e6cec69..0000000
--- a/contrib/less/NEWS
+++ /dev/null
@@ -1,712 +0,0 @@
-
- NEWS about less
-
-======================================================================
-
- For the latest news about less, see the "less" Web page:
- http://www.greenwoodsoftware.com/less
- You can also download the latest version of less from there.
-
- To report bugs, suggestions or comments, send email to
- bug-less@gnu.org or markn@greenwoodsoftware.com.
-
-======================================================================
-
-
- Major changes between "less" versions 409 and 416
-
-* New --follow-name option makes F command follow the name of a file
- rather than the file descriptor if an open file is renamed.
-
-* Make searching with -i/-I work correctly with non-ASCII text.
-
-* Fix DJGPP build.
-
-======================================================================
-
- Major changes between "less" versions 406 and 409
-
-* Support CSI escape sequences, like SGR escape sequences.
-
-* Fix bug which caused screen to fail to repaint when window is resized.
-
-* Fix bug in using -i and -I flags with non-ASCII text.
-
-* Fix configure bug on systems which don't support langinfo.h.
-
-* Fix crash when searching text containing certain invalid UTF-8 sequences.
-
-======================================================================
-
- Major changes between "less" versions 394 and 406
-
-* Allow decimal point in number for % (percent) command.
-
-* Allow decimal point in number for -j option (fraction of screen height).
-
-* Make n command fetch previous pattern from history file on first search.
-
-* Don't rewrite history file if it has not changed.
-
-* Don't move to bottom of screen on first page.
-
-* Don't output extraneous newlines, so copy & pasting lines from the
- output works better.
-
-* The -c option has been made identical with the -C option.
-
-* Allow "/dev/null" as synomym for "-" in LESSHISTFILE to indicate
- that no history file should be used.
-
-* Search can now find text which follows a null byte, if the PCRE
- library is used, or if no-regex searching (ctrl-R) is used.
-
-* Better compatibility with POSIX more specification.
-
-* Make -f work for directories.
-
-* Make "t" cmd traverse tags in the correct order.
-
-* Allow a few binary characters in the input file before warning
- that the file is binary.
-
-* Don't warn that file is binary if it merely contains ANSI color sequences
- and -R is in effect.
-
-* Update Unicode character tables.
-
-* Support DESTDIR in Makefile.
-
-* Fix bug when filename contains certain shell metacharacters such as "$".
-
-* Fix bug when resizing the window while waiting for input from a pipe.
-
-* Fix configure bugs.
-
-======================================================================
-
- Major changes between "less" versions 382 and 394
-
-* Add history file to save search and shell command history between
- invocations of less.
-
-* Improve behavior of history list for search and shell commands.
-
-* Add -K (or --quit-on-intr) option to make less exit immediately on ctrl-C.
-
-* Improve handling of UTF-8 files and commands, including better
- line wrapping and handling double-width chars.
-
-* Added LESSUTFBINFMT environment variable to control display of
- non-printable characters in a UTF-8 file.
-
-* Add --with-secure option to configure, to make it easier to
- build a secure version of less.
-
-* Show search matches in the status column even if search highlights
- are disabled via the -G option or the ESC-u command.
-
-* Improve performance when the file contains very long lines.
-
-* Add "windows" charset.
-
-* Add man page for lessecho.
-
-* Add support for erase2 character, treated same as erase.
-
-* Use ASCII lowercase/uppercase logic when operating on the command line.
-
-* Update makefile for Borland C++ 5.5.1.
-
-* Fix bug in calculating number of pages for %D prompt.
-
-* Fix bug in handling tag file error.
-
-* Fix obscure bug if input file is deleted while viewing help.
-
-* Fix bug handling filenames which include square brackets.
-
-* Fix possible buffer overflow in "global" tag search.
-
-* Fix possible buffer overflow in usage of LESSOPEN and LESSCLOSE.
-
-* Fix buffer overflow in reverse search.
-
-======================================================================
-
- Major changes between "less" versions 381 and 382
-
-* Removed some old copyrighted code.
- This probably breaks OS/9 support.
-
-======================================================================
-
- Major changes between "less" versions 378 and 381
-
-* New -L option to disable LESSOPEN processing.
-
-* Further support for large (64 bit) file addressing.
- Large file support is now set up by the configure script.
-
-* Use autoconf 2.54.
- Replace configure.in, acconfig.h, defines.h.top with configure.ac.
-
-* Overstriking underscore with underscore is now bold or underlined
- depending on context.
-
-* Use only 7 spaces for line numbers in -N mode, if possible.
-
-* Fix some bugs in handling overstriking in UTF-8 files.
-
-* Fix some nroff issues in the man page.
-
-======================================================================
-
- Major changes between "less" versions 376 and 378
-
-* Bug fixes:
- Default buffer space is now 64K as documented.
- Search highlighting works properly when used with -R.
- Windows version works properly when input file contains carriage returns.
- Clean up some compiler warnings.
-
-======================================================================
-
- Major changes between "less" versions 358 and 376
-
-* -x option can now specify multiple variable-width tab stops.
-
-* -X option no longer disables keypad initialization.
- New option --no-keypad disables keypad initialization.
-
-* New commands t and T step through multiple tag matches.
- Added support for "global(1)" tags
- (see http://www.gnu.org/software/global/global.html).
-
-* New prompt style set by option -Pw defines the message printed
- while waiting for data in the F command.
-
-* System-wide lesskey file now defaults to sysless in etc directory
- instead of .sysless in bin directory.
- Use "configure --sysconfdir=..." to change it.
- (For backwards compatibility, .sysless in bin is still recognized.)
-
-* Pressing RightArrow or LeftArrow while entering a number now shifts
- the display N columns rather than editing the number itself.
-
-* Status column (enabled with -J) now shows search results.
-
-* Windows version sets window title.
-
-* Default LESSCHARSET for MS-DOS versions is now "dos".
-
-* Searching works better with ANSI (SGR) escape sequences.
- ANSI color escape sequences are now supported in the MS-DOS (DJGPP) version.
-
-* Improved performance in reading very large pipes.
-
-* Eliminated some dependencies on file offets being 32 bits.
-
-* Fixed problems when viewing files with very long lines.
-
-* Fixed overstriking in UTF-8 mode, and overstriking tabs.
-
-* Improved horizontal shifting of text using -R option with ANSI color.
-
-* Improved handling of filenames containing shell metacharacters.
-
-* Some fixes for EBCDIC systems.
-
-* Some fixes for OS/2 systems.
-
-======================================================================
-
- Major changes between "less" versions 354 and 358
-
-* Add -J (--status-column) option to display a status column.
-
-* Add -# (--shift) option to set default horizontal shift distance.
- Default horizontal shift distance is now one-half screen width.
-
-* Horizontal shifting does not shift line numbers if -N is in effect.
-
-* Horizontal shifting acts as though -S were set, to avoid confusion.
-
-======================================================================
-
-
- Major changes between "less" versions 352 and 354
-
-* Allow space after numeric-valued command line options.
-
-* Fix problem with configuring terminal libraries on some systems.
-
-* Add support for PCRE regular expression library.
-
-* Add --with-regex option to configure to allow manually selecting
- a regular expression library.
-
-* Fix bug compiling with SECURE = 1.
-
-======================================================================
-
-
- Major changes between "less" versions 346 and 352
-
-* Enable UTF-8 if "UTF-8" appears in locale-related environment variables.
-
-* Add --with-editor option to configure script.
-
-* The -M prompt and = message now show the top and bottom line number.
-
-* Fix bug in running the editor on a file whose name contains quotes, etc.
-
-* Fix bug in horizontal scrolling of long lines.
-
-* Fix bug in doing :d on a file which contains marks.
-
-* Fix bug causing cleared lines to sometimes be filled with standout,
- bold, underline, etc. on certain terminals.
-
-* Fixes for MS-DOS (DJGPP) version.
-
-======================================================================
-
-
- Major changes between "less" versions 340 and 346
-
-* The UTF-8 character set is now supported.
-
-* The default character set is now latin1 rather than ascii.
-
-* New option -R (--RAW-CONTROL-CHARS) is like -r but handles
- long (wrapped) lines correctly, as long as the input contains only
- normal text and ANSI color escape sequences.
-
-* New option -F (--quit-if-one-screen) quits if the text fits on
- the first screen.
-
-* The -w option now highlights the target line of a g or p command.
-
-* A system-wide lesskey file is supported (LESSKEY_SYSTEM).
-
-* New escape for prompt strings: %c is replaced by column number.
-
-* New escape for prompt strings: %P is replaced by percentage into
- file, based on line number rather than byte offset.
-
-* HOME and END keys now jump to beginning of file or end of file.
-
-======================================================================
-
-
- Major changes between "less" versions 337 and 340
-
-* Command line options for less may now be given in either the old
- single-letter form, or a new long name form (--option-name).
- See the less man page or "less --help" for the list of long option names.
-
-* Command line options for lesskey may now be given in a new long name
- form. See the lesskey man page for the list of long option names.
-
-* New command -- toggles an option using the long option name.
-
-* New command __ queries an option using the long option name.
-
-* The old -- command is renamed as -!.
-
-* If a ^P is entered between the dash and the option letter of the -
- command, the message describing the new setting is suppressed.
-
-* Lesskey files may now contain \k escape sequences to represent the
- "special" keys (arrows, PAGE-UP/PAGE-DOWN, HOME, END, INSERT, DELETE).
-
-* New command :d removes the current file from the list of files.
-
-* New option -~ (like -w before version 335)
- suppresses tildes after end-of-file.
-
-* Less is now released under the GNU General Public License.
-
-======================================================================
-
-
- Major changes between "less" versions 335 and 337
-
-* Fixed bugs in "make install".
-
-======================================================================
-
-
- Major changes between "less" versions 332 and 335
-
-* The old -w flag (suppress tildes after end-of-file) has been removed.
-
-* New -w flag highlights the first new line after a forward-screen.
-
-* New -W flag highlights the first new line after any forward movement.
-
-* Window resize works even if LINES and/or COLUMNS environment
- variables are incorrect.
-
-* New percent escapes for prompt strings:
- %d is replaced by the page number, and
- %D is replaced by the number of pages in the file.
-
-* Added charsets "iso8859" and "ebcdic".
-
-* In Windows version, uses HOMEDRIVE and HOMEPATH if HOME is not defined.
-
-* Fixed some bugs causing incorrect display on DOS/Windows.
-
-======================================================================
-
-
- Major changes between "less" versions 330 and 332
-
-* Filenames from the command line are entered into the command history,
- so UPARROW/DOWNARROW can be used to retrieve them from the :e command.
-
-* Now works correctly on Windows when using a scrolling terminal
- window (buffer larger than display window).
-
-* On Windows, now restores the console screen on exit.
- Use -X to get the old behavior.
-
-* Fixed bug on Windows when CAPS-LOCK or NUM-LOCK is pressed.
-
-* Fixed bug on Windows when piping output of an interactive program.
-
-* Fixed bug in tags file processing when tags file has DOS-style
- line terminators (CR/LF).
-
-* Fixed compilation problem on OS/2.
-
-======================================================================
-
-
- Major changes between "less" versions 321 and 330
-
-* Now supports filenames containing spaces (in double quotes).
- New option -" can be used to change the quoting characters.
-
-* In filename completion, a slash is appended to a directory name.
- If the environment variable LESSSEPARATOR is set, the value of
- that variable, rather than a slash, is appended.
-
-* LeftArrow and RightArrow are same as ESC-[ and ESC-].
-
-* Added commands ESC-( and ESC-), same as ESC-[ and ESC-].
-
-* A "quit" command defined in a lesskey file may now have an "extra"
- string, which is used to return an exit code from less when it quits.
-
-* New environment variables LESSMETACHARS and LESSMETAESCAPE provide
- more control over how less interfaces to the shell.
-
-* Ported to Microsoft Visual C compiler for Windows.
-
-* Ported to DJGPP compiler for MS-DOS.
-
-* Bug fixes.
-
-======================================================================
-
-
- Major changes between "less" versions 291 and 321
-
-* Command line at bottom of screen now scrolls, so it can be longer
- than the screen width.
-
-* New commands ESC-] and ESC-[ scroll the display horizontally.
-
-* New command ESC-SPACE scrolls forward a full screen, even if it
- hits end-of-file.
-
-* Alternate modifiers for search commands: ^N is same as !,
- ^F is same as @, and ^E is same as *.
-
-* New modifier for search commands: ^K means highlight the matches
- currently on-screen, but don't move to the first match.
-
-* New modifier for search commands: ^R means don't use regular
- expressions in the search.
-
-* Environment variable LESSKEY gives name of default lesskey file.
-
-* Environment variable LESSSECURE will force less to run in
- "secure" mode.
-
-* Command line argument "--" signals that the rest of the arguments
- are files (not option flags).
-
-* Help file (less.hlp) is no longer installed. Help text is now
- embedded in the less executable itself.
-
-* Added -Ph to change the prompt for the help text.
- Added -Ps to change the default short prompt (same as plain -P).
-
-* Ported to the Borland C compiler for MS-DOS.
-
-* Ported to Windows 95 & Windows NT.
-
-* Ported to OS-9.
-
-* Ported to GNU Hurd.
-
-======================================================================
-
-
- Major changes between "less" versions 290 and 291
-
-* Less environment variables can be specified in lesskey files.
-
-* Fixed MS-DOS build.
-
-======================================================================
-
-
- Major changes between "less" versions 278 and 290
-
-* Accepts GNU-style options "--help" and "--version".
-
-* OS/2 version looks for less.ini in $HOME before $INIT and $PATH.
-
-* Bug fixes
-
-======================================================================
-
-
- Major changes between "less" versions 252 and 278
-
-* A LESSOPEN preprocessor may now pipe the converted file data to less,
- rather than writing it to a temporary file.
-
-* Search pattern highlighting has been fixed. It now highlights
- reliably, even if a string is split across two screen lines,
- contains TABs, etc.
-
-* The -F flag (which suppress search highlighting) has been changed
- to -G. A new flag, -g, changes search highlighting to highlight
- only the string found by the last search command, instead of all
- strings which match the last search command.
-
-* New flag -I acts like -i, but ignores case even if the search
- pattern contains uppercase letters.
-
-* Less now checks for the environment variable VISUAL before EDITOR.
-
-* Ported to OS/2.
-
-======================================================================
-
-
- Major changes between "less" versions 237 and 252
-
-* Changes in line-editing keys:
- The literal key is now ^V or ^A rather than \ (backslash).
- Filename completion commands (TAB and ^L) are disabled
- when typing a search pattern.
-
-* Line-editing command keys can be redefined using lesskey.
-
-* Lesskey with no input file defaults to $HOME/.lesskey
- rather than standard input.
-
-* New option -V displays version number of less.
-
-* New option -V displays version number of lesskey.
-
-* Help file less.hlp is now installed by default in /usr/local/share
- rather than /usr/local/lib.
-
-
-======================================================================
-
-
- Major changes between "less" versions 170 and 237
-
-* By popular demand, text which matches the current search pattern
- is highlighted. New -F flag disables this feature.
-
-* Henry Spencer's regexp.c is now included, for systems which do not
- have a regular expression library.
- regexp.c is Copyright (c) 1986 by University of Toronto.
-
-* New line-editing keys, including command history (arrow keys) and
- filename completion (TAB).
-
-* Input preprocessor allows modification of input files (e.g. uncompress)
- via LESSOPEN/LESSCLOSE environment variables.
-
-* New -X flag disables sending termcap "ti" and "te" (initialize and
- deinitialize) strings to the terminal.
-
-* Changing -i from within less now correctly affects a subsequent
- repeated search.
-
-* Searching for underlined or overstruck text now works when the -u
- flag is in effect, rather than the -i flag.
-
-* Use setlocale (LANG and LC_CTYPE environment variables) to determine
- the character set if LESSCHARSET/LESSCHARDEF are not set.
-
-* The default format for displaying binary characters is now standout
- (reverse video) rather than blinking. This can still be changed by
- setting the LESSBINFMT environment variable.
-
-* Use autoconf installation technology.
-
-* Ported to MS-DOS.
-
- ********************************
- Things that may surprise you
- ********************************
-
-* When you enter text at the bottom of the screen (search string,
- filename, etc.), some keys act different than previously.
- Specifically, \ (backslash), ESC, TAB, BACKTAB, and control-L
- now have line editing functions.
-
-* Some previous unofficial versions of less were able to display
- compressed files. The new LESSOPEN/LESSCLOSE feature now provides
- this functionality in a different way.
-
-* Some previous unofficial versions of less provided a -Z flag to
- set the number of lines of text to retain between full screen scrolls.
- The -z-n flag (that is, -z with a negative number) provides this
- functionality.
-
-
-======================================================================
-
-
- Major changes between "less" versions 123 and 170
-
-* New option -j allows target lines to be positioned anywhere on screen.
-
-* New option -S truncates displayed line at the screen width,
- rather than wrapping onto the next line.
-
-* New option -y limits amount of forward scroll.
-
-* New option -T specifies a "tags" file.
-
-* Non-printable, non-control characters are displayed in octal.
- Such characters, as well as control characters, are displayed
- in blinking mode.
-
-* New command -+ sets an option to its default.
-* New command -- sets an option to the opposite of its default.
-
-* Lesskey file may have a string appended to a key's action,
- which acts as though typed in after the command.
-
-* New commands ESC-^F and ESC-^B match arbitrary types of brackets.
-
-* New command F monitors a growing file (like "tail -f").
-
-* New command | pipes a section of the input file into a shell command.
-
-* New command :x directly jumps to a file in the command line list.
-
-* Search commands have been enhanced and reorganized:
- n Repeat search, same direction.
- N Repeat search, opposite direction.
- ESC-/ Search forward thru file boundaries
- ESC-? Search backward thru file boundaries
- ESC-n Repeat search thru file boundaries, same direction.
- ESC-N Repeat search thru file boundaries, opposite direction.
- Special character * causes search to search thru file boundaries.
- Special character @ causes search to begin at start/end of file list.
-
-* Examining a new file adds it to the command line list.
- A list of files, or an expression which matches more than one file,
- may be examined; all of them are added to the command line list.
-
-* Environment variables LESSCHARSET and LESSCHARDEF can define
- a non-ASCII character set.
-
-* Partial support for MSDOS, including options -R for repainting screen
- on quit, -v/-V to select video mode, and -W to change window size.
-
-
-======================================================================
-
-
- Major changes between "less" versions 97 and 123
-
-* New option (-N) causes line numbers to be displayed in the
- text of the file (like vi "set nu").
-
-* New option (-?) prints help message immediately.
-
-* New option (-r) displays "raw" control characters, without
- mapping them to ^X notation.
-
-* New option (-f) forces less to open non-regular files
- (directories, etc).
-
-* New option (-k) can be used to specify lesskey files by name.
-
-* New option (-y) can be used to set a forward scroll limit
- (like -h sets a backward scroll limit).
-
-* File marks (set by the m command) are now preserved when a new
- file is edited. The ' command can thus be used to switch files.
-
-* New command ESC-/ searches all files (on the command line)
- for a pattern.
-
-* New command ESC-n repeats previous search, spanning files.
-
-* The N command has been changed to repeat the previous search
- in the reverse direction. The old N command is still available
- via :n.
-
-* New command ESC-N repeats previous search in the reverse
- direction and spanning files.
-
-* 8 bit characters are now supported. A new option (-g) can be
- used to strip off the eighth bit (the previous behavior).
-
-* Options which take a following string (like -t) may now
- optionally have a space between the option letter and the string.
-
-* Six new commands { } ( ) [ and ] can be used to match
- brackets of specific types, similar to vi % command.
-
-* New commands z and w move forward/backward one window and
- simultaneously set the window size.
-
-* Prompt string expansion now has %L for line number of the last
- line in the file, and %E for the name of the editor.
- Also, % escapes which refer to a line (b=bottom, t=top, etc.)
- can use j for the jump target line.
-
-* New environment variable LESSEDIT can be used to tailor the
- command string passed to the editor by the v command.
-
-* Examining a file which was previously examined will return
- to the same position in the file.
-
-* A "%" is expanded to the current filename and a "#" to the
- previous filename, in both shell commands and the E command.
- (Previously % worked only in shell commands and # worked
- only in the E command.)
-
-* New command ":ta" is equivalent to "-t".
-
-* New command "s" is equivalent to "-l".
-
-* The - command may be followed by "+X" to revert to the default
- for option X, or "-X" to get the opposite of the default.
-
-* Lesskey files may now include characters after the action as
- extra input to be parsed after the action; for example:
- "toggle-option X" to toggle a specific option X.
-
-
-
-
-
diff --git a/contrib/less/README b/contrib/less/README
deleted file mode 100644
index 2cab347..0000000
--- a/contrib/less/README
+++ /dev/null
@@ -1,238 +0,0 @@
-
- Less, version 416
-
- This is the distribution of less, version 416, released 22 Nov 2007.
- This program is part of the GNU project (http://www.gnu.org).
-
- This program is free software. You may redistribute it and/or
- modify it under the terms of either:
-
- 1. The GNU General Public License, as published by the Free
- Software Foundation; either version 2, or (at your option) any
- later version. A copy of this license is in the file COPYING.
- or
- 2. The Less License, in the file LICENSE.
-
- Please report any problems to bug-less@gnu.org or markn@greenwoodsoftware.com.
- See http://www.greenwoodsoftware.com/less for the latest info.
- You may also contact the author at:
- Mark Nudelman
- Greenwood Software
- PO Box 2402
- El Granada, CA 94018
- USA
-
-=========================================================================
-
-This is the distribution of "less", a paginator similar to "more" or "pg".
-
-The formatted manual page is in less.man.
-The manual page nroff source is in less.nro.
-Major changes made since the last posted version are in NEWS.
-
-=======================================================================
-INSTALLATION (Unix systems only):
-
-1. Move the distributed source to its own directory and unpack it,
- if you have not already done so.
-
-2. Type "sh configure".
- This will generate a Makefile and a defines.h.
- Warning: if you have a GNU sed, make sure it is version 2.05 or later.
-
- The file INSTALL describes the usage of the configure program in
- general. In addition, these options to configure are supported:
-
- --with-editor=program
- Specifies the default editor program used by the "v" command.
- The default is "vi".
-
- --with-regex=lib
- Specifies the regular expression library used by less for pattern
- matching. The default is "auto", which means the configure program
- finds a regular expression library automatically. Other values are:
- posix Use the POSIX-compatible regcomp.
- pcre Use the PCRE library.
- regcmp Use the regcmp library.
- re_comp Use the re_comp library.
- regcomp Use the V8-compatible regcomp.
- regcomp-local Use Henry Spencer's V8-compatible regcomp
- (source is supplied with less).
- --with-secure
- Builds a "secure" version of less, with some features disabled
- to prevent users from viewing other files, accessing shell
- commands, etc.
-
-
-3. It is a good idea to look over the generated Makefile and defines.h
- and make sure they look ok. If you know of any peculiarities of
- your system that configure might not have detected, you may fix the
- Makefile now. Take particular notice of the list of "terminal"
- libraries in the LIBS definition in the Makefile; these may need
- to be edited. The terminal libraries will be some subset of
- -lncurses -lcurses -ltermcap -ltermlib
-
- If you wish, you may edit defines.h to remove some optional features.
- If you choose not to include some features in your version, you may
- wish to edit the manual page "less.nro" and the help page "less.hlp"
- to remove the descriptions of the features which you are removing.
- If you edit less.hlp, you should run "make -f Makefile.aut help.c".
-
-4. Type "make" and watch the fun.
-
-5. If the make succeeds, it will generate the programs "less",
- "lesskey" and "lessecho" in your current directory. Test the
- generated programs.
-
-6. When satisfied that it works, if you wish to install it
- in a public place, type "make install".
-
- The default install destinations are:
- Executables (less, lesskey, lessecho) in /usr/local/bin
- Documentation (less.nro, lesskey.nro) in /usr/local/man/man1
- If you want to install any of these files elsewhere, define
- bindir and/or mandir to the appropriate directories.
-
-If you have any problems building or running "less", suggestions,
-complaints, etc., you may mail to the author at markn@greenwoodsoftware.com.
-
-Note to hackers: comments noting possible improvements are enclosed
-in double curly brackets {{ like this }}.
-
-
-
-=======================================================================
-INSTALLATION (MS-DOS systems only,
- with Microsoft C, Borland C, or DJGPP)
-
-1. Move the distributed source to its own directory.
- Depending on your compiler, you may need to convert the source
- to have CR-LF rather than LF as line terminators.
-
-2. If you are using Microsoft C, rename MAKEFILE.DSU to MAKEFILE.
- If you are using Borland C, rename MAKEFILE.DSB to MAKEFILE.
- If you are using DJGPP, rename MAKEFILE.DSG to MAKEFILE.
-
-3. Look at MAKEFILE to make sure that the definitions for CC and LIBDIR
- are correct. CC should be the name of your C compiler and
- LIBDIR should be the directory where the C libraries reside (for
- Microsoft C only). If these definitions need to be changed, you can
- either modify the definitions directly in MAKEFILE, or set your
- environment variables CC and/or LIBDIR to override the definitions
- in MAKEFILE.
-
-4. If you wish, you may edit DEFINES.DS to remove some optional features.
- If you choose not to include some features in your version, you may
- wish to edit the manual page LESS.MAN and the help page HELP.C
- to remove the descriptions of the features which you are removing.
-
-5. Run your "make" program and watch the fun.
- If your "make" requires a flag to import environment variables,
- you should use that flag.
- If your compiler runs out of memory, try running "make -n >cmds.bat"
- and then run cmds.bat.
-
-6. If the make succeeds, it will generate the programs "LESS.EXE" and
- "LESSKEY.EXE" in your current directory. Test the generated programs.
-
-7. When satisfied that it works, you may wish to install LESS.EXE and
- LESSKEY.EXE in a directory which is included in your PATH.
-
-
-
-=======================================================================
-INSTALLATION (Windows-95, Windows-98 and Windows-NT systems only,
- with Borland C or Microsoft Visual C++)
-
-1. Move the distributed source to its own directory.
-
-2. If you are using Borland C, rename Makefile.wnb to Makefile.
- If you are using Microsoft Visual C++, rename Makefile.wnm to Makefile.
-
-3. Check the Makefile to make sure the definitions look ok.
-
-4. If you wish, you may edit defines.wn to remove some optional features.
- If you choose not to include some features in your version, you may
- wish to edit the manual page less.man and the help page help.c
- to remove the descriptions of the features which you are removing.
-
-5. Type "make" and watch the fun.
-
-6. If the make succeeds, it will generate the programs "less.exe" and
- "lesskey.exe" in your current directory. Test the generated programs.
-
-7. When satisfied that it works, if you wish to install it
- in a public place, type "make install".
- See step 6 of the Unix installation instructions for details
- on how to change the default installation directories.
-
-
-
-=======================================================================
-INSTALLATION (OS/2 systems only,
- with EMX C)
-
-1. Move the distributed source to its own directory.
-
-2. Rename Makefile.o2e to Makefile.
-
-3. Check the Makefile to make sure the definitions look ok.
-
-4. If you wish, you may edit defines.o2 to remove some optional features.
- If you choose not to include some features in your version, you may
- wish to edit the manual page less.man and the help page help.c
- to remove the descriptions of the features which you are removing.
-
-5. Type "make" and watch the fun.
-
-6. If the make succeeds, it will generate the programs "less.exe" and
- "lesskey.exe" in your current directory. Test the generated programs.
-
-7. Make sure you have the emx runtime installed. You need the emx DLLs
- emx.dll and emxlibcs.dll and also the termcap database, termcap.dat.
- Make sure you have termcap.dat either in the default location or
- somewhere in a directory listed in the PATH or INIT environment
- variables.
-
-8. When satisfied that it works, you may wish to install less.exe,
- lesskey.exe and scrsize.exe in a directory which is included in
- your PATH. scrsize.exe is required only if you use a terminal
- emulator such as xterm or rxvt.
-
-
-
-=======================================================================
-INSTALLATION (OS-9 systems only,
- with Microware C or Ultra C)
-
-1. Move the distributed source to its own directory.
-
-2. If you are using Microware C, rename Makefile.o9c to Makefile.
- If you are using Ultra C, rename Makefile.o9u to Makefile.
-
-3. Check the Makefile to make sure the definitions look ok.
-
-4. If you wish, you may edit defines.o9 to remove some optional features.
- If you choose not to include some features in your version, you may
- wish to edit the manual page less.man and the help page help.c
- to remove the descriptions of the features which you are removing.
-
-5. Type "dmake" and watch the fun.
- The standard OS-9 "make" will probably not work. If you don't
- have dmake, you can get a copy from os9archive.rtsi.com.
-
-6. If the make succeeds, it will generate the programs "less" and
- "lesskey" in your current directory. Test the generated programs.
-
-7. When satisfied that it works, if you wish to install it
- in a public place, type "dmake install".
- See step 6 of the Unix installation instructions for details
- on how to change the default installation directories.
-
-=======================================================================
-ACKNOWLEDGMENTS:
- Some versions of the less distribution are packaged using
- Info-ZIP's compression utility.
- Info-ZIP's software is free and can be obtained as source
- code or executables from various anonymous-ftp sites,
- including ftp.uu.net:/pub/archiving/zip.
diff --git a/contrib/less/brac.c b/contrib/less/brac.c
deleted file mode 100644
index 20c7353..0000000
--- a/contrib/less/brac.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines to perform bracket matching functions.
- */
-
-#include "less.h"
-#include "position.h"
-
-/*
- * Try to match the n-th open bracket
- * which appears in the top displayed line (forwdir),
- * or the n-th close bracket
- * which appears in the bottom displayed line (!forwdir).
- * The characters which serve as "open bracket" and
- * "close bracket" are given.
- */
- public void
-match_brac(obrac, cbrac, forwdir, n)
- register int obrac;
- register int cbrac;
- int forwdir;
- int n;
-{
- register int c;
- register int nest;
- POSITION pos;
- int (*chget)();
-
- extern int ch_forw_get(), ch_back_get();
-
- /*
- * Seek to the line containing the open bracket.
- * This is either the top or bottom line on the screen,
- * depending on the type of bracket.
- */
- pos = position((forwdir) ? TOP : BOTTOM);
- if (pos == NULL_POSITION || ch_seek(pos))
- {
- if (forwdir)
- error("Nothing in top line", NULL_PARG);
- else
- error("Nothing in bottom line", NULL_PARG);
- return;
- }
-
- /*
- * Look thru the line to find the open bracket to match.
- */
- do
- {
- if ((c = ch_forw_get()) == '\n' || c == EOI)
- {
- if (forwdir)
- error("No bracket in top line", NULL_PARG);
- else
- error("No bracket in bottom line", NULL_PARG);
- return;
- }
- } while (c != obrac || --n > 0);
-
- /*
- * Position the file just "after" the open bracket
- * (in the direction in which we will be searching).
- * If searching forward, we are already after the bracket.
- * If searching backward, skip back over the open bracket.
- */
- if (!forwdir)
- (void) ch_back_get();
-
- /*
- * Search the file for the matching bracket.
- */
- chget = (forwdir) ? ch_forw_get : ch_back_get;
- nest = 0;
- while ((c = (*chget)()) != EOI)
- {
- if (c == obrac)
- nest++;
- else if (c == cbrac && --nest < 0)
- {
- /*
- * Found the matching bracket.
- * If searching backward, put it on the top line.
- * If searching forward, put it on the bottom line.
- */
- jump_line_loc(ch_tell(), forwdir ? -1 : 1);
- return;
- }
- }
- error("No matching bracket", NULL_PARG);
-}
diff --git a/contrib/less/ch.c b/contrib/less/ch.c
deleted file mode 100644
index eb607d5..0000000
--- a/contrib/less/ch.c
+++ /dev/null
@@ -1,893 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Low level character input from the input file.
- * We use these special purpose routines which optimize moving
- * both forward and backward from the current read pointer.
- */
-
-#include "less.h"
-#if MSDOS_COMPILER==WIN32C
-#include <errno.h>
-#include <windows.h>
-#endif
-
-#if HAVE_STAT_INO
-#include <sys/stat.h>
-extern dev_t curr_dev;
-extern ino_t curr_ino;
-#endif
-
-typedef POSITION BLOCKNUM;
-
-public int ignore_eoi;
-
-/*
- * Pool of buffers holding the most recently used blocks of the input file.
- * The buffer pool is kept as a doubly-linked circular list,
- * in order from most- to least-recently used.
- * The circular list is anchored by the file state "thisfile".
- */
-#define LBUFSIZE 8192
-struct buf {
- struct buf *next, *prev;
- struct buf *hnext, *hprev;
- BLOCKNUM block;
- unsigned int datasize;
- unsigned char data[LBUFSIZE];
-};
-
-struct buflist {
- /* -- Following members must match struct buf */
- struct buf *buf_next, *buf_prev;
- struct buf *buf_hnext, *buf_hprev;
-};
-
-/*
- * The file state is maintained in a filestate structure.
- * A pointer to the filestate is kept in the ifile structure.
- */
-#define BUFHASH_SIZE 64
-struct filestate {
- struct buf *buf_next, *buf_prev;
- struct buflist hashtbl[BUFHASH_SIZE];
- int file;
- int flags;
- POSITION fpos;
- int nbufs;
- BLOCKNUM block;
- unsigned int offset;
- POSITION fsize;
-};
-
-#define ch_bufhead thisfile->buf_next
-#define ch_buftail thisfile->buf_prev
-#define ch_nbufs thisfile->nbufs
-#define ch_block thisfile->block
-#define ch_offset thisfile->offset
-#define ch_fpos thisfile->fpos
-#define ch_fsize thisfile->fsize
-#define ch_flags thisfile->flags
-#define ch_file thisfile->file
-
-#define END_OF_CHAIN ((struct buf *)&thisfile->buf_next)
-#define END_OF_HCHAIN(h) ((struct buf *)&thisfile->hashtbl[h])
-#define BUFHASH(blk) ((blk) & (BUFHASH_SIZE-1))
-
-#define FOR_BUFS_IN_CHAIN(h,bp) \
- for (bp = thisfile->hashtbl[h].buf_hnext; \
- bp != END_OF_HCHAIN(h); bp = bp->hnext)
-
-#define HASH_RM(bp) \
- (bp)->hnext->hprev = (bp)->hprev; \
- (bp)->hprev->hnext = (bp)->hnext;
-
-#define HASH_INS(bp,h) \
- (bp)->hnext = thisfile->hashtbl[h].buf_hnext; \
- (bp)->hprev = END_OF_HCHAIN(h); \
- thisfile->hashtbl[h].buf_hnext->hprev = (bp); \
- thisfile->hashtbl[h].buf_hnext = (bp);
-
-static struct filestate *thisfile;
-static int ch_ungotchar = -1;
-static int maxbufs = -1;
-
-extern int autobuf;
-extern int sigs;
-extern int secure;
-extern int screen_trashed;
-extern int follow_mode;
-extern constant char helpdata[];
-extern constant int size_helpdata;
-extern IFILE curr_ifile;
-#if LOGFILE
-extern int logfile;
-extern char *namelogfile;
-#endif
-
-static int ch_addbuf();
-
-
-/*
- * Get the character pointed to by the read pointer.
- * ch_get() is a macro which is more efficient to call
- * than fch_get (the function), in the usual case
- * that the block desired is at the head of the chain.
- */
-#define ch_get() ((ch_block == ch_bufhead->block && \
- ch_offset < ch_bufhead->datasize) ? \
- ch_bufhead->data[ch_offset] : fch_get())
- int
-fch_get()
-{
- register struct buf *bp;
- register int n;
- register int slept;
- register int h;
- POSITION pos;
- POSITION len;
-
- if (thisfile == NULL)
- return (EOI);
-
- slept = FALSE;
-
- /*
- * Look for a buffer holding the desired block.
- */
- h = BUFHASH(ch_block);
- FOR_BUFS_IN_CHAIN(h, bp)
- {
- if (bp->block == ch_block)
- {
- if (ch_offset >= bp->datasize)
- /*
- * Need more data in this buffer.
- */
- goto read_more;
- goto found;
- }
- }
- /*
- * Block is not in a buffer.
- * Take the least recently used buffer
- * and read the desired block into it.
- * If the LRU buffer has data in it,
- * then maybe allocate a new buffer.
- */
- if (ch_buftail == END_OF_CHAIN || ch_buftail->block != -1)
- {
- /*
- * There is no empty buffer to use.
- * Allocate a new buffer if:
- * 1. We can't seek on this file and -b is not in effect; or
- * 2. We haven't allocated the max buffers for this file yet.
- */
- if ((autobuf && !(ch_flags & CH_CANSEEK)) ||
- (maxbufs < 0 || ch_nbufs < maxbufs))
- if (ch_addbuf())
- /*
- * Allocation failed: turn off autobuf.
- */
- autobuf = OPT_OFF;
- }
- bp = ch_buftail;
- HASH_RM(bp); /* Remove from old hash chain. */
- bp->block = ch_block;
- bp->datasize = 0;
- HASH_INS(bp, h); /* Insert into new hash chain. */
-
- read_more:
- pos = (ch_block * LBUFSIZE) + bp->datasize;
- if ((len = ch_length()) != NULL_POSITION && pos >= len)
- /*
- * At end of file.
- */
- return (EOI);
-
- if (pos != ch_fpos)
- {
- /*
- * Not at the correct position: must seek.
- * If input is a pipe, we're in trouble (can't seek on a pipe).
- * Some data has been lost: just return "?".
- */
- if (!(ch_flags & CH_CANSEEK))
- return ('?');
- if (lseek(ch_file, (off_t)pos, SEEK_SET) == BAD_LSEEK)
- {
- error("seek error", NULL_PARG);
- clear_eol();
- return (EOI);
- }
- ch_fpos = pos;
- }
-
- /*
- * Read the block.
- * If we read less than a full block, that's ok.
- * We use partial block and pick up the rest next time.
- */
- if (ch_ungotchar != -1)
- {
- bp->data[bp->datasize] = ch_ungotchar;
- n = 1;
- ch_ungotchar = -1;
- } else if (ch_flags & CH_HELPFILE)
- {
- bp->data[bp->datasize] = helpdata[ch_fpos];
- n = 1;
- } else
- {
- n = iread(ch_file, &bp->data[bp->datasize],
- (unsigned int)(LBUFSIZE - bp->datasize));
- }
-
- if (n == READ_INTR)
- return (EOI);
- if (n < 0)
- {
-#if MSDOS_COMPILER==WIN32C
- if (errno != EPIPE)
-#endif
- {
- error("read error", NULL_PARG);
- clear_eol();
- }
- n = 0;
- }
-
-#if LOGFILE
- /*
- * If we have a log file, write the new data to it.
- */
- if (!secure && logfile >= 0 && n > 0)
- write(logfile, (char *) &bp->data[bp->datasize], n);
-#endif
-
- ch_fpos += n;
- bp->datasize += n;
-
- /*
- * If we have read to end of file, set ch_fsize to indicate
- * the position of the end of file.
- */
- if (n == 0)
- {
- ch_fsize = pos;
- if (ignore_eoi)
- {
- /*
- * We are ignoring EOF.
- * Wait a while, then try again.
- */
- if (!slept)
- {
- PARG parg;
- parg.p_string = wait_message();
- ierror("%s", &parg);
- }
-#if !MSDOS_COMPILER
- sleep(1);
-#else
-#if MSDOS_COMPILER==WIN32C
- Sleep(1000);
-#endif
-#endif
- slept = TRUE;
-
-#if HAVE_STAT_INO
- if (follow_mode == FOLLOW_NAME)
- {
- /* See whether the file's i-number has changed.
- * If so, force the file to be closed and
- * reopened. */
- struct stat st;
- int r = stat(get_filename(curr_ifile), &st);
- if (r == 0 && (st.st_ino != curr_ino ||
- st.st_dev != curr_dev))
- {
- /* screen_trashed=2 causes
- * make_display to reopen the file. */
- screen_trashed = 2;
- return (EOI);
- }
- }
-#endif
- }
- if (sigs)
- return (EOI);
- }
-
- found:
- if (ch_bufhead != bp)
- {
- /*
- * Move the buffer to the head of the buffer chain.
- * This orders the buffer chain, most- to least-recently used.
- */
- bp->next->prev = bp->prev;
- bp->prev->next = bp->next;
- bp->next = ch_bufhead;
- bp->prev = END_OF_CHAIN;
- ch_bufhead->prev = bp;
- ch_bufhead = bp;
-
- /*
- * Move to head of hash chain too.
- */
- HASH_RM(bp);
- HASH_INS(bp, h);
- }
-
- if (ch_offset >= bp->datasize)
- /*
- * After all that, we still don't have enough data.
- * Go back and try again.
- */
- goto read_more;
-
- return (bp->data[ch_offset]);
-}
-
-/*
- * ch_ungetchar is a rather kludgy and limited way to push
- * a single char onto an input file descriptor.
- */
- public void
-ch_ungetchar(c)
- int c;
-{
- if (c != -1 && ch_ungotchar != -1)
- error("ch_ungetchar overrun", NULL_PARG);
- ch_ungotchar = c;
-}
-
-#if LOGFILE
-/*
- * Close the logfile.
- * If we haven't read all of standard input into it, do that now.
- */
- public void
-end_logfile()
-{
- static int tried = FALSE;
-
- if (logfile < 0)
- return;
- if (!tried && ch_fsize == NULL_POSITION)
- {
- tried = TRUE;
- ierror("Finishing logfile", NULL_PARG);
- while (ch_forw_get() != EOI)
- if (ABORT_SIGS())
- break;
- }
- close(logfile);
- logfile = -1;
- namelogfile = NULL;
-}
-
-/*
- * Start a log file AFTER less has already been running.
- * Invoked from the - command; see toggle_option().
- * Write all the existing buffered data to the log file.
- */
- public void
-sync_logfile()
-{
- register struct buf *bp;
- int warned = FALSE;
- BLOCKNUM block;
- BLOCKNUM nblocks;
-
- nblocks = (ch_fpos + LBUFSIZE - 1) / LBUFSIZE;
- for (block = 0; block < nblocks; block++)
- {
- for (bp = ch_bufhead; ; bp = bp->next)
- {
- if (bp == END_OF_CHAIN)
- {
- if (!warned)
- {
- error("Warning: log file is incomplete",
- NULL_PARG);
- warned = TRUE;
- }
- break;
- }
- if (bp->block == block)
- {
- write(logfile, (char *) bp->data, bp->datasize);
- break;
- }
- }
- }
-}
-
-#endif
-
-/*
- * Determine if a specific block is currently in one of the buffers.
- */
- static int
-buffered(block)
- BLOCKNUM block;
-{
- register struct buf *bp;
- register int h;
-
- h = BUFHASH(block);
- FOR_BUFS_IN_CHAIN(h, bp)
- {
- if (bp->block == block)
- return (TRUE);
- }
- return (FALSE);
-}
-
-/*
- * Seek to a specified position in the file.
- * Return 0 if successful, non-zero if can't seek there.
- */
- public int
-ch_seek(pos)
- register POSITION pos;
-{
- BLOCKNUM new_block;
- POSITION len;
-
- if (thisfile == NULL)
- return (0);
-
- len = ch_length();
- if (pos < ch_zero() || (len != NULL_POSITION && pos > len))
- return (1);
-
- new_block = pos / LBUFSIZE;
- if (!(ch_flags & CH_CANSEEK) && pos != ch_fpos && !buffered(new_block))
- {
- if (ch_fpos > pos)
- return (1);
- while (ch_fpos < pos)
- {
- if (ch_forw_get() == EOI)
- return (1);
- if (ABORT_SIGS())
- return (1);
- }
- return (0);
- }
- /*
- * Set read pointer.
- */
- ch_block = new_block;
- ch_offset = pos % LBUFSIZE;
- return (0);
-}
-
-/*
- * Seek to the end of the file.
- */
- public int
-ch_end_seek()
-{
- POSITION len;
-
- if (thisfile == NULL)
- return (0);
-
- if (ch_flags & CH_CANSEEK)
- ch_fsize = filesize(ch_file);
-
- len = ch_length();
- if (len != NULL_POSITION)
- return (ch_seek(len));
-
- /*
- * Do it the slow way: read till end of data.
- */
- while (ch_forw_get() != EOI)
- if (ABORT_SIGS())
- return (1);
- return (0);
-}
-
-/*
- * Seek to the beginning of the file, or as close to it as we can get.
- * We may not be able to seek there if input is a pipe and the
- * beginning of the pipe is no longer buffered.
- */
- public int
-ch_beg_seek()
-{
- register struct buf *bp, *firstbp;
-
- /*
- * Try a plain ch_seek first.
- */
- if (ch_seek(ch_zero()) == 0)
- return (0);
-
- /*
- * Can't get to position 0.
- * Look thru the buffers for the one closest to position 0.
- */
- firstbp = bp = ch_bufhead;
- if (bp == END_OF_CHAIN)
- return (1);
- while ((bp = bp->next) != END_OF_CHAIN)
- if (bp->block < firstbp->block)
- firstbp = bp;
- ch_block = firstbp->block;
- ch_offset = 0;
- return (0);
-}
-
-/*
- * Return the length of the file, if known.
- */
- public POSITION
-ch_length()
-{
- if (thisfile == NULL)
- return (NULL_POSITION);
- if (ignore_eoi)
- return (NULL_POSITION);
- if (ch_flags & CH_HELPFILE)
- return (size_helpdata);
- return (ch_fsize);
-}
-
-/*
- * Return the current position in the file.
- */
- public POSITION
-ch_tell()
-{
- if (thisfile == NULL)
- return (NULL_POSITION);
- return (ch_block * LBUFSIZE) + ch_offset;
-}
-
-/*
- * Get the current char and post-increment the read pointer.
- */
- public int
-ch_forw_get()
-{
- register int c;
-
- if (thisfile == NULL)
- return (EOI);
- c = ch_get();
- if (c == EOI)
- return (EOI);
- if (ch_offset < LBUFSIZE-1)
- ch_offset++;
- else
- {
- ch_block ++;
- ch_offset = 0;
- }
- return (c);
-}
-
-/*
- * Pre-decrement the read pointer and get the new current char.
- */
- public int
-ch_back_get()
-{
- if (thisfile == NULL)
- return (EOI);
- if (ch_offset > 0)
- ch_offset --;
- else
- {
- if (ch_block <= 0)
- return (EOI);
- if (!(ch_flags & CH_CANSEEK) && !buffered(ch_block-1))
- return (EOI);
- ch_block--;
- ch_offset = LBUFSIZE-1;
- }
- return (ch_get());
-}
-
-/*
- * Set max amount of buffer space.
- * bufspace is in units of 1024 bytes. -1 mean no limit.
- */
- public void
-ch_setbufspace(bufspace)
- int bufspace;
-{
- if (bufspace < 0)
- maxbufs = -1;
- else
- {
- maxbufs = ((bufspace * 1024) + LBUFSIZE-1) / LBUFSIZE;
- if (maxbufs < 1)
- maxbufs = 1;
- }
-}
-
-/*
- * Flush (discard) any saved file state, including buffer contents.
- */
- public void
-ch_flush()
-{
- register struct buf *bp;
-
- if (thisfile == NULL)
- return;
-
- if (!(ch_flags & CH_CANSEEK))
- {
- /*
- * If input is a pipe, we don't flush buffer contents,
- * since the contents can't be recovered.
- */
- ch_fsize = NULL_POSITION;
- return;
- }
-
- /*
- * Initialize all the buffers.
- */
- for (bp = ch_bufhead; bp != END_OF_CHAIN; bp = bp->next)
- bp->block = -1;
-
- /*
- * Figure out the size of the file, if we can.
- */
- ch_fsize = filesize(ch_file);
-
- /*
- * Seek to a known position: the beginning of the file.
- */
- ch_fpos = 0;
- ch_block = 0; /* ch_fpos / LBUFSIZE; */
- ch_offset = 0; /* ch_fpos % LBUFSIZE; */
-
-#if 1
- /*
- * This is a kludge to workaround a Linux kernel bug: files in
- * /proc have a size of 0 according to fstat() but have readable
- * data. They are sometimes, but not always, seekable.
- * Force them to be non-seekable here.
- */
- if (ch_fsize == 0)
- {
- ch_fsize = NULL_POSITION;
- ch_flags &= ~CH_CANSEEK;
- }
-#endif
-
- if (lseek(ch_file, (off_t)0, SEEK_SET) == BAD_LSEEK)
- {
- /*
- * Warning only; even if the seek fails for some reason,
- * there's a good chance we're at the beginning anyway.
- * {{ I think this is bogus reasoning. }}
- */
- error("seek error to 0", NULL_PARG);
- }
-}
-
-/*
- * Allocate a new buffer.
- * The buffer is added to the tail of the buffer chain.
- */
- static int
-ch_addbuf()
-{
- register struct buf *bp;
-
- /*
- * Allocate and initialize a new buffer and link it
- * onto the tail of the buffer list.
- */
- bp = (struct buf *) calloc(1, sizeof(struct buf));
- if (bp == NULL)
- return (1);
- ch_nbufs++;
- bp->block = -1;
- bp->next = END_OF_CHAIN;
- bp->prev = ch_buftail;
- ch_buftail->next = bp;
- ch_buftail = bp;
- HASH_INS(bp, 0);
- return (0);
-}
-
-/*
- *
- */
- static void
-init_hashtbl()
-{
- register int h;
-
- for (h = 0; h < BUFHASH_SIZE; h++)
- {
- thisfile->hashtbl[h].buf_hnext = END_OF_HCHAIN(h);
- thisfile->hashtbl[h].buf_hprev = END_OF_HCHAIN(h);
- }
-}
-
-/*
- * Delete all buffers for this file.
- */
- static void
-ch_delbufs()
-{
- register struct buf *bp;
-
- while (ch_bufhead != END_OF_CHAIN)
- {
- bp = ch_bufhead;
- bp->next->prev = bp->prev;
- bp->prev->next = bp->next;
- free(bp);
- }
- ch_nbufs = 0;
- init_hashtbl();
-}
-
-/*
- * Is it possible to seek on a file descriptor?
- */
- public int
-seekable(f)
- int f;
-{
-#if MSDOS_COMPILER
- extern int fd0;
- if (f == fd0 && !isatty(fd0))
- {
- /*
- * In MS-DOS, pipes are seekable. Check for
- * standard input, and pretend it is not seekable.
- */
- return (0);
- }
-#endif
- return (lseek(f, (off_t)1, SEEK_SET) != BAD_LSEEK);
-}
-
-/*
- * Initialize file state for a new file.
- */
- public void
-ch_init(f, flags)
- int f;
- int flags;
-{
- /*
- * See if we already have a filestate for this file.
- */
- thisfile = (struct filestate *) get_filestate(curr_ifile);
- if (thisfile == NULL)
- {
- /*
- * Allocate and initialize a new filestate.
- */
- thisfile = (struct filestate *)
- calloc(1, sizeof(struct filestate));
- thisfile->buf_next = thisfile->buf_prev = END_OF_CHAIN;
- thisfile->nbufs = 0;
- thisfile->flags = 0;
- thisfile->fpos = 0;
- thisfile->block = 0;
- thisfile->offset = 0;
- thisfile->file = -1;
- thisfile->fsize = NULL_POSITION;
- ch_flags = flags;
- init_hashtbl();
- /*
- * Try to seek; set CH_CANSEEK if it works.
- */
- if ((flags & CH_CANSEEK) && !seekable(f))
- ch_flags &= ~CH_CANSEEK;
- set_filestate(curr_ifile, (void *) thisfile);
- }
- if (thisfile->file == -1)
- thisfile->file = f;
- ch_flush();
-}
-
-/*
- * Close a filestate.
- */
- public void
-ch_close()
-{
- int keepstate = FALSE;
-
- if (thisfile == NULL)
- return;
-
- if (ch_flags & (CH_CANSEEK|CH_POPENED|CH_HELPFILE))
- {
- /*
- * We can seek or re-open, so we don't need to keep buffers.
- */
- ch_delbufs();
- } else
- keepstate = TRUE;
- if (!(ch_flags & CH_KEEPOPEN))
- {
- /*
- * We don't need to keep the file descriptor open
- * (because we can re-open it.)
- * But don't really close it if it was opened via popen(),
- * because pclose() wants to close it.
- */
- if (!(ch_flags & (CH_POPENED|CH_HELPFILE)))
- close(ch_file);
- ch_file = -1;
- } else
- keepstate = TRUE;
- if (!keepstate)
- {
- /*
- * We don't even need to keep the filestate structure.
- */
- free(thisfile);
- thisfile = NULL;
- set_filestate(curr_ifile, (void *) NULL);
- }
-}
-
-/*
- * Return ch_flags for the current file.
- */
- public int
-ch_getflags()
-{
- if (thisfile == NULL)
- return (0);
- return (ch_flags);
-}
-
-#if 0
- public void
-ch_dump(struct filestate *fs)
-{
- struct buf *bp;
- unsigned char *s;
-
- if (fs == NULL)
- {
- printf(" --no filestate\n");
- return;
- }
- printf(" file %d, flags %x, fpos %x, fsize %x, blk/off %x/%x\n",
- fs->file, fs->flags, fs->fpos,
- fs->fsize, fs->block, fs->offset);
- printf(" %d bufs:\n", fs->nbufs);
- for (bp = fs->buf_next; bp != (struct buf *)fs; bp = bp->next)
- {
- printf("%x: blk %x, size %x \"",
- bp, bp->block, bp->datasize);
- for (s = bp->data; s < bp->data + 30; s++)
- if (*s >= ' ' && *s < 0x7F)
- printf("%c", *s);
- else
- printf(".");
- printf("\"\n");
- }
-}
-#endif
diff --git a/contrib/less/charset.c b/contrib/less/charset.c
deleted file mode 100644
index 37d344d..0000000
--- a/contrib/less/charset.c
+++ /dev/null
@@ -1,1167 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Functions to define the character set
- * and do things specific to the character set.
- */
-
-#include "less.h"
-#if HAVE_LOCALE
-#include <locale.h>
-#include <ctype.h>
-#include <langinfo.h>
-#endif
-
-#include "charset.h"
-
-public int utf_mode = 0;
-
-/*
- * Predefined character sets,
- * selected by the LESSCHARSET environment variable.
- */
-struct charset {
- char *name;
- int *p_flag;
- char *desc;
-} charsets[] = {
- { "ascii", NULL, "8bcccbcc18b95.b" },
- { "utf-8", &utf_mode, "8bcccbcc18b95.b126.bb" },
- { "iso8859", NULL, "8bcccbcc18b95.33b." },
- { "latin3", NULL, "8bcccbcc18b95.33b5.b8.b15.b4.b12.b18.b12.b." },
- { "arabic", NULL, "8bcccbcc18b95.33b.3b.7b2.13b.3b.b26.5b19.b" },
- { "greek", NULL, "8bcccbcc18b95.33b4.2b4.b3.b35.b44.b" },
- { "greek2005", NULL, "8bcccbcc18b95.33b14.b35.b44.b" },
- { "hebrew", NULL, "8bcccbcc18b95.33b.b29.32b28.2b2.b" },
- { "koi8-r", NULL, "8bcccbcc18b95.b." },
- { "KOI8-T", NULL, "8bcccbcc18b95.b8.b6.b8.b.b.5b7.3b4.b4.b3.b.b.3b." },
- { "georgianps", NULL, "8bcccbcc18b95.3b11.4b12.2b." },
- { "tcvn", NULL, "b..b...bcccbccbbb7.8b95.b48.5b." },
- { "TIS-620", NULL, "8bcccbcc18b95.b.4b.11b7.8b." },
- { "next", NULL, "8bcccbcc18b95.bb125.bb" },
- { "dos", NULL, "8bcccbcc12bc5b95.b." },
- { "windows-1251", NULL, "8bcccbcc12bc5b95.b24.b." },
- { "windows-1252", NULL, "8bcccbcc12bc5b95.b.b11.b.2b12.b." },
- { "windows-1255", NULL, "8bcccbcc12bc5b95.b.b8.b.5b9.b.4b." },
- { "ebcdic", NULL, "5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b." },
- { "IBM-1047", NULL, "4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc191.b" },
- { NULL, NULL, NULL }
-};
-
-/*
- * Support "locale charmap"/nl_langinfo(CODESET) values, as well as others.
- */
-struct cs_alias {
- char *name;
- char *oname;
-} cs_aliases[] = {
- { "UTF-8", "utf-8" },
- { "ANSI_X3.4-1968", "ascii" },
- { "US-ASCII", "ascii" },
- { "latin1", "iso8859" },
- { "ISO-8859-1", "iso8859" },
- { "latin9", "iso8859" },
- { "ISO-8859-15", "iso8859" },
- { "latin2", "iso8859" },
- { "ISO-8859-2", "iso8859" },
- { "ISO-8859-3", "latin3" },
- { "latin4", "iso8859" },
- { "ISO-8859-4", "iso8859" },
- { "cyrillic", "iso8859" },
- { "ISO-8859-5", "iso8859" },
- { "ISO-8859-6", "arabic" },
- { "ISO-8859-7", "greek" },
- { "IBM9005", "greek2005" },
- { "ISO-8859-8", "hebrew" },
- { "latin5", "iso8859" },
- { "ISO-8859-9", "iso8859" },
- { "latin6", "iso8859" },
- { "ISO-8859-10", "iso8859" },
- { "latin7", "iso8859" },
- { "ISO-8859-13", "iso8859" },
- { "latin8", "iso8859" },
- { "ISO-8859-14", "iso8859" },
- { "latin10", "iso8859" },
- { "ISO-8859-16", "iso8859" },
- { "IBM437", "dos" },
- { "EBCDIC-US", "ebcdic" },
- { "IBM1047", "IBM-1047" },
- { "KOI8-R", "koi8-r" },
- { "KOI8-U", "koi8-r" },
- { "GEORGIAN-PS", "georgianps" },
- { "TCVN5712-1", "tcvn" },
- { "NEXTSTEP", "next" },
- { "windows", "windows-1252" }, /* backward compatibility */
- { "CP1251", "windows-1251" },
- { "CP1252", "windows-1252" },
- { "CP1255", "windows-1255" },
- { NULL, NULL }
-};
-
-#define IS_BINARY_CHAR 01
-#define IS_CONTROL_CHAR 02
-
-static char chardef[256];
-static char *binfmt = NULL;
-static char *utfbinfmt = NULL;
-public int binattr = AT_STANDOUT;
-
-
-/*
- * Define a charset, given a description string.
- * The string consists of 256 letters,
- * one for each character in the charset.
- * If the string is shorter than 256 letters, missing letters
- * are taken to be identical to the last one.
- * A decimal number followed by a letter is taken to be a
- * repetition of the letter.
- *
- * Each letter is one of:
- * . normal character
- * b binary character
- * c control character
- */
- static void
-ichardef(s)
- char *s;
-{
- register char *cp;
- register int n;
- register char v;
-
- n = 0;
- v = 0;
- cp = chardef;
- while (*s != '\0')
- {
- switch (*s++)
- {
- case '.':
- v = 0;
- break;
- case 'c':
- v = IS_CONTROL_CHAR;
- break;
- case 'b':
- v = IS_BINARY_CHAR|IS_CONTROL_CHAR;
- break;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- n = (10 * n) + (s[-1] - '0');
- continue;
-
- default:
- error("invalid chardef", NULL_PARG);
- quit(QUIT_ERROR);
- /*NOTREACHED*/
- }
-
- do
- {
- if (cp >= chardef + sizeof(chardef))
- {
- error("chardef longer than 256", NULL_PARG);
- quit(QUIT_ERROR);
- /*NOTREACHED*/
- }
- *cp++ = v;
- } while (--n > 0);
- n = 0;
- }
-
- while (cp < chardef + sizeof(chardef))
- *cp++ = v;
-}
-
-/*
- * Define a charset, given a charset name.
- * The valid charset names are listed in the "charsets" array.
- */
- static int
-icharset(name, no_error)
- register char *name;
- int no_error;
-{
- register struct charset *p;
- register struct cs_alias *a;
-
- if (name == NULL || *name == '\0')
- return (0);
-
- /* First see if the name is an alias. */
- for (a = cs_aliases; a->name != NULL; a++)
- {
- if (strcmp(name, a->name) == 0)
- {
- name = a->oname;
- break;
- }
- }
-
- for (p = charsets; p->name != NULL; p++)
- {
- if (strcmp(name, p->name) == 0)
- {
- ichardef(p->desc);
- if (p->p_flag != NULL)
- *(p->p_flag) = 1;
- return (1);
- }
- }
-
- if (!no_error) {
- error("invalid charset name", NULL_PARG);
- quit(QUIT_ERROR);
- }
- return (0);
-}
-
-#if HAVE_LOCALE
-/*
- * Define a charset, given a locale name.
- */
- static void
-ilocale()
-{
- register int c;
-
- for (c = 0; c < (int) sizeof(chardef); c++)
- {
- if (isprint(c))
- chardef[c] = 0;
- else if (iscntrl(c))
- chardef[c] = IS_CONTROL_CHAR;
- else
- chardef[c] = IS_BINARY_CHAR|IS_CONTROL_CHAR;
- }
-}
-#endif
-
-/*
- * Define the printing format for control (or binary utf) chars.
- */
- static void
-setbinfmt(s, fmtvarptr, default_fmt)
- char *s;
- char **fmtvarptr;
- char *default_fmt;
-{
- if (s && utf_mode)
- {
- /* It would be too hard to account for width otherwise. */
- char *t = s;
- while (*t)
- {
- if (*t < ' ' || *t > '~')
- {
- s = default_fmt;
- goto attr;
- }
- t++;
- }
- }
-
- /* %n is evil */
- if (s == NULL || *s == '\0' ||
- (*s == '*' && (s[1] == '\0' || s[2] == '\0' || strchr(s + 2, 'n'))) ||
- (*s != '*' && strchr(s, 'n')))
- s = default_fmt;
-
- /*
- * Select the attributes if it starts with "*".
- */
- attr:
- if (*s == '*')
- {
- switch (s[1])
- {
- case 'd': binattr = AT_BOLD; break;
- case 'k': binattr = AT_BLINK; break;
- case 's': binattr = AT_STANDOUT; break;
- case 'u': binattr = AT_UNDERLINE; break;
- default: binattr = AT_NORMAL; break;
- }
- s += 2;
- }
- *fmtvarptr = s;
-}
-
-/*
- *
- */
- static void
-set_charset()
-{
- char *s;
-
- /*
- * See if environment variable LESSCHARSET is defined.
- */
- s = lgetenv("LESSCHARSET");
- if (icharset(s, 0))
- return;
-
- /*
- * LESSCHARSET is not defined: try LESSCHARDEF.
- */
- s = lgetenv("LESSCHARDEF");
- if (s != NULL && *s != '\0')
- {
- ichardef(s);
- return;
- }
-
-#if HAVE_LOCALE
-#ifdef CODESET
- /*
- * Try using the codeset name as the charset name.
- */
- s = nl_langinfo(CODESET);
- if (icharset(s, 1))
- return;
-#endif
-#endif
-
-#if HAVE_STRSTR
- /*
- * Check whether LC_ALL, LC_CTYPE or LANG look like UTF-8 is used.
- */
- if ((s = lgetenv("LC_ALL")) != NULL ||
- (s = lgetenv("LC_CTYPE")) != NULL ||
- (s = lgetenv("LANG")) != NULL)
- {
- if ( strstr(s, "UTF-8") != NULL || strstr(s, "utf-8") != NULL
- || strstr(s, "UTF8") != NULL || strstr(s, "utf8") != NULL)
- if (icharset("utf-8", 1))
- return;
- }
-#endif
-
-#if HAVE_LOCALE
- /*
- * Get character definitions from locale functions,
- * rather than from predefined charset entry.
- */
- ilocale();
-#if MSDOS_COMPILER
- /*
- * Default to "dos".
- */
- (void) icharset("dos", 1);
-#else
- /*
- * Default to "latin1".
- */
- (void) icharset("latin1", 1);
-#endif
-#endif
-}
-
-/*
- * Initialize charset data structures.
- */
- public void
-init_charset()
-{
- char *s;
-
-#if HAVE_LOCALE
- setlocale(LC_ALL, "");
-#endif
-
- set_charset();
-
- s = lgetenv("LESSBINFMT");
- setbinfmt(s, &binfmt, "*s<%02X>");
-
- s = lgetenv("LESSUTFBINFMT");
- setbinfmt(s, &utfbinfmt, "<U+%04lX>");
-}
-
-/*
- * Is a given character a "binary" character?
- */
- public int
-binary_char(c)
- unsigned char c;
-{
- c &= 0377;
- return (chardef[c] & IS_BINARY_CHAR);
-}
-
-/*
- * Is a given character a "control" character?
- */
- public int
-control_char(c)
- int c;
-{
- c &= 0377;
- return (chardef[c] & IS_CONTROL_CHAR);
-}
-
-/*
- * Return the printable form of a character.
- * For example, in the "ascii" charset '\3' is printed as "^C".
- */
- public char *
-prchar(c)
- int c;
-{
- /* {{ This buffer can be overrun if LESSBINFMT is a long string. }} */
- static char buf[32];
-
- c &= 0377;
- if ((c < 128 || !utf_mode) && !control_char(c))
- SNPRINTF1(buf, sizeof(buf), "%c", c);
- else if (c == ESC)
- strcpy(buf, "ESC");
-#if IS_EBCDIC_HOST
- else if (!binary_char(c) && c < 64)
- SNPRINTF1(buf, sizeof(buf), "^%c",
- /*
- * This array roughly inverts CONTROL() #defined in less.h,
- * and should be kept in sync with CONTROL() and IBM-1047.
- */
- "@ABC.I.?...KLMNO"
- "PQRS.JH.XY.."
- "\\]^_"
- "......W[.....EFG"
- "..V....D....TU.Z"[c]);
-#else
- else if (c < 128 && !control_char(c ^ 0100))
- SNPRINTF1(buf, sizeof(buf), "^%c", c ^ 0100);
-#endif
- else
- SNPRINTF1(buf, sizeof(buf), binfmt, c);
- return (buf);
-}
-
-/*
- * Return the printable form of a UTF-8 character.
- */
- public char *
-prutfchar(ch)
- LWCHAR ch;
-{
- static char buf[32];
-
- if (ch == ESC)
- strcpy(buf, "ESC");
- else if (ch < 128 && control_char(ch))
- {
- if (!control_char(ch ^ 0100))
- SNPRINTF1(buf, sizeof(buf), "^%c", ((char) ch) ^ 0100);
- else
- SNPRINTF1(buf, sizeof(buf), binfmt, (char) ch);
- } else if (is_ubin_char(ch))
- SNPRINTF1(buf, sizeof(buf), utfbinfmt, ch);
- else
- {
- int len;
- if (ch >= 0x80000000)
- {
- len = 3;
- ch = 0xFFFD;
- } else
- {
- len = (ch < 0x80) ? 1
- : (ch < 0x800) ? 2
- : (ch < 0x10000) ? 3
- : (ch < 0x200000) ? 4
- : (ch < 0x4000000) ? 5
- : 6;
- }
- buf[len] = '\0';
- if (len == 1)
- *buf = (char) ch;
- else
- {
- *buf = ((1 << len) - 1) << (8 - len);
- while (--len > 0)
- {
- buf[len] = (char) (0x80 | (ch & 0x3F));
- ch >>= 6;
- }
- *buf |= ch;
- }
- }
- return (buf);
-}
-
-/*
- * Get the length of a UTF-8 character in bytes.
- */
- public int
-utf_len(ch)
- char ch;
-{
- if ((ch & 0x80) == 0)
- return 1;
- if ((ch & 0xE0) == 0xC0)
- return 2;
- if ((ch & 0xF0) == 0xE0)
- return 3;
- if ((ch & 0xF8) == 0xF0)
- return 4;
- if ((ch & 0xFC) == 0xF8)
- return 5;
- if ((ch & 0xFE) == 0xFC)
- return 6;
- /* Invalid UTF-8 encoding. */
- return 1;
-}
-
-/*
- * Is a UTF-8 character well-formed?
- */
- public int
-is_utf8_well_formed(s)
- unsigned char *s;
-{
- int i;
- int len;
-
- if (IS_UTF8_INVALID(s[0]))
- return (0);
-
- len = utf_len((char) s[0]);
- if (len == 1)
- return (1);
- if (len == 2)
- {
- if (s[0] < 0xC2)
- return (0);
- } else
- {
- unsigned char mask;
- mask = (~((1 << (8-len)) - 1)) & 0xFF;
- if (s[0] == mask && (s[1] & mask) == 0x80)
- return (0);
- }
-
- for (i = 1; i < len; i++)
- if (!IS_UTF8_TRAIL(s[i]))
- return (0);
- return (1);
-}
-
-/*
- * Get the value of a UTF-8 character.
- */
- public LWCHAR
-get_wchar(p)
- char *p;
-{
- switch (utf_len(p[0]))
- {
- case 1:
- default:
- /* 0xxxxxxx */
- return (LWCHAR)
- (p[0] & 0xFF);
- case 2:
- /* 110xxxxx 10xxxxxx */
- return (LWCHAR) (
- ((p[0] & 0x1F) << 6) |
- (p[1] & 0x3F));
- case 3:
- /* 1110xxxx 10xxxxxx 10xxxxxx */
- return (LWCHAR) (
- ((p[0] & 0x0F) << 12) |
- ((p[1] & 0x3F) << 6) |
- (p[2] & 0x3F));
- case 4:
- /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
- return (LWCHAR) (
- ((p[0] & 0x07) << 18) |
- ((p[1] & 0x3F) << 12) |
- ((p[2] & 0x3F) << 6) |
- (p[3] & 0x3F));
- case 5:
- /* 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */
- return (LWCHAR) (
- ((p[0] & 0x03) << 24) |
- ((p[1] & 0x3F) << 18) |
- ((p[2] & 0x3F) << 12) |
- ((p[3] & 0x3F) << 6) |
- (p[4] & 0x3F));
- case 6:
- /* 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */
- return (LWCHAR) (
- ((p[0] & 0x01) << 30) |
- ((p[1] & 0x3F) << 24) |
- ((p[2] & 0x3F) << 18) |
- ((p[3] & 0x3F) << 12) |
- ((p[4] & 0x3F) << 6) |
- (p[5] & 0x3F));
- }
-}
-
-/*
- * Store a character into a UTF-8 string.
- */
- public void
-put_wchar(pp, ch)
- char **pp;
- LWCHAR ch;
-{
- if (!utf_mode || ch < 0x80)
- {
- /* 0xxxxxxx */
- *(*pp)++ = (char) ch;
- } else if (ch < 0x800)
- {
- /* 110xxxxx 10xxxxxx */
- *(*pp)++ = (char) (0xC0 | ((ch >> 6) & 0x1F));
- *(*pp)++ = (char) (0x80 | (ch & 0x3F));
- } else if (ch < 0x10000)
- {
- /* 1110xxxx 10xxxxxx 10xxxxxx */
- *(*pp)++ = (char) (0xE0 | ((ch >> 12) & 0x0F));
- *(*pp)++ = (char) (0x80 | ((ch >> 6) & 0x3F));
- *(*pp)++ = (char) (0x80 | (ch & 0x3F));
- } else if (ch < 0x200000)
- {
- /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
- *(*pp)++ = (char) (0xF0 | ((ch >> 18) & 0x07));
- *(*pp)++ = (char) (0x80 | ((ch >> 12) & 0x3F));
- *(*pp)++ = (char) (0x80 | ((ch >> 6) & 0x3F));
- *(*pp)++ = (char) (0x80 | (ch & 0x3F));
- } else if (ch < 0x4000000)
- {
- /* 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */
- *(*pp)++ = (char) (0xF0 | ((ch >> 24) & 0x03));
- *(*pp)++ = (char) (0x80 | ((ch >> 18) & 0x3F));
- *(*pp)++ = (char) (0x80 | ((ch >> 12) & 0x3F));
- *(*pp)++ = (char) (0x80 | ((ch >> 6) & 0x3F));
- *(*pp)++ = (char) (0x80 | (ch & 0x3F));
- } else
- {
- /* 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */
- *(*pp)++ = (char) (0xF0 | ((ch >> 30) & 0x01));
- *(*pp)++ = (char) (0x80 | ((ch >> 24) & 0x3F));
- *(*pp)++ = (char) (0x80 | ((ch >> 18) & 0x3F));
- *(*pp)++ = (char) (0x80 | ((ch >> 12) & 0x3F));
- *(*pp)++ = (char) (0x80 | ((ch >> 6) & 0x3F));
- *(*pp)++ = (char) (0x80 | (ch & 0x3F));
- }
-}
-
-/*
- * Step forward or backward one character in a string.
- */
- public LWCHAR
-step_char(pp, dir, limit)
- char **pp;
- signed int dir;
- char *limit;
-{
- LWCHAR ch;
- int len;
- char *p = *pp;
-
- if (!utf_mode)
- {
- /* It's easy if chars are one byte. */
- if (dir > 0)
- ch = (LWCHAR) ((p < limit) ? *p++ : 0);
- else
- ch = (LWCHAR) ((p > limit) ? *--p : 0);
- } else if (dir > 0)
- {
- len = utf_len(*p);
- if (p + len > limit)
- {
- ch = 0;
- p = limit;
- } else
- {
- ch = get_wchar(p);
- p += len;
- }
- } else
- {
- while (p > limit && IS_UTF8_TRAIL(p[-1]))
- p--;
- if (p > limit)
- ch = get_wchar(--p);
- else
- ch = 0;
- }
- *pp = p;
- return ch;
-}
-
-/*
- * Unicode characters data
- */
-struct wchar_range { LWCHAR first, last; };
-
-/*
- * Characters with general category values
- * Mn: Mark, Nonspacing
- * Me: Mark, Enclosing
- * Last synched with
- * <http://www.unicode.org/Public/5.0.0/ucd/UnicodeData-5.0.0d7.txt>
- * dated 2005-11-30T00:58:48Z
- */
-static struct wchar_range comp_table[] = {
- { 0x0300, 0x036F} /* Mn */, { 0x0483, 0x0486} /* Mn */,
- { 0x0488, 0x0489} /* Me */,
- { 0x0591, 0x05BD} /* Mn */, { 0x05BF, 0x05BF} /* Mn */,
- { 0x05C1, 0x05C2} /* Mn */, { 0x05C4, 0x05C5} /* Mn */,
- { 0x05C7, 0x05C7} /* Mn */, { 0x0610, 0x0615} /* Mn */,
- { 0x064B, 0x065E} /* Mn */, { 0x0670, 0x0670} /* Mn */,
- { 0x06D6, 0x06DC} /* Mn */,
- { 0x06DE, 0x06DE} /* Me */,
- { 0x06DF, 0x06E4} /* Mn */, { 0x06E7, 0x06E8} /* Mn */,
- { 0x06EA, 0x06ED} /* Mn */, { 0x0711, 0x0711} /* Mn */,
- { 0x0730, 0x074A} /* Mn */, { 0x07A6, 0x07B0} /* Mn */,
- { 0x07EB, 0x07F3} /* Mn */, { 0x0901, 0x0902} /* Mn */,
- { 0x093C, 0x093C} /* Mn */, { 0x0941, 0x0948} /* Mn */,
- { 0x094D, 0x094D} /* Mn */, { 0x0951, 0x0954} /* Mn */,
- { 0x0962, 0x0963} /* Mn */, { 0x0981, 0x0981} /* Mn */,
- { 0x09BC, 0x09BC} /* Mn */, { 0x09C1, 0x09C4} /* Mn */,
- { 0x09CD, 0x09CD} /* Mn */, { 0x09E2, 0x09E3} /* Mn */,
- { 0x0A01, 0x0A02} /* Mn */, { 0x0A3C, 0x0A3C} /* Mn */,
- { 0x0A41, 0x0A42} /* Mn */, { 0x0A47, 0x0A48} /* Mn */,
- { 0x0A4B, 0x0A4D} /* Mn */, { 0x0A70, 0x0A71} /* Mn */,
- { 0x0A81, 0x0A82} /* Mn */, { 0x0ABC, 0x0ABC} /* Mn */,
- { 0x0AC1, 0x0AC5} /* Mn */, { 0x0AC7, 0x0AC8} /* Mn */,
- { 0x0ACD, 0x0ACD} /* Mn */, { 0x0AE2, 0x0AE3} /* Mn */,
- { 0x0B01, 0x0B01} /* Mn */, { 0x0B3C, 0x0B3C} /* Mn */,
- { 0x0B3F, 0x0B3F} /* Mn */, { 0x0B41, 0x0B43} /* Mn */,
- { 0x0B4D, 0x0B4D} /* Mn */, { 0x0B56, 0x0B56} /* Mn */,
- { 0x0B82, 0x0B82} /* Mn */, { 0x0BC0, 0x0BC0} /* Mn */,
- { 0x0BCD, 0x0BCD} /* Mn */, { 0x0C3E, 0x0C40} /* Mn */,
- { 0x0C46, 0x0C48} /* Mn */, { 0x0C4A, 0x0C4D} /* Mn */,
- { 0x0C55, 0x0C56} /* Mn */, { 0x0CBC, 0x0CBC} /* Mn */,
- { 0x0CBF, 0x0CBF} /* Mn */, { 0x0CC6, 0x0CC6} /* Mn */,
- { 0x0CCC, 0x0CCD} /* Mn */, { 0x0CE2, 0x0CE3} /* Mn */,
- { 0x0D41, 0x0D43} /* Mn */, { 0x0D4D, 0x0D4D} /* Mn */,
- { 0x0DCA, 0x0DCA} /* Mn */, { 0x0DD2, 0x0DD4} /* Mn */,
- { 0x0DD6, 0x0DD6} /* Mn */, { 0x0E31, 0x0E31} /* Mn */,
- { 0x0E34, 0x0E3A} /* Mn */, { 0x0E47, 0x0E4E} /* Mn */,
- { 0x0EB1, 0x0EB1} /* Mn */, { 0x0EB4, 0x0EB9} /* Mn */,
- { 0x0EBB, 0x0EBC} /* Mn */, { 0x0EC8, 0x0ECD} /* Mn */,
- { 0x0F18, 0x0F19} /* Mn */, { 0x0F35, 0x0F35} /* Mn */,
- { 0x0F37, 0x0F37} /* Mn */, { 0x0F39, 0x0F39} /* Mn */,
- { 0x0F71, 0x0F7E} /* Mn */, { 0x0F80, 0x0F84} /* Mn */,
- { 0x0F86, 0x0F87} /* Mn */, { 0x0F90, 0x0F97} /* Mn */,
- { 0x0F99, 0x0FBC} /* Mn */, { 0x0FC6, 0x0FC6} /* Mn */,
- { 0x102D, 0x1030} /* Mn */, { 0x1032, 0x1032} /* Mn */,
- { 0x1036, 0x1037} /* Mn */, { 0x1039, 0x1039} /* Mn */,
- { 0x1058, 0x1059} /* Mn */, { 0x135F, 0x135F} /* Mn */,
- { 0x1712, 0x1714} /* Mn */, { 0x1732, 0x1734} /* Mn */,
- { 0x1752, 0x1753} /* Mn */, { 0x1772, 0x1773} /* Mn */,
- { 0x17B7, 0x17BD} /* Mn */, { 0x17C6, 0x17C6} /* Mn */,
- { 0x17C9, 0x17D3} /* Mn */, { 0x17DD, 0x17DD} /* Mn */,
- { 0x180B, 0x180D} /* Mn */, { 0x18A9, 0x18A9} /* Mn */,
- { 0x1920, 0x1922} /* Mn */, { 0x1927, 0x1928} /* Mn */,
- { 0x1932, 0x1932} /* Mn */, { 0x1939, 0x193B} /* Mn */,
- { 0x1A17, 0x1A18} /* Mn */, { 0x1B00, 0x1B03} /* Mn */,
- { 0x1B34, 0x1B34} /* Mn */, { 0x1B36, 0x1B3A} /* Mn */,
- { 0x1B3C, 0x1B3C} /* Mn */, { 0x1B42, 0x1B42} /* Mn */,
- { 0x1B6B, 0x1B73} /* Mn */, { 0x1DC0, 0x1DCA} /* Mn */,
- { 0x1DFE, 0x1DFF} /* Mn */, { 0x20D0, 0x20DC} /* Mn */,
- { 0x20DD, 0x20E0} /* Me */,
- { 0x20E1, 0x20E1} /* Mn */,
- { 0x20E2, 0x20E4} /* Me */,
- { 0x20E5, 0x20EF} /* Mn */, { 0x302A, 0x302F} /* Mn */,
- { 0x3099, 0x309A} /* Mn */, { 0xA806, 0xA806} /* Mn */,
- { 0xA80B, 0xA80B} /* Mn */, { 0xA825, 0xA826} /* Mn */,
- { 0xFB1E, 0xFB1E} /* Mn */, { 0xFE00, 0xFE0F} /* Mn */,
- { 0xFE20, 0xFE23} /* Mn */, { 0x10A01, 0x10A03} /* Mn */,
- { 0x10A05, 0x10A06} /* Mn */, { 0x10A0C, 0x10A0F} /* Mn */,
- { 0x10A38, 0x10A3A} /* Mn */, { 0x10A3F, 0x10A3F} /* Mn */,
- { 0x1D167, 0x1D169} /* Mn */, { 0x1D17B, 0x1D182} /* Mn */,
- { 0x1D185, 0x1D18B} /* Mn */, { 0x1D1AA, 0x1D1AD} /* Mn */,
- { 0x1D242, 0x1D244} /* Mn */, { 0xE0100, 0xE01EF} /* Mn */,
-};
-
-/*
- * Special pairs, not ranges.
- */
-static struct wchar_range comb_table[] = {
- {0x0644,0x0622}, {0x0644,0x0623}, {0x0644,0x0625}, {0x0644,0x0627},
-};
-
-/*
- * Characters with general category values
- * Cc: Other, Control
- * Cf: Other, Format
- * Cs: Other, Surrogate
- * Co: Other, Private Use
- * Cn: Other, Not Assigned
- * Zl: Separator, Line
- * Zp: Separator, Paragraph
- * Last synched with
- * <http://www.unicode.org/Public/5.0.0/ucd/UnicodeData-5.0.0d7.txt>
- * dated 2005-11-30T00:58:48Z
- */
-static struct wchar_range ubin_table[] = {
- { 0x0000, 0x001F} /* Cc */, { 0x007F, 0x009F} /* Cc */,
-#if 0
- { 0x00AD, 0x00AD} /* Cf */,
-#endif
- { 0x0370, 0x0373} /* Cn */, { 0x0376, 0x0379} /* Cn */,
- { 0x037F, 0x0383} /* Cn */, { 0x038B, 0x038B} /* Cn */,
- { 0x038D, 0x038D} /* Cn */, { 0x03A2, 0x03A2} /* Cn */,
- { 0x03CF, 0x03CF} /* Cn */, { 0x0487, 0x0487} /* Cn */,
- { 0x0514, 0x0530} /* Cn */, { 0x0557, 0x0558} /* Cn */,
- { 0x0560, 0x0560} /* Cn */, { 0x0588, 0x0588} /* Cn */,
- { 0x058B, 0x0590} /* Cn */, { 0x05C8, 0x05CF} /* Cn */,
- { 0x05EB, 0x05EF} /* Cn */, { 0x05F5, 0x05FF} /* Cn */,
-#if 0
- { 0x0600, 0x0603} /* Cf */,
-#endif
- { 0x0604, 0x060A} /* Cn */, { 0x0616, 0x061A} /* Cn */,
- { 0x061C, 0x061D} /* Cn */, { 0x0620, 0x0620} /* Cn */,
- { 0x063B, 0x063F} /* Cn */, { 0x065F, 0x065F} /* Cn */,
-#if 0
- { 0x06DD, 0x06DD} /* Cf */,
-#endif
- { 0x070E, 0x070E} /* Cn */,
-#if 0
- { 0x070F, 0x070F} /* Cf */,
-#endif
- { 0x074B, 0x074C} /* Cn */, { 0x076E, 0x077F} /* Cn */,
- { 0x07B2, 0x07BF} /* Cn */, { 0x07FB, 0x0900} /* Cn */,
- { 0x093A, 0x093B} /* Cn */, { 0x094E, 0x094F} /* Cn */,
- { 0x0955, 0x0957} /* Cn */, { 0x0971, 0x097A} /* Cn */,
- { 0x0980, 0x0980} /* Cn */, { 0x0984, 0x0984} /* Cn */,
- { 0x098D, 0x098E} /* Cn */, { 0x0991, 0x0992} /* Cn */,
- { 0x09A9, 0x09A9} /* Cn */, { 0x09B1, 0x09B1} /* Cn */,
- { 0x09B3, 0x09B5} /* Cn */, { 0x09BA, 0x09BB} /* Cn */,
- { 0x09C5, 0x09C6} /* Cn */, { 0x09C9, 0x09CA} /* Cn */,
- { 0x09CF, 0x09D6} /* Cn */, { 0x09D8, 0x09DB} /* Cn */,
- { 0x09DE, 0x09DE} /* Cn */, { 0x09E4, 0x09E5} /* Cn */,
- { 0x09FB, 0x0A00} /* Cn */, { 0x0A04, 0x0A04} /* Cn */,
- { 0x0A0B, 0x0A0E} /* Cn */, { 0x0A11, 0x0A12} /* Cn */,
- { 0x0A29, 0x0A29} /* Cn */, { 0x0A31, 0x0A31} /* Cn */,
- { 0x0A34, 0x0A34} /* Cn */, { 0x0A37, 0x0A37} /* Cn */,
- { 0x0A3A, 0x0A3B} /* Cn */, { 0x0A3D, 0x0A3D} /* Cn */,
- { 0x0A43, 0x0A46} /* Cn */, { 0x0A49, 0x0A4A} /* Cn */,
- { 0x0A4E, 0x0A58} /* Cn */, { 0x0A5D, 0x0A5D} /* Cn */,
- { 0x0A5F, 0x0A65} /* Cn */, { 0x0A75, 0x0A80} /* Cn */,
- { 0x0A84, 0x0A84} /* Cn */, { 0x0A8E, 0x0A8E} /* Cn */,
- { 0x0A92, 0x0A92} /* Cn */, { 0x0AA9, 0x0AA9} /* Cn */,
- { 0x0AB1, 0x0AB1} /* Cn */, { 0x0AB4, 0x0AB4} /* Cn */,
- { 0x0ABA, 0x0ABB} /* Cn */, { 0x0AC6, 0x0AC6} /* Cn */,
- { 0x0ACA, 0x0ACA} /* Cn */, { 0x0ACE, 0x0ACF} /* Cn */,
- { 0x0AD1, 0x0ADF} /* Cn */, { 0x0AE4, 0x0AE5} /* Cn */,
- { 0x0AF0, 0x0AF0} /* Cn */, { 0x0AF2, 0x0B00} /* Cn */,
- { 0x0B04, 0x0B04} /* Cn */, { 0x0B0D, 0x0B0E} /* Cn */,
- { 0x0B11, 0x0B12} /* Cn */, { 0x0B29, 0x0B29} /* Cn */,
- { 0x0B31, 0x0B31} /* Cn */, { 0x0B34, 0x0B34} /* Cn */,
- { 0x0B3A, 0x0B3B} /* Cn */, { 0x0B44, 0x0B46} /* Cn */,
- { 0x0B49, 0x0B4A} /* Cn */, { 0x0B4E, 0x0B55} /* Cn */,
- { 0x0B58, 0x0B5B} /* Cn */, { 0x0B5E, 0x0B5E} /* Cn */,
- { 0x0B62, 0x0B65} /* Cn */, { 0x0B72, 0x0B81} /* Cn */,
- { 0x0B84, 0x0B84} /* Cn */, { 0x0B8B, 0x0B8D} /* Cn */,
- { 0x0B91, 0x0B91} /* Cn */, { 0x0B96, 0x0B98} /* Cn */,
- { 0x0B9B, 0x0B9B} /* Cn */, { 0x0B9D, 0x0B9D} /* Cn */,
- { 0x0BA0, 0x0BA2} /* Cn */, { 0x0BA5, 0x0BA7} /* Cn */,
- { 0x0BAB, 0x0BAD} /* Cn */, { 0x0BBA, 0x0BBD} /* Cn */,
- { 0x0BC3, 0x0BC5} /* Cn */, { 0x0BC9, 0x0BC9} /* Cn */,
- { 0x0BCE, 0x0BD6} /* Cn */, { 0x0BD8, 0x0BE5} /* Cn */,
- { 0x0BFB, 0x0C00} /* Cn */, { 0x0C04, 0x0C04} /* Cn */,
- { 0x0C0D, 0x0C0D} /* Cn */, { 0x0C11, 0x0C11} /* Cn */,
- { 0x0C29, 0x0C29} /* Cn */, { 0x0C34, 0x0C34} /* Cn */,
- { 0x0C3A, 0x0C3D} /* Cn */, { 0x0C45, 0x0C45} /* Cn */,
- { 0x0C49, 0x0C49} /* Cn */, { 0x0C4E, 0x0C54} /* Cn */,
- { 0x0C57, 0x0C5F} /* Cn */, { 0x0C62, 0x0C65} /* Cn */,
- { 0x0C70, 0x0C81} /* Cn */, { 0x0C84, 0x0C84} /* Cn */,
- { 0x0C8D, 0x0C8D} /* Cn */, { 0x0C91, 0x0C91} /* Cn */,
- { 0x0CA9, 0x0CA9} /* Cn */, { 0x0CB4, 0x0CB4} /* Cn */,
- { 0x0CBA, 0x0CBB} /* Cn */, { 0x0CC5, 0x0CC5} /* Cn */,
- { 0x0CC9, 0x0CC9} /* Cn */, { 0x0CCE, 0x0CD4} /* Cn */,
- { 0x0CD7, 0x0CDD} /* Cn */, { 0x0CDF, 0x0CDF} /* Cn */,
- { 0x0CE4, 0x0CE5} /* Cn */, { 0x0CF0, 0x0CF0} /* Cn */,
- { 0x0CF3, 0x0D01} /* Cn */, { 0x0D04, 0x0D04} /* Cn */,
- { 0x0D0D, 0x0D0D} /* Cn */, { 0x0D11, 0x0D11} /* Cn */,
- { 0x0D29, 0x0D29} /* Cn */, { 0x0D3A, 0x0D3D} /* Cn */,
- { 0x0D44, 0x0D45} /* Cn */, { 0x0D49, 0x0D49} /* Cn */,
- { 0x0D4E, 0x0D56} /* Cn */, { 0x0D58, 0x0D5F} /* Cn */,
- { 0x0D62, 0x0D65} /* Cn */, { 0x0D70, 0x0D81} /* Cn */,
- { 0x0D84, 0x0D84} /* Cn */, { 0x0D97, 0x0D99} /* Cn */,
- { 0x0DB2, 0x0DB2} /* Cn */, { 0x0DBC, 0x0DBC} /* Cn */,
- { 0x0DBE, 0x0DBF} /* Cn */, { 0x0DC7, 0x0DC9} /* Cn */,
- { 0x0DCB, 0x0DCE} /* Cn */, { 0x0DD5, 0x0DD5} /* Cn */,
- { 0x0DD7, 0x0DD7} /* Cn */, { 0x0DE0, 0x0DF1} /* Cn */,
- { 0x0DF5, 0x0E00} /* Cn */, { 0x0E3B, 0x0E3E} /* Cn */,
- { 0x0E5C, 0x0E80} /* Cn */, { 0x0E83, 0x0E83} /* Cn */,
- { 0x0E85, 0x0E86} /* Cn */, { 0x0E89, 0x0E89} /* Cn */,
- { 0x0E8B, 0x0E8C} /* Cn */, { 0x0E8E, 0x0E93} /* Cn */,
- { 0x0E98, 0x0E98} /* Cn */, { 0x0EA0, 0x0EA0} /* Cn */,
- { 0x0EA4, 0x0EA4} /* Cn */, { 0x0EA6, 0x0EA6} /* Cn */,
- { 0x0EA8, 0x0EA9} /* Cn */, { 0x0EAC, 0x0EAC} /* Cn */,
- { 0x0EBA, 0x0EBA} /* Cn */, { 0x0EBE, 0x0EBF} /* Cn */,
- { 0x0EC5, 0x0EC5} /* Cn */, { 0x0EC7, 0x0EC7} /* Cn */,
- { 0x0ECE, 0x0ECF} /* Cn */, { 0x0EDA, 0x0EDB} /* Cn */,
- { 0x0EDE, 0x0EFF} /* Cn */, { 0x0F48, 0x0F48} /* Cn */,
- { 0x0F6B, 0x0F70} /* Cn */, { 0x0F8C, 0x0F8F} /* Cn */,
- { 0x0F98, 0x0F98} /* Cn */, { 0x0FBD, 0x0FBD} /* Cn */,
- { 0x0FCD, 0x0FCE} /* Cn */, { 0x0FD2, 0x0FFF} /* Cn */,
- { 0x1022, 0x1022} /* Cn */, { 0x1028, 0x1028} /* Cn */,
- { 0x102B, 0x102B} /* Cn */, { 0x1033, 0x1035} /* Cn */,
- { 0x103A, 0x103F} /* Cn */, { 0x105A, 0x109F} /* Cn */,
- { 0x10C6, 0x10CF} /* Cn */, { 0x10FD, 0x10FF} /* Cn */,
- { 0x115A, 0x115E} /* Cn */, { 0x11A3, 0x11A7} /* Cn */,
- { 0x11FA, 0x11FF} /* Cn */, { 0x1249, 0x1249} /* Cn */,
- { 0x124E, 0x124F} /* Cn */, { 0x1257, 0x1257} /* Cn */,
- { 0x1259, 0x1259} /* Cn */, { 0x125E, 0x125F} /* Cn */,
- { 0x1289, 0x1289} /* Cn */, { 0x128E, 0x128F} /* Cn */,
- { 0x12B1, 0x12B1} /* Cn */, { 0x12B6, 0x12B7} /* Cn */,
- { 0x12BF, 0x12BF} /* Cn */, { 0x12C1, 0x12C1} /* Cn */,
- { 0x12C6, 0x12C7} /* Cn */, { 0x12D7, 0x12D7} /* Cn */,
- { 0x1311, 0x1311} /* Cn */, { 0x1316, 0x1317} /* Cn */,
- { 0x135B, 0x135E} /* Cn */, { 0x137D, 0x137F} /* Cn */,
- { 0x139A, 0x139F} /* Cn */, { 0x13F5, 0x1400} /* Cn */,
- { 0x1677, 0x167F} /* Cn */, { 0x169D, 0x169F} /* Cn */,
- { 0x16F1, 0x16FF} /* Cn */, { 0x170D, 0x170D} /* Cn */,
- { 0x1715, 0x171F} /* Cn */, { 0x1737, 0x173F} /* Cn */,
- { 0x1754, 0x175F} /* Cn */, { 0x176D, 0x176D} /* Cn */,
- { 0x1771, 0x1771} /* Cn */, { 0x1774, 0x177F} /* Cn */,
-#if 0
- { 0x17B4, 0x17B5} /* Cf */,
-#endif
- { 0x17DE, 0x17DF} /* Cn */, { 0x17EA, 0x17EF} /* Cn */,
- { 0x17FA, 0x17FF} /* Cn */, { 0x180F, 0x180F} /* Cn */,
- { 0x181A, 0x181F} /* Cn */, { 0x1878, 0x187F} /* Cn */,
- { 0x18AA, 0x18FF} /* Cn */, { 0x191D, 0x191F} /* Cn */,
- { 0x192C, 0x192F} /* Cn */, { 0x193C, 0x193F} /* Cn */,
- { 0x1941, 0x1943} /* Cn */, { 0x196E, 0x196F} /* Cn */,
- { 0x1975, 0x197F} /* Cn */, { 0x19AA, 0x19AF} /* Cn */,
- { 0x19CA, 0x19CF} /* Cn */, { 0x19DA, 0x19DD} /* Cn */,
- { 0x1A1C, 0x1A1D} /* Cn */, { 0x1A20, 0x1AFF} /* Cn */,
- { 0x1B4C, 0x1B4F} /* Cn */, { 0x1B7D, 0x1CFF} /* Cn */,
- { 0x1DCB, 0x1DFD} /* Cn */, { 0x1E9C, 0x1E9F} /* Cn */,
- { 0x1EFA, 0x1EFF} /* Cn */, { 0x1F16, 0x1F17} /* Cn */,
- { 0x1F1E, 0x1F1F} /* Cn */, { 0x1F46, 0x1F47} /* Cn */,
- { 0x1F4E, 0x1F4F} /* Cn */, { 0x1F58, 0x1F58} /* Cn */,
- { 0x1F5A, 0x1F5A} /* Cn */, { 0x1F5C, 0x1F5C} /* Cn */,
- { 0x1F5E, 0x1F5E} /* Cn */, { 0x1F7E, 0x1F7F} /* Cn */,
- { 0x1FB5, 0x1FB5} /* Cn */, { 0x1FC5, 0x1FC5} /* Cn */,
- { 0x1FD4, 0x1FD5} /* Cn */, { 0x1FDC, 0x1FDC} /* Cn */,
- { 0x1FF0, 0x1FF1} /* Cn */, { 0x1FF5, 0x1FF5} /* Cn */,
- { 0x1FFF, 0x1FFF} /* Cn */,
- { 0x200B, 0x200F} /* Cf */,
- { 0x2028, 0x2028} /* Zl */,
- { 0x2029, 0x2029} /* Zp */,
- { 0x202A, 0x202E} /* Cf */,
- { 0x2060, 0x2063} /* Cf */,
- { 0x2064, 0x2069} /* Cn */,
- { 0x206A, 0x206F} /* Cf */,
- { 0x2072, 0x2073} /* Cn */, { 0x208F, 0x208F} /* Cn */,
- { 0x2095, 0x209F} /* Cn */, { 0x20B6, 0x20CF} /* Cn */,
- { 0x20F0, 0x20FF} /* Cn */, { 0x214F, 0x2152} /* Cn */,
- { 0x2185, 0x218F} /* Cn */, { 0x23E8, 0x23FF} /* Cn */,
- { 0x2427, 0x243F} /* Cn */, { 0x244B, 0x245F} /* Cn */,
- { 0x269D, 0x269F} /* Cn */, { 0x26B3, 0x2700} /* Cn */,
- { 0x2705, 0x2705} /* Cn */, { 0x270A, 0x270B} /* Cn */,
- { 0x2728, 0x2728} /* Cn */, { 0x274C, 0x274C} /* Cn */,
- { 0x274E, 0x274E} /* Cn */, { 0x2753, 0x2755} /* Cn */,
- { 0x2757, 0x2757} /* Cn */, { 0x275F, 0x2760} /* Cn */,
- { 0x2795, 0x2797} /* Cn */, { 0x27B0, 0x27B0} /* Cn */,
- { 0x27BF, 0x27BF} /* Cn */, { 0x27CB, 0x27CF} /* Cn */,
- { 0x27EC, 0x27EF} /* Cn */, { 0x2B1B, 0x2B1F} /* Cn */,
- { 0x2B24, 0x2BFF} /* Cn */, { 0x2C2F, 0x2C2F} /* Cn */,
- { 0x2C5F, 0x2C5F} /* Cn */, { 0x2C6D, 0x2C73} /* Cn */,
- { 0x2C78, 0x2C7F} /* Cn */, { 0x2CEB, 0x2CF8} /* Cn */,
- { 0x2D26, 0x2D2F} /* Cn */, { 0x2D66, 0x2D6E} /* Cn */,
- { 0x2D70, 0x2D7F} /* Cn */, { 0x2D97, 0x2D9F} /* Cn */,
- { 0x2DA7, 0x2DA7} /* Cn */, { 0x2DAF, 0x2DAF} /* Cn */,
- { 0x2DB7, 0x2DB7} /* Cn */, { 0x2DBF, 0x2DBF} /* Cn */,
- { 0x2DC7, 0x2DC7} /* Cn */, { 0x2DCF, 0x2DCF} /* Cn */,
- { 0x2DD7, 0x2DD7} /* Cn */, { 0x2DDF, 0x2DFF} /* Cn */,
- { 0x2E18, 0x2E1B} /* Cn */, { 0x2E1E, 0x2E7F} /* Cn */,
- { 0x2E9A, 0x2E9A} /* Cn */, { 0x2EF4, 0x2EFF} /* Cn */,
- { 0x2FD6, 0x2FEF} /* Cn */, { 0x2FFC, 0x2FFF} /* Cn */,
- { 0x3040, 0x3040} /* Cn */, { 0x3097, 0x3098} /* Cn */,
- { 0x3100, 0x3104} /* Cn */, { 0x312D, 0x3130} /* Cn */,
- { 0x318F, 0x318F} /* Cn */, { 0x31B8, 0x31BF} /* Cn */,
- { 0x31D0, 0x31EF} /* Cn */, { 0x321F, 0x321F} /* Cn */,
- { 0x3244, 0x324F} /* Cn */, { 0x32FF, 0x32FF} /* Cn */,
- { 0x4DB6, 0x4DBF} /* Cn */, { 0x9FBC, 0x9FFF} /* Cn */,
- { 0xA48D, 0xA48F} /* Cn */, { 0xA4C7, 0xA6FF} /* Cn */,
- { 0xA71B, 0xA71F} /* Cn */, { 0xA722, 0xA7FF} /* Cn */,
- { 0xA82C, 0xA83F} /* Cn */, { 0xA878, 0xABFF} /* Cn */,
- { 0xD7A4, 0xD7FF} /* Cn */,
- { 0xD800, 0xDFFF} /* Cs */,
- { 0xE000, 0xF8FF} /* Co */,
- { 0xFA2E, 0xFA2F} /* Cn */, { 0xFA6B, 0xFA6F} /* Cn */,
- { 0xFADA, 0xFAFF} /* Cn */, { 0xFB07, 0xFB12} /* Cn */,
- { 0xFB18, 0xFB1C} /* Cn */, { 0xFB37, 0xFB37} /* Cn */,
- { 0xFB3D, 0xFB3D} /* Cn */, { 0xFB3F, 0xFB3F} /* Cn */,
- { 0xFB42, 0xFB42} /* Cn */, { 0xFB45, 0xFB45} /* Cn */,
- { 0xFBB2, 0xFBD2} /* Cn */, { 0xFD40, 0xFD4F} /* Cn */,
- { 0xFD90, 0xFD91} /* Cn */, { 0xFDC8, 0xFDEF} /* Cn */,
- { 0xFDFE, 0xFDFF} /* Cn */, { 0xFE1A, 0xFE1F} /* Cn */,
- { 0xFE24, 0xFE2F} /* Cn */, { 0xFE53, 0xFE53} /* Cn */,
- { 0xFE67, 0xFE67} /* Cn */, { 0xFE6C, 0xFE6F} /* Cn */,
- { 0xFE75, 0xFE75} /* Cn */, { 0xFEFD, 0xFEFE} /* Cn */,
- { 0xFEFF, 0xFEFF} /* Cf */,
- { 0xFF00, 0xFF00} /* Cn */, { 0xFFBF, 0xFFC1} /* Cn */,
- { 0xFFC8, 0xFFC9} /* Cn */, { 0xFFD0, 0xFFD1} /* Cn */,
- { 0xFFD8, 0xFFD9} /* Cn */, { 0xFFDD, 0xFFDF} /* Cn */,
- { 0xFFE7, 0xFFE7} /* Cn */, { 0xFFEF, 0xFFF8} /* Cn */,
- { 0xFFF9, 0xFFFB} /* Cf */,
- { 0xFFFE, 0xFFFF} /* Cn */, { 0x1000C, 0x1000C} /* Cn */,
- { 0x10027, 0x10027} /* Cn */, { 0x1003B, 0x1003B} /* Cn */,
- { 0x1003E, 0x1003E} /* Cn */, { 0x1004E, 0x1004F} /* Cn */,
- { 0x1005E, 0x1007F} /* Cn */, { 0x100FB, 0x100FF} /* Cn */,
- { 0x10103, 0x10106} /* Cn */, { 0x10134, 0x10136} /* Cn */,
- { 0x1018B, 0x102FF} /* Cn */, { 0x1031F, 0x1031F} /* Cn */,
- { 0x10324, 0x1032F} /* Cn */, { 0x1034B, 0x1037F} /* Cn */,
- { 0x1039E, 0x1039E} /* Cn */, { 0x103C4, 0x103C7} /* Cn */,
- { 0x103D6, 0x103FF} /* Cn */,
- { 0x1049E, 0x1049F} /* Cn */, { 0x104AA, 0x107FF} /* Cn */,
- { 0x10806, 0x10807} /* Cn */, { 0x10809, 0x10809} /* Cn */,
- { 0x10836, 0x10836} /* Cn */, { 0x10839, 0x1083B} /* Cn */,
- { 0x1083D, 0x1083E} /* Cn */, { 0x10840, 0x108FF} /* Cn */,
- { 0x1091A, 0x1091E} /* Cn */, { 0x10920, 0x109FF} /* Cn */,
- { 0x10A04, 0x10A04} /* Cn */, { 0x10A07, 0x10A0B} /* Cn */,
- { 0x10A14, 0x10A14} /* Cn */, { 0x10A18, 0x10A18} /* Cn */,
- { 0x10A34, 0x10A37} /* Cn */, { 0x10A3B, 0x10A3E} /* Cn */,
- { 0x10A48, 0x10A4F} /* Cn */, { 0x10A59, 0x11FFF} /* Cn */,
- { 0x1236F, 0x123FF} /* Cn */, { 0x12463, 0x1246F} /* Cn */,
- { 0x12474, 0x1CFFF} /* Cn */, { 0x1D0F6, 0x1D0FF} /* Cn */,
- { 0x1D127, 0x1D129} /* Cn */,
- { 0x1D173, 0x1D17A} /* Cf */,
- { 0x1D1DE, 0x1D1FF} /* Cn */, { 0x1D246, 0x1D2FF} /* Cn */,
- { 0x1D357, 0x1D35F} /* Cn */, { 0x1D372, 0x1D3FF} /* Cn */,
- { 0x1D455, 0x1D455} /* Cn */, { 0x1D49D, 0x1D49D} /* Cn */,
- { 0x1D4A0, 0x1D4A1} /* Cn */, { 0x1D4A3, 0x1D4A4} /* Cn */,
- { 0x1D4A7, 0x1D4A8} /* Cn */, { 0x1D4AD, 0x1D4AD} /* Cn */,
- { 0x1D4BA, 0x1D4BA} /* Cn */, { 0x1D4BC, 0x1D4BC} /* Cn */,
- { 0x1D4C4, 0x1D4C4} /* Cn */, { 0x1D506, 0x1D506} /* Cn */,
- { 0x1D50B, 0x1D50C} /* Cn */, { 0x1D515, 0x1D515} /* Cn */,
- { 0x1D51D, 0x1D51D} /* Cn */, { 0x1D53A, 0x1D53A} /* Cn */,
- { 0x1D53F, 0x1D53F} /* Cn */, { 0x1D545, 0x1D545} /* Cn */,
- { 0x1D547, 0x1D549} /* Cn */, { 0x1D551, 0x1D551} /* Cn */,
- { 0x1D6A6, 0x1D6A7} /* Cn */, { 0x1D7CC, 0x1D7CD} /* Cn */,
- { 0x1D800, 0x1FFFF} /* Cn */, { 0x2A6D7, 0x2F7FF} /* Cn */,
- { 0x2FA1E, 0xE0000} /* Cn */,
- { 0xE0001, 0xE0001} /* Cf */,
- { 0xE0002, 0xE001F} /* Cn */,
- { 0xE0020, 0xE007F} /* Cf */,
- { 0xE0080, 0xE00FF} /* Cn */, { 0xE01F0, 0xEFFFF} /* Cn */,
- { 0xF0000, 0xFFFFD} /* Co */,
- { 0xFFFFE, 0xFFFFF} /* Cn */,
- {0x100000,0x10FFFD} /* Co */,
- {0x10FFFE,0x10FFFF} /* Cn */,
- {0x110000,0x7FFFFFFF} /* ISO 10646?? */
-};
-
-/*
- * Double width characters
- * W: East Asian Wide
- * F: East Asian Full-width
- * Unassigned code points may be included when they allow ranges to be merged.
- * Last synched with
- * <http://www.unicode.org/Public/5.0.0/ucd/EastAsianWidth-5.0.0d2.txt>
- * dated 2005-11-08T01:32:56Z
- */
-static struct wchar_range wide_table[] = {
- { 0x1100, 0x115F} /* W */, { 0x2329, 0x232A} /* W */,
- { 0x2E80, 0x2FFB} /* W */,
- { 0x3000, 0x3000} /* F */,
- { 0x3001, 0x303E} /* W */, { 0x3041, 0x4DB5} /* W */,
- { 0x4E00, 0x9FBB} /* W */, { 0xA000, 0xA4C6} /* W */,
- { 0xAC00, 0xD7A3} /* W */, { 0xF900, 0xFAD9} /* W */,
- { 0xFE10, 0xFE19} /* W */, { 0xFE30, 0xFE6B} /* W */,
- { 0xFF01, 0xFF60} /* F */, { 0xFFE0, 0xFFE6} /* F */,
- { 0x20000, 0x2FFFD} /* W */, { 0x30000, 0x3FFFD} /* W */,
-};
-
- static int
-is_in_table(ch, table, tsize)
- LWCHAR ch;
- struct wchar_range table[];
- int tsize;
-{
- int hi;
- int lo;
-
- /* Binary search in the table. */
- if (ch < table[0].first)
- return 0;
- lo = 0;
- hi = tsize - 1;
- while (lo <= hi)
- {
- int mid = (lo + hi) / 2;
- if (ch > table[mid].last)
- lo = mid + 1;
- else if (ch < table[mid].first)
- hi = mid - 1;
- else
- return 1;
- }
- return 0;
-}
-
-/*
- * Is a character a UTF-8 composing character?
- * If a composing character follows any char, the two combine into one glyph.
- */
- public int
-is_composing_char(ch)
- LWCHAR ch;
-{
- return is_in_table(ch, comp_table, (sizeof(comp_table) / sizeof(*comp_table)));
-}
-
-/*
- * Should this UTF-8 character be treated as binary?
- */
- public int
-is_ubin_char(ch)
- LWCHAR ch;
-{
- return is_in_table(ch, ubin_table, (sizeof(ubin_table) / sizeof(*ubin_table)));
-}
-
-/*
- * Is this a double width UTF-8 character?
- */
- public int
-is_wide_char(ch)
- LWCHAR ch;
-{
- return is_in_table(ch, wide_table, (sizeof(wide_table) / sizeof(*wide_table)));
-}
-
-/*
- * Is a character a UTF-8 combining character?
- * A combining char acts like an ordinary char, but if it follows
- * a specific char (not any char), the two combine into one glyph.
- */
- public int
-is_combining_char(ch1, ch2)
- LWCHAR ch1;
- LWCHAR ch2;
-{
- /* The table is small; use linear search. */
- int i;
- for (i = 0; i < sizeof(comb_table)/sizeof(*comb_table); i++)
- {
- if (ch1 == comb_table[i].first &&
- ch2 == comb_table[i].last)
- return 1;
- }
- return 0;
-}
-
diff --git a/contrib/less/charset.h b/contrib/less/charset.h
deleted file mode 100644
index 548033e..0000000
--- a/contrib/less/charset.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-#define IS_ASCII_OCTET(c) (((c) & 0x80) == 0)
-#define IS_UTF8_TRAIL(c) (((c) & 0xC0) == 0x80)
-#define IS_UTF8_LEAD2(c) (((c) & 0xE0) == 0xC0)
-#define IS_UTF8_LEAD3(c) (((c) & 0xF0) == 0xE0)
-#define IS_UTF8_LEAD4(c) (((c) & 0xF8) == 0xF0)
-#define IS_UTF8_LEAD5(c) (((c) & 0xFC) == 0xF8)
-#define IS_UTF8_LEAD6(c) (((c) & 0xFE) == 0xFC)
-#define IS_UTF8_INVALID(c) (((c) & 0xFE) == 0xFE)
-#define IS_UTF8_LEAD(c) (((c) & 0xC0) == 0xC0 && !IS_UTF8_INVALID(c))
diff --git a/contrib/less/cmd.h b/contrib/less/cmd.h
deleted file mode 100644
index 298d367..0000000
--- a/contrib/less/cmd.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-#define MAX_USERCMD 500
-#define MAX_CMDLEN 16
-
-#define A_B_LINE 2
-#define A_B_SCREEN 3
-#define A_B_SCROLL 4
-#define A_B_SEARCH 5
-#define A_DIGIT 6
-#define A_DISP_OPTION 7
-#define A_DEBUG 8
-#define A_EXAMINE 9
-#define A_FIRSTCMD 10
-#define A_FREPAINT 11
-#define A_F_LINE 12
-#define A_F_SCREEN 13
-#define A_F_SCROLL 14
-#define A_F_SEARCH 15
-#define A_GOEND 16
-#define A_GOLINE 17
-#define A_GOMARK 18
-#define A_HELP 19
-#define A_NEXT_FILE 20
-#define A_PERCENT 21
-#define A_PREFIX 22
-#define A_PREV_FILE 23
-#define A_QUIT 24
-#define A_REPAINT 25
-#define A_SETMARK 26
-#define A_SHELL 27
-#define A_STAT 28
-#define A_FF_LINE 29
-#define A_BF_LINE 30
-#define A_VERSION 31
-#define A_VISUAL 32
-#define A_F_WINDOW 33
-#define A_B_WINDOW 34
-#define A_F_BRACKET 35
-#define A_B_BRACKET 36
-#define A_PIPE 37
-#define A_INDEX_FILE 38
-#define A_UNDO_SEARCH 39
-#define A_FF_SCREEN 40
-#define A_LSHIFT 41
-#define A_RSHIFT 42
-#define A_AGAIN_SEARCH 43
-#define A_T_AGAIN_SEARCH 44
-#define A_REVERSE_SEARCH 45
-#define A_T_REVERSE_SEARCH 46
-#define A_OPT_TOGGLE 47
-#define A_OPT_SET 48
-#define A_OPT_UNSET 49
-#define A_F_FOREVER 50
-#define A_GOPOS 51
-#define A_REMOVE_FILE 52
-#define A_NEXT_TAG 53
-#define A_PREV_TAG 54
-
-#define A_INVALID 100
-#define A_NOACTION 101
-#define A_UINVALID 102
-#define A_END_LIST 103
-#define A_SPECIAL_KEY 104
-
-#define A_SKIP 127
-
-#define A_EXTRA 0200
-
-
-/* Line editting characters */
-
-#define EC_BACKSPACE 1
-#define EC_LINEKILL 2
-#define EC_RIGHT 3
-#define EC_LEFT 4
-#define EC_W_LEFT 5
-#define EC_W_RIGHT 6
-#define EC_INSERT 7
-#define EC_DELETE 8
-#define EC_HOME 9
-#define EC_END 10
-#define EC_W_BACKSPACE 11
-#define EC_W_DELETE 12
-#define EC_UP 13
-#define EC_DOWN 14
-#define EC_EXPAND 15
-#define EC_F_COMPLETE 17
-#define EC_B_COMPLETE 18
-#define EC_LITERAL 19
-
-#define EC_NOACTION 101
-#define EC_UINVALID 102
-
-/* Flags for editchar() */
-#define EC_PEEK 01
-#define EC_NOHISTORY 02
-#define EC_NOCOMPLETE 04
-#define EC_NORIGHTLEFT 010
-
-/* Environment variable stuff */
-#define EV_OK 01
-
-/* Special keys (keys which output different strings on different terminals) */
-#define SK_SPECIAL_KEY CONTROL('K')
-#define SK_RIGHT_ARROW 1
-#define SK_LEFT_ARROW 2
-#define SK_UP_ARROW 3
-#define SK_DOWN_ARROW 4
-#define SK_PAGE_UP 5
-#define SK_PAGE_DOWN 6
-#define SK_HOME 7
-#define SK_END 8
-#define SK_DELETE 9
-#define SK_INSERT 10
-#define SK_CTL_LEFT_ARROW 11
-#define SK_CTL_RIGHT_ARROW 12
-#define SK_CTL_DELETE 13
-#define SK_F1 14
-#define SK_BACKTAB 15
-#define SK_CTL_BACKSPACE 16
-#define SK_CONTROL_K 40
diff --git a/contrib/less/cmdbuf.c b/contrib/less/cmdbuf.c
deleted file mode 100644
index ad79ce9..0000000
--- a/contrib/less/cmdbuf.c
+++ /dev/null
@@ -1,1484 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Functions which manipulate the command buffer.
- * Used only by command() and related functions.
- */
-
-#include "less.h"
-#include "cmd.h"
-#include "charset.h"
-#if HAVE_STAT
-#include <sys/stat.h>
-#endif
-
-extern int sc_width;
-extern int utf_mode;
-
-static char cmdbuf[CMDBUF_SIZE]; /* Buffer for holding a multi-char command */
-static int cmd_col; /* Current column of the cursor */
-static int prompt_col; /* Column of cursor just after prompt */
-static char *cp; /* Pointer into cmdbuf */
-static int cmd_offset; /* Index into cmdbuf of first displayed char */
-static int literal; /* Next input char should not be interpreted */
-
-#if TAB_COMPLETE_FILENAME
-static int cmd_complete();
-/*
- * These variables are statics used by cmd_complete.
- */
-static int in_completion = 0;
-static char *tk_text;
-static char *tk_original;
-static char *tk_ipoint;
-static char *tk_trial;
-static struct textlist tk_tlist;
-#endif
-
-static int cmd_left();
-static int cmd_right();
-
-#if SPACES_IN_FILENAMES
-public char openquote = '"';
-public char closequote = '"';
-#endif
-
-#if CMD_HISTORY
-
-/* History file */
-#define HISTFILE_FIRST_LINE ".less-history-file:"
-#define HISTFILE_SEARCH_SECTION ".search"
-#define HISTFILE_SHELL_SECTION ".shell"
-
-/*
- * A mlist structure represents a command history.
- */
-struct mlist
-{
- struct mlist *next;
- struct mlist *prev;
- struct mlist *curr_mp;
- char *string;
- int modified;
-};
-
-/*
- * These are the various command histories that exist.
- */
-struct mlist mlist_search =
- { &mlist_search, &mlist_search, &mlist_search, NULL, 0 };
-public void * constant ml_search = (void *) &mlist_search;
-
-struct mlist mlist_examine =
- { &mlist_examine, &mlist_examine, &mlist_examine, NULL, 0 };
-public void * constant ml_examine = (void *) &mlist_examine;
-
-#if SHELL_ESCAPE || PIPEC
-struct mlist mlist_shell =
- { &mlist_shell, &mlist_shell, &mlist_shell, NULL, 0 };
-public void * constant ml_shell = (void *) &mlist_shell;
-#endif
-
-#else /* CMD_HISTORY */
-
-/* If CMD_HISTORY is off, these are just flags. */
-public void * constant ml_search = (void *)1;
-public void * constant ml_examine = (void *)2;
-#if SHELL_ESCAPE || PIPEC
-public void * constant ml_shell = (void *)3;
-#endif
-
-#endif /* CMD_HISTORY */
-
-/*
- * History for the current command.
- */
-static struct mlist *curr_mlist = NULL;
-static int curr_cmdflags;
-
-static char cmd_mbc_buf[MAX_UTF_CHAR_LEN];
-static int cmd_mbc_buf_len;
-static int cmd_mbc_buf_index;
-
-
-/*
- * Reset command buffer (to empty).
- */
- public void
-cmd_reset()
-{
- cp = cmdbuf;
- *cp = '\0';
- cmd_col = 0;
- cmd_offset = 0;
- literal = 0;
- cmd_mbc_buf_len = 0;
-}
-
-/*
- * Clear command line.
- */
- public void
-clear_cmd()
-{
- cmd_col = prompt_col = 0;
- cmd_mbc_buf_len = 0;
-}
-
-/*
- * Display a string, usually as a prompt for input into the command buffer.
- */
- public void
-cmd_putstr(s)
- char *s;
-{
- LWCHAR prev_ch = 0;
- LWCHAR ch;
- char *endline = s + strlen(s);
- while (*s != '\0')
- {
- char *ns = s;
- ch = step_char(&ns, +1, endline);
- while (s < ns)
- putchr(*s++);
- if (!utf_mode)
- {
- cmd_col++;
- prompt_col++;
- } else if (!is_composing_char(ch) &&
- !is_combining_char(prev_ch, ch))
- {
- int width = is_wide_char(ch) ? 2 : 1;
- cmd_col += width;
- prompt_col += width;
- }
- prev_ch = ch;
- }
-}
-
-/*
- * How many characters are in the command buffer?
- */
- public int
-len_cmdbuf()
-{
- char *s = cmdbuf;
- char *endline = s + strlen(s);
- int len = 0;
-
- while (*s != '\0')
- {
- step_char(&s, +1, endline);
- len++;
- }
- return (len);
-}
-
-/*
- * Common part of cmd_step_right() and cmd_step_left().
- */
- static char *
-cmd_step_common(p, ch, len, pwidth, bswidth)
- char *p;
- LWCHAR ch;
- int len;
- int *pwidth;
- int *bswidth;
-{
- char *pr;
-
- if (len == 1)
- {
- pr = prchar((int) ch);
- if (pwidth != NULL || bswidth != NULL)
- {
- int len = strlen(pr);
- if (pwidth != NULL)
- *pwidth = len;
- if (bswidth != NULL)
- *bswidth = len;
- }
- } else
- {
- pr = prutfchar(ch);
- if (pwidth != NULL || bswidth != NULL)
- {
- if (is_composing_char(ch))
- {
- if (pwidth != NULL)
- *pwidth = 0;
- if (bswidth != NULL)
- *bswidth = 0;
- } else if (is_ubin_char(ch))
- {
- int len = strlen(pr);
- if (pwidth != NULL)
- *pwidth = len;
- if (bswidth != NULL)
- *bswidth = len;
- } else
- {
- LWCHAR prev_ch = step_char(&p, -1, cmdbuf);
- if (is_combining_char(prev_ch, ch))
- {
- if (pwidth != NULL)
- *pwidth = 0;
- if (bswidth != NULL)
- *bswidth = 0;
- } else
- {
- if (pwidth != NULL)
- *pwidth = is_wide_char(ch)
- ? 2
- : 1;
- if (bswidth != NULL)
- *bswidth = 1;
- }
- }
- }
- }
-
- return (pr);
-}
-
-/*
- * Step a pointer one character right in the command buffer.
- */
- static char *
-cmd_step_right(pp, pwidth, bswidth)
- char **pp;
- int *pwidth;
- int *bswidth;
-{
- char *p = *pp;
- LWCHAR ch = step_char(pp, +1, p + strlen(p));
-
- return cmd_step_common(p, ch, *pp - p, pwidth, bswidth);
-}
-
-/*
- * Step a pointer one character left in the command buffer.
- */
- static char *
-cmd_step_left(pp, pwidth, bswidth)
- char **pp;
- int *pwidth;
- int *bswidth;
-{
- char *p = *pp;
- LWCHAR ch = step_char(pp, -1, cmdbuf);
-
- return cmd_step_common(*pp, ch, p - *pp, pwidth, bswidth);
-}
-
-/*
- * Repaint the line from cp onwards.
- * Then position the cursor just after the char old_cp (a pointer into cmdbuf).
- */
- static void
-cmd_repaint(old_cp)
- char *old_cp;
-{
- /*
- * Repaint the line from the current position.
- */
- clear_eol();
- while (*cp != '\0')
- {
- char *np = cp;
- int width;
- char *pr = cmd_step_right(&np, &width, NULL);
- if (cmd_col + width >= sc_width)
- break;
- cp = np;
- putstr(pr);
- cmd_col += width;
- }
- while (*cp != '\0')
- {
- char *np = cp;
- int width;
- char *pr = cmd_step_right(&np, &width, NULL);
- if (width > 0)
- break;
- cp = np;
- putstr(pr);
- }
-
- /*
- * Back up the cursor to the correct position.
- */
- while (cp > old_cp)
- cmd_left();
-}
-
-/*
- * Put the cursor at "home" (just after the prompt),
- * and set cp to the corresponding char in cmdbuf.
- */
- static void
-cmd_home()
-{
- while (cmd_col > prompt_col)
- {
- int width, bswidth;
-
- cmd_step_left(&cp, &width, &bswidth);
- while (bswidth-- > 0)
- putbs();
- cmd_col -= width;
- }
-
- cp = &cmdbuf[cmd_offset];
-}
-
-/*
- * Shift the cmdbuf display left a half-screen.
- */
- static void
-cmd_lshift()
-{
- char *s;
- char *save_cp;
- int cols;
-
- /*
- * Start at the first displayed char, count how far to the
- * right we'd have to move to reach the center of the screen.
- */
- s = cmdbuf + cmd_offset;
- cols = 0;
- while (cols < (sc_width - prompt_col) / 2 && *s != '\0')
- {
- int width;
- cmd_step_right(&s, &width, NULL);
- cols += width;
- }
- while (*s != '\0')
- {
- int width;
- char *ns = s;
- cmd_step_right(&ns, &width, NULL);
- if (width > 0)
- break;
- s = ns;
- }
-
- cmd_offset = s - cmdbuf;
- save_cp = cp;
- cmd_home();
- cmd_repaint(save_cp);
-}
-
-/*
- * Shift the cmdbuf display right a half-screen.
- */
- static void
-cmd_rshift()
-{
- char *s;
- char *save_cp;
- int cols;
-
- /*
- * Start at the first displayed char, count how far to the
- * left we'd have to move to traverse a half-screen width
- * of displayed characters.
- */
- s = cmdbuf + cmd_offset;
- cols = 0;
- while (cols < (sc_width - prompt_col) / 2 && s > cmdbuf)
- {
- int width;
- cmd_step_left(&s, &width, NULL);
- cols += width;
- }
-
- cmd_offset = s - cmdbuf;
- save_cp = cp;
- cmd_home();
- cmd_repaint(save_cp);
-}
-
-/*
- * Move cursor right one character.
- */
- static int
-cmd_right()
-{
- char *pr;
- char *ncp;
- int width;
-
- if (*cp == '\0')
- {
- /* Already at the end of the line. */
- return (CC_OK);
- }
- ncp = cp;
- pr = cmd_step_right(&ncp, &width, NULL);
- if (cmd_col + width >= sc_width)
- cmd_lshift();
- else if (cmd_col + width == sc_width - 1 && cp[1] != '\0')
- cmd_lshift();
- cp = ncp;
- cmd_col += width;
- putstr(pr);
- while (*cp != '\0')
- {
- pr = cmd_step_right(&ncp, &width, NULL);
- if (width > 0)
- break;
- putstr(pr);
- cp = ncp;
- }
- return (CC_OK);
-}
-
-/*
- * Move cursor left one character.
- */
- static int
-cmd_left()
-{
- char *ncp;
- int width, bswidth;
-
- if (cp <= cmdbuf)
- {
- /* Already at the beginning of the line */
- return (CC_OK);
- }
- ncp = cp;
- while (ncp > cmdbuf)
- {
- cmd_step_left(&ncp, &width, &bswidth);
- if (width > 0)
- break;
- }
- if (cmd_col < prompt_col + width)
- cmd_rshift();
- cp = ncp;
- cmd_col -= width;
- while (bswidth-- > 0)
- putbs();
- return (CC_OK);
-}
-
-/*
- * Insert a char into the command buffer, at the current position.
- */
- static int
-cmd_ichar(cs, clen)
- char *cs;
- int clen;
-{
- char *s;
-
- if (strlen(cmdbuf) + clen >= sizeof(cmdbuf)-1)
- {
- /* No room in the command buffer for another char. */
- bell();
- return (CC_ERROR);
- }
-
- /*
- * Make room for the new character (shift the tail of the buffer right).
- */
- for (s = &cmdbuf[strlen(cmdbuf)]; s >= cp; s--)
- s[clen] = s[0];
- /*
- * Insert the character into the buffer.
- */
- for (s = cp; s < cp + clen; s++)
- *s = *cs++;
- /*
- * Reprint the tail of the line from the inserted char.
- */
- cmd_repaint(cp);
- cmd_right();
- return (CC_OK);
-}
-
-/*
- * Backspace in the command buffer.
- * Delete the char to the left of the cursor.
- */
- static int
-cmd_erase()
-{
- register char *s;
- int clen;
-
- if (cp == cmdbuf)
- {
- /*
- * Backspace past beginning of the buffer:
- * this usually means abort the command.
- */
- return (CC_QUIT);
- }
- /*
- * Move cursor left (to the char being erased).
- */
- s = cp;
- cmd_left();
- clen = s - cp;
-
- /*
- * Remove the char from the buffer (shift the buffer left).
- */
- for (s = cp; ; s++)
- {
- s[0] = s[clen];
- if (s[0] == '\0')
- break;
- }
-
- /*
- * Repaint the buffer after the erased char.
- */
- cmd_repaint(cp);
-
- /*
- * We say that erasing the entire command string causes us
- * to abort the current command, if CF_QUIT_ON_ERASE is set.
- */
- if ((curr_cmdflags & CF_QUIT_ON_ERASE) && cp == cmdbuf && *cp == '\0')
- return (CC_QUIT);
- return (CC_OK);
-}
-
-/*
- * Delete the char under the cursor.
- */
- static int
-cmd_delete()
-{
- if (*cp == '\0')
- {
- /* At end of string; there is no char under the cursor. */
- return (CC_OK);
- }
- /*
- * Move right, then use cmd_erase.
- */
- cmd_right();
- cmd_erase();
- return (CC_OK);
-}
-
-/*
- * Delete the "word" to the left of the cursor.
- */
- static int
-cmd_werase()
-{
- if (cp > cmdbuf && cp[-1] == ' ')
- {
- /*
- * If the char left of cursor is a space,
- * erase all the spaces left of cursor (to the first non-space).
- */
- while (cp > cmdbuf && cp[-1] == ' ')
- (void) cmd_erase();
- } else
- {
- /*
- * If the char left of cursor is not a space,
- * erase all the nonspaces left of cursor (the whole "word").
- */
- while (cp > cmdbuf && cp[-1] != ' ')
- (void) cmd_erase();
- }
- return (CC_OK);
-}
-
-/*
- * Delete the "word" under the cursor.
- */
- static int
-cmd_wdelete()
-{
- if (*cp == ' ')
- {
- /*
- * If the char under the cursor is a space,
- * delete it and all the spaces right of cursor.
- */
- while (*cp == ' ')
- (void) cmd_delete();
- } else
- {
- /*
- * If the char under the cursor is not a space,
- * delete it and all nonspaces right of cursor (the whole word).
- */
- while (*cp != ' ' && *cp != '\0')
- (void) cmd_delete();
- }
- return (CC_OK);
-}
-
-/*
- * Delete all chars in the command buffer.
- */
- static int
-cmd_kill()
-{
- if (cmdbuf[0] == '\0')
- {
- /* Buffer is already empty; abort the current command. */
- return (CC_QUIT);
- }
- cmd_offset = 0;
- cmd_home();
- *cp = '\0';
- cmd_repaint(cp);
-
- /*
- * We say that erasing the entire command string causes us
- * to abort the current command, if CF_QUIT_ON_ERASE is set.
- */
- if (curr_cmdflags & CF_QUIT_ON_ERASE)
- return (CC_QUIT);
- return (CC_OK);
-}
-
-/*
- * Select an mlist structure to be the current command history.
- */
- public void
-set_mlist(mlist, cmdflags)
- void *mlist;
- int cmdflags;
-{
- curr_mlist = (struct mlist *) mlist;
- curr_cmdflags = cmdflags;
-
- /* Make sure the next up-arrow moves to the last string in the mlist. */
- if (curr_mlist != NULL)
- curr_mlist->curr_mp = curr_mlist;
-}
-
-#if CMD_HISTORY
-/*
- * Move up or down in the currently selected command history list.
- */
- static int
-cmd_updown(action)
- int action;
-{
- char *s;
-
- if (curr_mlist == NULL)
- {
- /*
- * The current command has no history list.
- */
- bell();
- return (CC_OK);
- }
- cmd_home();
- clear_eol();
- /*
- * Move curr_mp to the next/prev entry.
- */
- if (action == EC_UP)
- curr_mlist->curr_mp = curr_mlist->curr_mp->prev;
- else
- curr_mlist->curr_mp = curr_mlist->curr_mp->next;
- /*
- * Copy the entry into cmdbuf and echo it on the screen.
- */
- s = curr_mlist->curr_mp->string;
- if (s == NULL)
- s = "";
- strcpy(cmdbuf, s);
- for (cp = cmdbuf; *cp != '\0'; )
- cmd_right();
- return (CC_OK);
-}
-#endif
-
-/*
- * Add a string to a history list.
- */
- public void
-cmd_addhist(mlist, cmd)
- struct mlist *mlist;
- char *cmd;
-{
-#if CMD_HISTORY
- struct mlist *ml;
-
- /*
- * Don't save a trivial command.
- */
- if (strlen(cmd) == 0)
- return;
-
- /*
- * Save the command unless it's a duplicate of the
- * last command in the history.
- */
- ml = mlist->prev;
- if (ml == mlist || strcmp(ml->string, cmd) != 0)
- {
- /*
- * Did not find command in history.
- * Save the command and put it at the end of the history list.
- */
- ml = (struct mlist *) ecalloc(1, sizeof(struct mlist));
- ml->string = save(cmd);
- ml->next = mlist;
- ml->prev = mlist->prev;
- mlist->prev->next = ml;
- mlist->prev = ml;
- }
- /*
- * Point to the cmd just after the just-accepted command.
- * Thus, an UPARROW will always retrieve the previous command.
- */
- mlist->curr_mp = ml->next;
-#endif
-}
-
-/*
- * Accept the command in the command buffer.
- * Add it to the currently selected history list.
- */
- public void
-cmd_accept()
-{
-#if CMD_HISTORY
- /*
- * Nothing to do if there is no currently selected history list.
- */
- if (curr_mlist == NULL)
- return;
- cmd_addhist(curr_mlist, cmdbuf);
- curr_mlist->modified = 1;
-#endif
-}
-
-/*
- * Try to perform a line-edit function on the command buffer,
- * using a specified char as a line-editing command.
- * Returns:
- * CC_PASS The char does not invoke a line edit function.
- * CC_OK Line edit function done.
- * CC_QUIT The char requests the current command to be aborted.
- */
- static int
-cmd_edit(c)
- int c;
-{
- int action;
- int flags;
-
-#if TAB_COMPLETE_FILENAME
-#define not_in_completion() in_completion = 0
-#else
-#define not_in_completion()
-#endif
-
- /*
- * See if the char is indeed a line-editing command.
- */
- flags = 0;
-#if CMD_HISTORY
- if (curr_mlist == NULL)
- /*
- * No current history; don't accept history manipulation cmds.
- */
- flags |= EC_NOHISTORY;
-#endif
-#if TAB_COMPLETE_FILENAME
- if (curr_mlist == ml_search)
- /*
- * In a search command; don't accept file-completion cmds.
- */
- flags |= EC_NOCOMPLETE;
-#endif
-
- action = editchar(c, flags);
-
- switch (action)
- {
- case EC_RIGHT:
- not_in_completion();
- return (cmd_right());
- case EC_LEFT:
- not_in_completion();
- return (cmd_left());
- case EC_W_RIGHT:
- not_in_completion();
- while (*cp != '\0' && *cp != ' ')
- cmd_right();
- while (*cp == ' ')
- cmd_right();
- return (CC_OK);
- case EC_W_LEFT:
- not_in_completion();
- while (cp > cmdbuf && cp[-1] == ' ')
- cmd_left();
- while (cp > cmdbuf && cp[-1] != ' ')
- cmd_left();
- return (CC_OK);
- case EC_HOME:
- not_in_completion();
- cmd_offset = 0;
- cmd_home();
- cmd_repaint(cp);
- return (CC_OK);
- case EC_END:
- not_in_completion();
- while (*cp != '\0')
- cmd_right();
- return (CC_OK);
- case EC_INSERT:
- not_in_completion();
- return (CC_OK);
- case EC_BACKSPACE:
- not_in_completion();
- return (cmd_erase());
- case EC_LINEKILL:
- not_in_completion();
- return (cmd_kill());
- case EC_W_BACKSPACE:
- not_in_completion();
- return (cmd_werase());
- case EC_DELETE:
- not_in_completion();
- return (cmd_delete());
- case EC_W_DELETE:
- not_in_completion();
- return (cmd_wdelete());
- case EC_LITERAL:
- literal = 1;
- return (CC_OK);
-#if CMD_HISTORY
- case EC_UP:
- case EC_DOWN:
- not_in_completion();
- return (cmd_updown(action));
-#endif
-#if TAB_COMPLETE_FILENAME
- case EC_F_COMPLETE:
- case EC_B_COMPLETE:
- case EC_EXPAND:
- return (cmd_complete(action));
-#endif
- case EC_NOACTION:
- return (CC_OK);
- default:
- not_in_completion();
- return (CC_PASS);
- }
-}
-
-#if TAB_COMPLETE_FILENAME
-/*
- * Insert a string into the command buffer, at the current position.
- */
- static int
-cmd_istr(str)
- char *str;
-{
- char *s;
- int action;
- char *endline = str + strlen(str);
-
- for (s = str; *s != '\0'; )
- {
- char *os = s;
- step_char(&s, +1, endline);
- action = cmd_ichar(os, s - os);
- if (action != CC_OK)
- {
- bell();
- return (action);
- }
- }
- return (CC_OK);
-}
-
-/*
- * Find the beginning and end of the "current" word.
- * This is the word which the cursor (cp) is inside or at the end of.
- * Return pointer to the beginning of the word and put the
- * cursor at the end of the word.
- */
- static char *
-delimit_word()
-{
- char *word;
-#if SPACES_IN_FILENAMES
- char *p;
- int delim_quoted = 0;
- int meta_quoted = 0;
- char *esc = get_meta_escape();
- int esclen = strlen(esc);
-#endif
-
- /*
- * Move cursor to end of word.
- */
- if (*cp != ' ' && *cp != '\0')
- {
- /*
- * Cursor is on a nonspace.
- * Move cursor right to the next space.
- */
- while (*cp != ' ' && *cp != '\0')
- cmd_right();
- } else if (cp > cmdbuf && cp[-1] != ' ')
- {
- /*
- * Cursor is on a space, and char to the left is a nonspace.
- * We're already at the end of the word.
- */
- ;
-#if 0
- } else
- {
- /*
- * Cursor is on a space and char to the left is a space.
- * Huh? There's no word here.
- */
- return (NULL);
-#endif
- }
- /*
- * Find the beginning of the word which the cursor is in.
- */
- if (cp == cmdbuf)
- return (NULL);
-#if SPACES_IN_FILENAMES
- /*
- * If we have an unbalanced quote (that is, an open quote
- * without a corresponding close quote), we return everything
- * from the open quote, including spaces.
- */
- for (word = cmdbuf; word < cp; word++)
- if (*word != ' ')
- break;
- if (word >= cp)
- return (cp);
- for (p = cmdbuf; p < cp; p++)
- {
- if (meta_quoted)
- {
- meta_quoted = 0;
- } else if (esclen > 0 && p + esclen < cp &&
- strncmp(p, esc, esclen) == 0)
- {
- meta_quoted = 1;
- p += esclen - 1;
- } else if (delim_quoted)
- {
- if (*p == closequote)
- delim_quoted = 0;
- } else /* (!delim_quoted) */
- {
- if (*p == openquote)
- delim_quoted = 1;
- else if (*p == ' ')
- word = p+1;
- }
- }
-#endif
- return (word);
-}
-
-/*
- * Set things up to enter completion mode.
- * Expand the word under the cursor into a list of filenames
- * which start with that word, and set tk_text to that list.
- */
- static void
-init_compl()
-{
- char *word;
- char c;
-
- /*
- * Get rid of any previous tk_text.
- */
- if (tk_text != NULL)
- {
- free(tk_text);
- tk_text = NULL;
- }
- /*
- * Find the original (uncompleted) word in the command buffer.
- */
- word = delimit_word();
- if (word == NULL)
- return;
- /*
- * Set the insertion point to the point in the command buffer
- * where the original (uncompleted) word now sits.
- */
- tk_ipoint = word;
- /*
- * Save the original (uncompleted) word
- */
- if (tk_original != NULL)
- free(tk_original);
- tk_original = (char *) ecalloc(cp-word+1, sizeof(char));
- strncpy(tk_original, word, cp-word);
- /*
- * Get the expanded filename.
- * This may result in a single filename, or
- * a blank-separated list of filenames.
- */
- c = *cp;
- *cp = '\0';
- if (*word != openquote)
- {
- tk_text = fcomplete(word);
- } else
- {
- char *qword = shell_quote(word+1);
- if (qword == NULL)
- tk_text = fcomplete(word+1);
- else
- {
- tk_text = fcomplete(qword);
- free(qword);
- }
- }
- *cp = c;
-}
-
-/*
- * Return the next word in the current completion list.
- */
- static char *
-next_compl(action, prev)
- int action;
- char *prev;
-{
- switch (action)
- {
- case EC_F_COMPLETE:
- return (forw_textlist(&tk_tlist, prev));
- case EC_B_COMPLETE:
- return (back_textlist(&tk_tlist, prev));
- }
- /* Cannot happen */
- return ("?");
-}
-
-/*
- * Complete the filename before (or under) the cursor.
- * cmd_complete may be called multiple times. The global in_completion
- * remembers whether this call is the first time (create the list),
- * or a subsequent time (step thru the list).
- */
- static int
-cmd_complete(action)
- int action;
-{
- char *s;
-
- if (!in_completion || action == EC_EXPAND)
- {
- /*
- * Expand the word under the cursor and
- * use the first word in the expansion
- * (or the entire expansion if we're doing EC_EXPAND).
- */
- init_compl();
- if (tk_text == NULL)
- {
- bell();
- return (CC_OK);
- }
- if (action == EC_EXPAND)
- {
- /*
- * Use the whole list.
- */
- tk_trial = tk_text;
- } else
- {
- /*
- * Use the first filename in the list.
- */
- in_completion = 1;
- init_textlist(&tk_tlist, tk_text);
- tk_trial = next_compl(action, (char*)NULL);
- }
- } else
- {
- /*
- * We already have a completion list.
- * Use the next/previous filename from the list.
- */
- tk_trial = next_compl(action, tk_trial);
- }
-
- /*
- * Remove the original word, or the previous trial completion.
- */
- while (cp > tk_ipoint)
- (void) cmd_erase();
-
- if (tk_trial == NULL)
- {
- /*
- * There are no more trial completions.
- * Insert the original (uncompleted) filename.
- */
- in_completion = 0;
- if (cmd_istr(tk_original) != CC_OK)
- goto fail;
- } else
- {
- /*
- * Insert trial completion.
- */
- if (cmd_istr(tk_trial) != CC_OK)
- goto fail;
- /*
- * If it is a directory, append a slash.
- */
- if (is_dir(tk_trial))
- {
- if (cp > cmdbuf && cp[-1] == closequote)
- (void) cmd_erase();
- s = lgetenv("LESSSEPARATOR");
- if (s == NULL)
- s = PATHNAME_SEP;
- if (cmd_istr(s) != CC_OK)
- goto fail;
- }
- }
-
- return (CC_OK);
-
-fail:
- in_completion = 0;
- bell();
- return (CC_OK);
-}
-
-#endif /* TAB_COMPLETE_FILENAME */
-
-/*
- * Process a single character of a multi-character command, such as
- * a number, or the pattern of a search command.
- * Returns:
- * CC_OK The char was accepted.
- * CC_QUIT The char requests the command to be aborted.
- * CC_ERROR The char could not be accepted due to an error.
- */
- public int
-cmd_char(c)
- int c;
-{
- int action;
- int len;
-
- if (!utf_mode)
- {
- cmd_mbc_buf[0] = c;
- len = 1;
- } else
- {
- /* Perform strict validation in all possible cases. */
- if (cmd_mbc_buf_len == 0)
- {
- retry:
- cmd_mbc_buf_index = 1;
- *cmd_mbc_buf = c;
- if (IS_ASCII_OCTET(c))
- cmd_mbc_buf_len = 1;
- else if (IS_UTF8_LEAD(c))
- {
- cmd_mbc_buf_len = utf_len(c);
- return (CC_OK);
- } else
- {
- /* UTF8_INVALID or stray UTF8_TRAIL */
- bell();
- return (CC_ERROR);
- }
- } else if (IS_UTF8_TRAIL(c))
- {
- cmd_mbc_buf[cmd_mbc_buf_index++] = c;
- if (cmd_mbc_buf_index < cmd_mbc_buf_len)
- return (CC_OK);
- if (!is_utf8_well_formed(cmd_mbc_buf))
- {
- /* complete, but not well formed (non-shortest form), sequence */
- cmd_mbc_buf_len = 0;
- bell();
- return (CC_ERROR);
- }
- } else
- {
- /* Flush incomplete (truncated) sequence. */
- cmd_mbc_buf_len = 0;
- bell();
- /* Handle new char. */
- goto retry;
- }
-
- len = cmd_mbc_buf_len;
- cmd_mbc_buf_len = 0;
- }
-
- if (literal)
- {
- /*
- * Insert the char, even if it is a line-editing char.
- */
- literal = 0;
- return (cmd_ichar(cmd_mbc_buf, len));
- }
-
- /*
- * See if it is a line-editing character.
- */
- if (in_mca() && len == 1)
- {
- action = cmd_edit(c);
- switch (action)
- {
- case CC_OK:
- case CC_QUIT:
- return (action);
- case CC_PASS:
- break;
- }
- }
-
- /*
- * Insert the char into the command buffer.
- */
- return (cmd_ichar(cmd_mbc_buf, len));
-}
-
-/*
- * Return the number currently in the command buffer.
- */
- public LINENUM
-cmd_int(frac)
- long *frac;
-{
- char *p;
- LINENUM n = 0;
- int err;
-
- for (p = cmdbuf; *p >= '0' && *p <= '9'; p++)
- n = (n * 10) + (*p - '0');
- *frac = 0;
- if (*p++ == '.')
- {
- *frac = getfraction(&p, NULL, &err);
- /* {{ do something if err is set? }} */
- }
- return (n);
-}
-
-/*
- * Return a pointer to the command buffer.
- */
- public char *
-get_cmdbuf()
-{
- return (cmdbuf);
-}
-
-/*
- * Return the last (most recent) string in the current command history.
- */
- public char *
-cmd_lastpattern()
-{
- if (curr_mlist == NULL)
- return (NULL);
- return (curr_mlist->curr_mp->prev->string);
-}
-
-#if CMD_HISTORY
-/*
- * Get the name of the history file.
- */
- static char *
-histfile_name()
-{
- char *home;
- char *name;
- int len;
-
- /* See if filename is explicitly specified by $LESSHISTFILE. */
- name = lgetenv("LESSHISTFILE");
- if (name != NULL && *name != '\0')
- {
- if (strcmp(name, "-") == 0 || strcmp(name, "/dev/null") == 0)
- /* $LESSHISTFILE == "-" means don't use a history file. */
- return (NULL);
- return (save(name));
- }
-
- /* Otherwise, file is in $HOME. */
- home = lgetenv("HOME");
- if (home == NULL || *home == '\0')
- {
-#if OS2
- home = lgetenv("INIT");
- if (home == NULL || *home == '\0')
-#endif
- return (NULL);
- }
- len = strlen(home) + strlen(LESSHISTFILE) + 2;
- name = (char *) ecalloc(len, sizeof(char));
- SNPRINTF2(name, len, "%s/%s", home, LESSHISTFILE);
- return (name);
-}
-#endif /* CMD_HISTORY */
-
-/*
- * Initialize history from a .lesshist file.
- */
- public void
-init_cmdhist()
-{
-#if CMD_HISTORY
- struct mlist *ml = NULL;
- char line[CMDBUF_SIZE];
- char *filename;
- FILE *f;
- char *p;
-
- filename = histfile_name();
- if (filename == NULL)
- return;
- f = fopen(filename, "r");
- free(filename);
- if (f == NULL)
- return;
- if (fgets(line, sizeof(line), f) == NULL ||
- strncmp(line, HISTFILE_FIRST_LINE, strlen(HISTFILE_FIRST_LINE)) != 0)
- {
- fclose(f);
- return;
- }
- while (fgets(line, sizeof(line), f) != NULL)
- {
- for (p = line; *p != '\0'; p++)
- {
- if (*p == '\n' || *p == '\r')
- {
- *p = '\0';
- break;
- }
- }
- if (strcmp(line, HISTFILE_SEARCH_SECTION) == 0)
- ml = &mlist_search;
- else if (strcmp(line, HISTFILE_SHELL_SECTION) == 0)
- {
-#if SHELL_ESCAPE || PIPEC
- ml = &mlist_shell;
-#else
- ml = NULL;
-#endif
- } else if (*line == '"')
- {
- if (ml != NULL)
- cmd_addhist(ml, line+1);
- }
- }
- fclose(f);
-#endif /* CMD_HISTORY */
-}
-
-/*
- *
- */
-#if CMD_HISTORY
- static void
-save_mlist(ml, f)
- struct mlist *ml;
- FILE *f;
-{
- int histsize = 0;
- int n;
- char *s;
-
- s = lgetenv("LESSHISTSIZE");
- if (s != NULL)
- histsize = atoi(s);
- if (histsize == 0)
- histsize = 100;
-
- ml = ml->prev;
- for (n = 0; n < histsize; n++)
- {
- if (ml->string == NULL)
- break;
- ml = ml->prev;
- }
- for (ml = ml->next; ml->string != NULL; ml = ml->next)
- fprintf(f, "\"%s\n", ml->string);
-}
-#endif /* CMD_HISTORY */
-
-/*
- *
- */
- public void
-save_cmdhist()
-{
-#if CMD_HISTORY
- char *filename;
- FILE *f;
- int modified = 0;
-
- filename = histfile_name();
- if (filename == NULL)
- return;
- if (mlist_search.modified)
- modified = 1;
-#if SHELL_ESCAPE || PIPEC
- if (mlist_shell.modified)
- modified = 1;
-#endif
- if (!modified)
- return;
- f = fopen(filename, "w");
- free(filename);
- if (f == NULL)
- return;
-#if HAVE_FCHMOD
- /* Make history file readable only by owner. */
- fchmod(fileno(f), 0600);
-#endif
-
- fprintf(f, "%s\n", HISTFILE_FIRST_LINE);
-
- fprintf(f, "%s\n", HISTFILE_SEARCH_SECTION);
- save_mlist(&mlist_search, f);
-
-#if SHELL_ESCAPE || PIPEC
- fprintf(f, "%s\n", HISTFILE_SHELL_SECTION);
- save_mlist(&mlist_shell, f);
-#endif
-
- fclose(f);
-#endif /* CMD_HISTORY */
-}
diff --git a/contrib/less/command.c b/contrib/less/command.c
deleted file mode 100644
index ef6dfa4..0000000
--- a/contrib/less/command.c
+++ /dev/null
@@ -1,1678 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * User-level command processor.
- */
-
-#include "less.h"
-#if MSDOS_COMPILER==WIN32C
-#include <windows.h>
-#endif
-#include "position.h"
-#include "option.h"
-#include "cmd.h"
-
-extern int erase_char, erase2_char, kill_char;
-extern int sigs;
-extern int quit_if_one_screen;
-extern int squished;
-extern int hit_eof;
-extern int sc_width;
-extern int sc_height;
-extern int swindow;
-extern int jump_sline;
-extern int quitting;
-extern int wscroll;
-extern int top_scroll;
-extern int ignore_eoi;
-extern int secure;
-extern int hshift;
-extern int show_attn;
-extern char *every_first_cmd;
-extern char *curr_altfilename;
-extern char version[];
-extern struct scrpos initial_scrpos;
-extern IFILE curr_ifile;
-extern void constant *ml_search;
-extern void constant *ml_examine;
-#if SHELL_ESCAPE || PIPEC
-extern void constant *ml_shell;
-#endif
-#if EDITOR
-extern char *editor;
-extern char *editproto;
-#endif
-extern int screen_trashed; /* The screen has been overwritten */
-extern int shift_count;
-extern int oldbot;
-extern int forw_prompt;
-
-static char ungot[UNGOT_SIZE];
-static char *ungotp = NULL;
-#if SHELL_ESCAPE
-static char *shellcmd = NULL; /* For holding last shell command for "!!" */
-#endif
-static int mca; /* The multicharacter command (action) */
-static int search_type; /* The previous type of search */
-static LINENUM number; /* The number typed by the user */
-static long fraction; /* The fractional part of the number */
-static char optchar;
-static int optflag;
-static int optgetname;
-static POSITION bottompos;
-static int save_hshift;
-#if PIPEC
-static char pipec;
-#endif
-
-static void multi_search();
-
-/*
- * Move the cursor to start of prompt line before executing a command.
- * This looks nicer if the command takes a long time before
- * updating the screen.
- */
- static void
-cmd_exec()
-{
- clear_attn();
- clear_bot();
- flush();
-}
-
-/*
- * Set up the display to start a new multi-character command.
- */
- static void
-start_mca(action, prompt, mlist, cmdflags)
- int action;
- char *prompt;
- void *mlist;
- int cmdflags;
-{
- mca = action;
- clear_bot();
- clear_cmd();
- cmd_putstr(prompt);
- set_mlist(mlist, cmdflags);
-}
-
- public int
-in_mca()
-{
- return (mca != 0 && mca != A_PREFIX);
-}
-
-/*
- * Set up the display to start a new search command.
- */
- static void
-mca_search()
-{
- if (search_type & SRCH_FORW)
- mca = A_F_SEARCH;
- else
- mca = A_B_SEARCH;
-
- clear_bot();
- clear_cmd();
-
- if (search_type & SRCH_NO_MATCH)
- cmd_putstr("Non-match ");
- if (search_type & SRCH_FIRST_FILE)
- cmd_putstr("First-file ");
- if (search_type & SRCH_PAST_EOF)
- cmd_putstr("EOF-ignore ");
- if (search_type & SRCH_NO_MOVE)
- cmd_putstr("Keep-pos ");
- if (search_type & SRCH_NO_REGEX)
- cmd_putstr("Regex-off ");
-
- if (search_type & SRCH_FORW)
- cmd_putstr("/");
- else
- cmd_putstr("?");
- set_mlist(ml_search, 0);
-}
-
-/*
- * Set up the display to start a new toggle-option command.
- */
- static void
-mca_opt_toggle()
-{
- int no_prompt;
- int flag;
- char *dash;
-
- no_prompt = (optflag & OPT_NO_PROMPT);
- flag = (optflag & ~OPT_NO_PROMPT);
- dash = (flag == OPT_NO_TOGGLE) ? "_" : "-";
-
- mca = A_OPT_TOGGLE;
- clear_bot();
- clear_cmd();
- cmd_putstr(dash);
- if (optgetname)
- cmd_putstr(dash);
- if (no_prompt)
- cmd_putstr("(P)");
- switch (flag)
- {
- case OPT_UNSET:
- cmd_putstr("+");
- break;
- case OPT_SET:
- cmd_putstr("!");
- break;
- }
- set_mlist(NULL, 0);
-}
-
-/*
- * Execute a multicharacter command.
- */
- static void
-exec_mca()
-{
- register char *cbuf;
-
- cmd_exec();
- cbuf = get_cmdbuf();
-
- switch (mca)
- {
- case A_F_SEARCH:
- case A_B_SEARCH:
- multi_search(cbuf, (int) number);
- break;
- case A_FIRSTCMD:
- /*
- * Skip leading spaces or + signs in the string.
- */
- while (*cbuf == '+' || *cbuf == ' ')
- cbuf++;
- if (every_first_cmd != NULL)
- free(every_first_cmd);
- if (*cbuf == '\0')
- every_first_cmd = NULL;
- else
- every_first_cmd = save(cbuf);
- break;
- case A_OPT_TOGGLE:
- toggle_option(optchar, cbuf, optflag);
- optchar = '\0';
- break;
- case A_F_BRACKET:
- match_brac(cbuf[0], cbuf[1], 1, (int) number);
- break;
- case A_B_BRACKET:
- match_brac(cbuf[1], cbuf[0], 0, (int) number);
- break;
-#if EXAMINE
- case A_EXAMINE:
- if (secure)
- break;
- edit_list(cbuf);
-#if TAGS
- /* If tag structure is loaded then clean it up. */
- cleantags();
-#endif
- break;
-#endif
-#if SHELL_ESCAPE
- case A_SHELL:
- /*
- * !! just uses whatever is in shellcmd.
- * Otherwise, copy cmdbuf to shellcmd,
- * expanding any special characters ("%" or "#").
- */
- if (*cbuf != '!')
- {
- if (shellcmd != NULL)
- free(shellcmd);
- shellcmd = fexpand(cbuf);
- }
-
- if (secure)
- break;
- if (shellcmd == NULL)
- lsystem("", "!done");
- else
- lsystem(shellcmd, "!done");
- break;
-#endif
-#if PIPEC
- case A_PIPE:
- if (secure)
- break;
- (void) pipe_mark(pipec, cbuf);
- error("|done", NULL_PARG);
- break;
-#endif
- }
-}
-
-/*
- * Add a character to a multi-character command.
- */
- static int
-mca_char(c)
- int c;
-{
- char *p;
- int flag;
- char buf[3];
- PARG parg;
-
- switch (mca)
- {
- case 0:
- /*
- * Not in a multicharacter command.
- */
- return (NO_MCA);
-
- case A_PREFIX:
- /*
- * In the prefix of a command.
- * This not considered a multichar command
- * (even tho it uses cmdbuf, etc.).
- * It is handled in the commands() switch.
- */
- return (NO_MCA);
-
- case A_DIGIT:
- /*
- * Entering digits of a number.
- * Terminated by a non-digit.
- */
- if (!((c >= '0' && c <= '9') || c == '.') &&
- editchar(c, EC_PEEK|EC_NOHISTORY|EC_NOCOMPLETE|EC_NORIGHTLEFT) == A_INVALID)
- {
- /*
- * Not part of the number.
- * Treat as a normal command character.
- */
- number = cmd_int(&fraction);
- mca = 0;
- cmd_accept();
- return (NO_MCA);
- }
- break;
-
- case A_OPT_TOGGLE:
- /*
- * Special case for the TOGGLE_OPTION command.
- * If the option letter which was entered is a
- * single-char option, execute the command immediately,
- * so user doesn't have to hit RETURN.
- * If the first char is + or -, this indicates
- * OPT_UNSET or OPT_SET respectively, instead of OPT_TOGGLE.
- * "--" begins inputting a long option name.
- */
- if (optchar == '\0' && len_cmdbuf() == 0)
- {
- flag = (optflag & ~OPT_NO_PROMPT);
- if (flag == OPT_NO_TOGGLE)
- {
- switch (c)
- {
- case '_':
- /* "__" = long option name. */
- optgetname = TRUE;
- mca_opt_toggle();
- return (MCA_MORE);
- }
- } else
- {
- switch (c)
- {
- case '+':
- /* "-+" = UNSET. */
- optflag = (flag == OPT_UNSET) ?
- OPT_TOGGLE : OPT_UNSET;
- mca_opt_toggle();
- return (MCA_MORE);
- case '!':
- /* "-!" = SET */
- optflag = (flag == OPT_SET) ?
- OPT_TOGGLE : OPT_SET;
- mca_opt_toggle();
- return (MCA_MORE);
- case CONTROL('P'):
- optflag ^= OPT_NO_PROMPT;
- mca_opt_toggle();
- return (MCA_MORE);
- case '-':
- /* "--" = long option name. */
- optgetname = TRUE;
- mca_opt_toggle();
- return (MCA_MORE);
- }
- }
- }
- if (optgetname)
- {
- /*
- * We're getting a long option name.
- * See if we've matched an option name yet.
- * If so, display the complete name and stop
- * accepting chars until user hits RETURN.
- */
- struct loption *o;
- char *oname;
- int lc;
-
- if (c == '\n' || c == '\r')
- {
- /*
- * When the user hits RETURN, make sure
- * we've matched an option name, then
- * pretend he just entered the equivalent
- * option letter.
- */
- if (optchar == '\0')
- {
- parg.p_string = get_cmdbuf();
- error("There is no --%s option", &parg);
- return (MCA_DONE);
- }
- optgetname = FALSE;
- cmd_reset();
- c = optchar;
- } else
- {
- if (optchar != '\0')
- {
- /*
- * Already have a match for the name.
- * Don't accept anything but erase/kill.
- */
- if (c == erase_char ||
- c == erase2_char ||
- c == kill_char)
- return (MCA_DONE);
- return (MCA_MORE);
- }
- /*
- * Add char to cmd buffer and try to match
- * the option name.
- */
- if (cmd_char(c) == CC_QUIT)
- return (MCA_DONE);
- p = get_cmdbuf();
- lc = ASCII_IS_LOWER(p[0]);
- o = findopt_name(&p, &oname, NULL);
- if (o != NULL)
- {
- /*
- * Got a match.
- * Remember the option letter and
- * display the full option name.
- */
- optchar = o->oletter;
- if (!lc && ASCII_IS_LOWER(optchar))
- optchar = ASCII_TO_UPPER(optchar);
- cmd_reset();
- mca_opt_toggle();
- for (p = oname; *p != '\0'; p++)
- {
- c = *p;
- if (!lc && ASCII_IS_LOWER(c))
- c = ASCII_TO_UPPER(c);
- if (cmd_char(c) != CC_OK)
- return (MCA_DONE);
- }
- }
- return (MCA_MORE);
- }
- } else
- {
- if (c == erase_char || c == erase2_char || c == kill_char)
- break;
- if (optchar != '\0')
- /* We already have the option letter. */
- break;
- }
-
- optchar = c;
- if ((optflag & ~OPT_NO_PROMPT) != OPT_TOGGLE ||
- single_char_option(c))
- {
- toggle_option(c, "", optflag);
- return (MCA_DONE);
- }
- /*
- * Display a prompt appropriate for the option letter.
- */
- if ((p = opt_prompt(c)) == NULL)
- {
- buf[0] = '-';
- buf[1] = c;
- buf[2] = '\0';
- p = buf;
- }
- start_mca(A_OPT_TOGGLE, p, (void*)NULL, 0);
- return (MCA_MORE);
-
- case A_F_SEARCH:
- case A_B_SEARCH:
- /*
- * Special case for search commands.
- * Certain characters as the first char of
- * the pattern have special meaning:
- * ! Toggle the NO_MATCH flag
- * * Toggle the PAST_EOF flag
- * @ Toggle the FIRST_FILE flag
- */
- if (len_cmdbuf() > 0)
- /*
- * Only works for the first char of the pattern.
- */
- break;
-
- flag = 0;
- switch (c)
- {
- case CONTROL('E'): /* ignore END of file */
- case '*':
- flag = SRCH_PAST_EOF;
- break;
- case CONTROL('F'): /* FIRST file */
- case '@':
- flag = SRCH_FIRST_FILE;
- break;
- case CONTROL('K'): /* KEEP position */
- flag = SRCH_NO_MOVE;
- break;
- case CONTROL('R'): /* Don't use REGULAR EXPRESSIONS */
- flag = SRCH_NO_REGEX;
- break;
- case CONTROL('N'): /* NOT match */
- case '!':
- flag = SRCH_NO_MATCH;
- break;
- }
- if (flag != 0)
- {
- search_type ^= flag;
- mca_search();
- return (MCA_MORE);
- }
- break;
- }
-
- /*
- * Any other multicharacter command
- * is terminated by a newline.
- */
- if (c == '\n' || c == '\r')
- {
- /*
- * Execute the command.
- */
- exec_mca();
- return (MCA_DONE);
- }
-
- /*
- * Append the char to the command buffer.
- */
- if (cmd_char(c) == CC_QUIT)
- /*
- * Abort the multi-char command.
- */
- return (MCA_DONE);
-
- if ((mca == A_F_BRACKET || mca == A_B_BRACKET) && len_cmdbuf() >= 2)
- {
- /*
- * Special case for the bracket-matching commands.
- * Execute the command after getting exactly two
- * characters from the user.
- */
- exec_mca();
- return (MCA_DONE);
- }
-
- /*
- * Need another character.
- */
- return (MCA_MORE);
-}
-
-/*
- * Discard any buffered file data.
- */
- static void
-clear_buffers()
-{
- if (!(ch_getflags() & CH_CANSEEK))
- return;
- ch_flush();
- clr_linenum();
-#if HILITE_SEARCH
- clr_hilite();
-#endif
-}
-
-/*
- * Make sure the screen is displayed.
- */
- static void
-make_display()
-{
- /*
- * If nothing is displayed yet, display starting from initial_scrpos.
- */
- if (empty_screen())
- {
- if (initial_scrpos.pos == NULL_POSITION)
- /*
- * {{ Maybe this should be:
- * jump_loc(ch_zero(), jump_sline);
- * but this behavior seems rather unexpected
- * on the first screen. }}
- */
- jump_loc(ch_zero(), 1);
- else
- jump_loc(initial_scrpos.pos, initial_scrpos.ln);
- } else if (screen_trashed)
- {
- int save_top_scroll = top_scroll;
- int save_ignore_eoi = ignore_eoi;
- top_scroll = 1;
- ignore_eoi = 0;
- if (screen_trashed == 2)
- {
- /* Special case used by ignore_eoi: re-open the input file
- * and jump to the end of the file. */
- reopen_curr_ifile();
- jump_forw();
- }
- repaint();
- top_scroll = save_top_scroll;
- ignore_eoi = save_ignore_eoi;
- }
-}
-
-/*
- * Display the appropriate prompt.
- */
- static void
-prompt()
-{
- register char *p;
-
- if (ungotp != NULL && ungotp > ungot)
- {
- /*
- * No prompt necessary if commands are from
- * ungotten chars rather than from the user.
- */
- return;
- }
-
- /*
- * Make sure the screen is displayed.
- */
- make_display();
- bottompos = position(BOTTOM_PLUS_ONE);
-
- /*
- * If we've hit EOF on the last file, and the -E flag is set
- * (or -F is set and this is the first prompt), then quit.
- * {{ Relying on "first prompt" to detect a single-screen file
- * fails if +G is used, for example. }}
- */
- if ((get_quit_at_eof() == OPT_ONPLUS || quit_if_one_screen) &&
- hit_eof && !(ch_getflags() & CH_HELPFILE) &&
- next_ifile(curr_ifile) == NULL_IFILE)
- quit(QUIT_OK);
- quit_if_one_screen = FALSE;
-#if 0 /* This doesn't work well because some "te"s clear the screen. */
- /*
- * If the -e flag is set and we've hit EOF on the last file,
- * and the file is squished (shorter than the screen), quit.
- */
- if (get_quit_at_eof() && squished &&
- next_ifile(curr_ifile) == NULL_IFILE)
- quit(QUIT_OK);
-#endif
-
-#if MSDOS_COMPILER==WIN32C
- /*
- * In Win32, display the file name in the window title.
- */
- if (!(ch_getflags() & CH_HELPFILE))
- SetConsoleTitle(pr_expand("Less?f - %f.", 0));
-#endif
- /*
- * Select the proper prompt and display it.
- */
- /*
- * If the previous action was a forward movement,
- * don't clear the bottom line of the display;
- * just print the prompt since the forward movement guarantees
- * that we're in the right position to display the prompt.
- * Clearing the line could cause a problem: for example, if the last
- * line displayed ended at the right screen edge without a newline,
- * then clearing would clear the last displayed line rather than
- * the prompt line.
- */
- if (!forw_prompt)
- clear_bot();
- clear_cmd();
- forw_prompt = 0;
- p = pr_string();
- if (p == NULL || *p == '\0')
- putchr(':');
- else
- {
- at_enter(AT_STANDOUT);
- putstr(p);
- at_exit();
- }
- clear_eol();
-}
-
-/*
- * Display the less version message.
- */
- public void
-dispversion()
-{
- PARG parg;
-
- parg.p_string = version;
- error("less %s", &parg);
-}
-
-/*
- * Get command character.
- * The character normally comes from the keyboard,
- * but may come from ungotten characters
- * (characters previously given to ungetcc or ungetsc).
- */
- public int
-getcc()
-{
- if (ungotp == NULL)
- /*
- * Normal case: no ungotten chars, so get one from the user.
- */
- return (getchr());
-
- if (ungotp > ungot)
- /*
- * Return the next ungotten char.
- */
- return (*--ungotp);
-
- /*
- * We have just run out of ungotten chars.
- */
- ungotp = NULL;
- if (len_cmdbuf() == 0 || !empty_screen())
- return (getchr());
- /*
- * Command is incomplete, so try to complete it.
- */
- switch (mca)
- {
- case A_DIGIT:
- /*
- * We have a number but no command. Treat as #g.
- */
- return ('g');
-
- case A_F_SEARCH:
- case A_B_SEARCH:
- /*
- * We have "/string" but no newline. Add the \n.
- */
- return ('\n');
-
- default:
- /*
- * Some other incomplete command. Let user complete it.
- */
- return (getchr());
- }
-}
-
-/*
- * "Unget" a command character.
- * The next getcc() will return this character.
- */
- public void
-ungetcc(c)
- int c;
-{
- if (ungotp == NULL)
- ungotp = ungot;
- if (ungotp >= ungot + sizeof(ungot))
- {
- error("ungetcc overflow", NULL_PARG);
- quit(QUIT_ERROR);
- }
- *ungotp++ = c;
-}
-
-/*
- * Unget a whole string of command characters.
- * The next sequence of getcc()'s will return this string.
- */
- public void
-ungetsc(s)
- char *s;
-{
- register char *p;
-
- for (p = s + strlen(s) - 1; p >= s; p--)
- ungetcc(*p);
-}
-
-/*
- * Search for a pattern, possibly in multiple files.
- * If SRCH_FIRST_FILE is set, begin searching at the first file.
- * If SRCH_PAST_EOF is set, continue the search thru multiple files.
- */
- static void
-multi_search(pattern, n)
- char *pattern;
- int n;
-{
- register int nomore;
- IFILE save_ifile;
- int changed_file;
-
- changed_file = 0;
- save_ifile = save_curr_ifile();
-
- if (search_type & SRCH_FIRST_FILE)
- {
- /*
- * Start at the first (or last) file
- * in the command line list.
- */
- if (search_type & SRCH_FORW)
- nomore = edit_first();
- else
- nomore = edit_last();
- if (nomore)
- {
- unsave_ifile(save_ifile);
- return;
- }
- changed_file = 1;
- search_type &= ~SRCH_FIRST_FILE;
- }
-
- for (;;)
- {
- n = search(search_type, pattern, n);
- /*
- * The SRCH_NO_MOVE flag doesn't "stick": it gets cleared
- * after being used once. This allows "n" to work after
- * using a /@@ search.
- */
- search_type &= ~SRCH_NO_MOVE;
- if (n == 0)
- {
- /*
- * Found it.
- */
- unsave_ifile(save_ifile);
- return;
- }
-
- if (n < 0)
- /*
- * Some kind of error in the search.
- * Error message has been printed by search().
- */
- break;
-
- if ((search_type & SRCH_PAST_EOF) == 0)
- /*
- * We didn't find a match, but we're
- * supposed to search only one file.
- */
- break;
- /*
- * Move on to the next file.
- */
- if (search_type & SRCH_FORW)
- nomore = edit_next(1);
- else
- nomore = edit_prev(1);
- if (nomore)
- break;
- changed_file = 1;
- }
-
- /*
- * Didn't find it.
- * Print an error message if we haven't already.
- */
- if (n > 0)
- error("Pattern not found", NULL_PARG);
-
- if (changed_file)
- {
- /*
- * Restore the file we were originally viewing.
- */
- reedit_ifile(save_ifile);
- } else
- {
- unsave_ifile(save_ifile);
- }
-}
-
-/*
- * Main command processor.
- * Accept and execute commands until a quit command.
- */
- public void
-commands()
-{
- register int c;
- register int action;
- register char *cbuf;
- int newaction;
- int save_search_type;
- char *extra;
- char tbuf[2];
- PARG parg;
- IFILE old_ifile;
- IFILE new_ifile;
- char *tagfile;
-
- search_type = SRCH_FORW;
- wscroll = (sc_height + 1) / 2;
- newaction = A_NOACTION;
-
- for (;;)
- {
- mca = 0;
- cmd_accept();
- number = 0;
- optchar = '\0';
-
- /*
- * See if any signals need processing.
- */
- if (sigs)
- {
- psignals();
- if (quitting)
- quit(QUIT_SAVED_STATUS);
- }
-
- /*
- * See if window size changed, for systems that don't
- * generate SIGWINCH.
- */
- check_winch();
-
- /*
- * Display prompt and accept a character.
- */
- cmd_reset();
- prompt();
- if (sigs)
- continue;
- if (newaction == A_NOACTION)
- c = getcc();
-
- again:
- if (sigs)
- continue;
-
- if (newaction != A_NOACTION)
- {
- action = newaction;
- newaction = A_NOACTION;
- } else
- {
- /*
- * If we are in a multicharacter command, call mca_char.
- * Otherwise we call fcmd_decode to determine the
- * action to be performed.
- */
- if (mca)
- switch (mca_char(c))
- {
- case MCA_MORE:
- /*
- * Need another character.
- */
- c = getcc();
- goto again;
- case MCA_DONE:
- /*
- * Command has been handled by mca_char.
- * Start clean with a prompt.
- */
- continue;
- case NO_MCA:
- /*
- * Not a multi-char command
- * (at least, not anymore).
- */
- break;
- }
-
- /*
- * Decode the command character and decide what to do.
- */
- if (mca)
- {
- /*
- * We're in a multichar command.
- * Add the character to the command buffer
- * and display it on the screen.
- * If the user backspaces past the start
- * of the line, abort the command.
- */
- if (cmd_char(c) == CC_QUIT || len_cmdbuf() == 0)
- continue;
- cbuf = get_cmdbuf();
- } else
- {
- /*
- * Don't use cmd_char if we're starting fresh
- * at the beginning of a command, because we
- * don't want to echo the command until we know
- * it is a multichar command. We also don't
- * want erase_char/kill_char to be treated
- * as line editing characters.
- */
- tbuf[0] = c;
- tbuf[1] = '\0';
- cbuf = tbuf;
- }
- extra = NULL;
- action = fcmd_decode(cbuf, &extra);
- /*
- * If an "extra" string was returned,
- * process it as a string of command characters.
- */
- if (extra != NULL)
- ungetsc(extra);
- }
- /*
- * Clear the cmdbuf string.
- * (But not if we're in the prefix of a command,
- * because the partial command string is kept there.)
- */
- if (action != A_PREFIX)
- cmd_reset();
-
- switch (action)
- {
- case A_DIGIT:
- /*
- * First digit of a number.
- */
- start_mca(A_DIGIT, ":", (void*)NULL, CF_QUIT_ON_ERASE);
- goto again;
-
- case A_F_WINDOW:
- /*
- * Forward one window (and set the window size).
- */
- if (number > 0)
- swindow = (int) number;
- /* FALLTHRU */
- case A_F_SCREEN:
- /*
- * Forward one screen.
- */
- if (number <= 0)
- number = get_swindow();
- cmd_exec();
- if (show_attn)
- set_attnpos(bottompos);
- forward((int) number, 0, 1);
- break;
-
- case A_B_WINDOW:
- /*
- * Backward one window (and set the window size).
- */
- if (number > 0)
- swindow = (int) number;
- /* FALLTHRU */
- case A_B_SCREEN:
- /*
- * Backward one screen.
- */
- if (number <= 0)
- number = get_swindow();
- cmd_exec();
- backward((int) number, 0, 1);
- break;
-
- case A_F_LINE:
- /*
- * Forward N (default 1) line.
- */
- if (number <= 0)
- number = 1;
- cmd_exec();
- if (show_attn == OPT_ONPLUS && number > 1)
- set_attnpos(bottompos);
- forward((int) number, 0, 0);
- break;
-
- case A_B_LINE:
- /*
- * Backward N (default 1) line.
- */
- if (number <= 0)
- number = 1;
- cmd_exec();
- backward((int) number, 0, 0);
- break;
-
- case A_FF_LINE:
- /*
- * Force forward N (default 1) line.
- */
- if (number <= 0)
- number = 1;
- cmd_exec();
- if (show_attn == OPT_ONPLUS && number > 1)
- set_attnpos(bottompos);
- forward((int) number, 1, 0);
- break;
-
- case A_BF_LINE:
- /*
- * Force backward N (default 1) line.
- */
- if (number <= 0)
- number = 1;
- cmd_exec();
- backward((int) number, 1, 0);
- break;
-
- case A_FF_SCREEN:
- /*
- * Force forward one screen.
- */
- if (number <= 0)
- number = get_swindow();
- cmd_exec();
- if (show_attn == OPT_ONPLUS)
- set_attnpos(bottompos);
- forward((int) number, 1, 0);
- break;
-
- case A_F_FOREVER:
- /*
- * Forward forever, ignoring EOF.
- */
- if (ch_getflags() & CH_HELPFILE)
- break;
- cmd_exec();
- jump_forw();
- ignore_eoi = 1;
- hit_eof = 0;
- while (!sigs)
- {
- make_display();
- forward(1, 0, 0);
- }
- ignore_eoi = 0;
- /*
- * This gets us back in "F mode" after processing
- * a non-abort signal (e.g. window-change).
- */
- if (sigs && !ABORT_SIGS())
- newaction = A_F_FOREVER;
- break;
-
- case A_F_SCROLL:
- /*
- * Forward N lines
- * (default same as last 'd' or 'u' command).
- */
- if (number > 0)
- wscroll = (int) number;
- cmd_exec();
- if (show_attn == OPT_ONPLUS)
- set_attnpos(bottompos);
- forward(wscroll, 0, 0);
- break;
-
- case A_B_SCROLL:
- /*
- * Forward N lines
- * (default same as last 'd' or 'u' command).
- */
- if (number > 0)
- wscroll = (int) number;
- cmd_exec();
- backward(wscroll, 0, 0);
- break;
-
- case A_FREPAINT:
- /*
- * Flush buffers, then repaint screen.
- * Don't flush the buffers on a pipe!
- */
- clear_buffers();
- /* FALLTHRU */
- case A_REPAINT:
- /*
- * Repaint screen.
- */
- cmd_exec();
- repaint();
- break;
-
- case A_GOLINE:
- /*
- * Go to line N, default beginning of file.
- */
- if (number <= 0)
- number = 1;
- cmd_exec();
- jump_back(number);
- break;
-
- case A_PERCENT:
- /*
- * Go to a specified percentage into the file.
- */
- if (number < 0)
- {
- number = 0;
- fraction = 0;
- }
- if (number > 100)
- {
- number = 100;
- fraction = 0;
- }
- cmd_exec();
- jump_percent((int) number, fraction);
- break;
-
- case A_GOEND:
- /*
- * Go to line N, default end of file.
- */
- cmd_exec();
- if (number <= 0)
- jump_forw();
- else
- jump_back(number);
- break;
-
- case A_GOPOS:
- /*
- * Go to a specified byte position in the file.
- */
- cmd_exec();
- if (number < 0)
- number = 0;
- jump_line_loc((POSITION) number, jump_sline);
- break;
-
- case A_STAT:
- /*
- * Print file name, etc.
- */
- if (ch_getflags() & CH_HELPFILE)
- break;
- cmd_exec();
- parg.p_string = eq_message();
- error("%s", &parg);
- break;
-
- case A_VERSION:
- /*
- * Print version number, without the "@(#)".
- */
- cmd_exec();
- dispversion();
- break;
-
- case A_QUIT:
- /*
- * Exit.
- */
- if (curr_ifile != NULL_IFILE &&
- ch_getflags() & CH_HELPFILE)
- {
- /*
- * Quit while viewing the help file
- * just means return to viewing the
- * previous file.
- */
- hshift = save_hshift;
- if (edit_prev(1) == 0)
- break;
- }
- if (extra != NULL)
- quit(*extra);
- quit(QUIT_OK);
- break;
-
-/*
- * Define abbreviation for a commonly used sequence below.
- */
-#define DO_SEARCH() \
- if (number <= 0) number = 1; \
- mca_search(); \
- cmd_exec(); \
- multi_search((char *)NULL, (int) number);
-
-
- case A_F_SEARCH:
- /*
- * Search forward for a pattern.
- * Get the first char of the pattern.
- */
- search_type = SRCH_FORW;
- if (number <= 0)
- number = 1;
- mca_search();
- c = getcc();
- goto again;
-
- case A_B_SEARCH:
- /*
- * Search backward for a pattern.
- * Get the first char of the pattern.
- */
- search_type = SRCH_BACK;
- if (number <= 0)
- number = 1;
- mca_search();
- c = getcc();
- goto again;
-
- case A_AGAIN_SEARCH:
- /*
- * Repeat previous search.
- */
- DO_SEARCH();
- break;
-
- case A_T_AGAIN_SEARCH:
- /*
- * Repeat previous search, multiple files.
- */
- search_type |= SRCH_PAST_EOF;
- DO_SEARCH();
- break;
-
- case A_REVERSE_SEARCH:
- /*
- * Repeat previous search, in reverse direction.
- */
- save_search_type = search_type;
- search_type = SRCH_REVERSE(search_type);
- DO_SEARCH();
- search_type = save_search_type;
- break;
-
- case A_T_REVERSE_SEARCH:
- /*
- * Repeat previous search,
- * multiple files in reverse direction.
- */
- save_search_type = search_type;
- search_type = SRCH_REVERSE(search_type);
- search_type |= SRCH_PAST_EOF;
- DO_SEARCH();
- search_type = save_search_type;
- break;
-
- case A_UNDO_SEARCH:
- undo_search();
- break;
-
- case A_HELP:
- /*
- * Help.
- */
- if (ch_getflags() & CH_HELPFILE)
- break;
- cmd_exec();
- save_hshift = hshift;
- hshift = 0;
- (void) edit(FAKE_HELPFILE);
- break;
-
- case A_EXAMINE:
-#if EXAMINE
- /*
- * Edit a new file. Get the filename.
- */
- if (secure)
- {
- error("Command not available", NULL_PARG);
- break;
- }
- start_mca(A_EXAMINE, "Examine: ", ml_examine, 0);
- c = getcc();
- goto again;
-#else
- error("Command not available", NULL_PARG);
- break;
-#endif
-
- case A_VISUAL:
- /*
- * Invoke an editor on the input file.
- */
-#if EDITOR
- if (secure)
- {
- error("Command not available", NULL_PARG);
- break;
- }
- if (ch_getflags() & CH_HELPFILE)
- break;
- if (strcmp(get_filename(curr_ifile), "-") == 0)
- {
- error("Cannot edit standard input", NULL_PARG);
- break;
- }
- if (curr_altfilename != NULL)
- {
- error("WARNING: This file was viewed via LESSOPEN",
- NULL_PARG);
- }
- start_mca(A_SHELL, "!", ml_shell, 0);
- /*
- * Expand the editor prototype string
- * and pass it to the system to execute.
- * (Make sure the screen is displayed so the
- * expansion of "+%lm" works.)
- */
- make_display();
- cmd_exec();
- lsystem(pr_expand(editproto, 0), (char*)NULL);
- break;
-#else
- error("Command not available", NULL_PARG);
- break;
-#endif
-
- case A_NEXT_FILE:
- /*
- * Examine next file.
- */
-#if TAGS
- if (ntags())
- {
- error("No next file", NULL_PARG);
- break;
- }
-#endif
- if (number <= 0)
- number = 1;
- if (edit_next((int) number))
- {
- if (get_quit_at_eof() && hit_eof &&
- !(ch_getflags() & CH_HELPFILE))
- quit(QUIT_OK);
- parg.p_string = (number > 1) ? "(N-th) " : "";
- error("No %snext file", &parg);
- }
- break;
-
- case A_PREV_FILE:
- /*
- * Examine previous file.
- */
-#if TAGS
- if (ntags())
- {
- error("No previous file", NULL_PARG);
- break;
- }
-#endif
- if (number <= 0)
- number = 1;
- if (edit_prev((int) number))
- {
- parg.p_string = (number > 1) ? "(N-th) " : "";
- error("No %sprevious file", &parg);
- }
- break;
-
- case A_NEXT_TAG:
-#if TAGS
- if (number <= 0)
- number = 1;
- tagfile = nexttag((int) number);
- if (tagfile == NULL)
- {
- error("No next tag", NULL_PARG);
- break;
- }
- if (edit(tagfile) == 0)
- {
- POSITION pos = tagsearch();
- if (pos != NULL_POSITION)
- jump_loc(pos, jump_sline);
- }
-#else
- error("Command not available", NULL_PARG);
-#endif
- break;
-
- case A_PREV_TAG:
-#if TAGS
- if (number <= 0)
- number = 1;
- tagfile = prevtag((int) number);
- if (tagfile == NULL)
- {
- error("No previous tag", NULL_PARG);
- break;
- }
- if (edit(tagfile) == 0)
- {
- POSITION pos = tagsearch();
- if (pos != NULL_POSITION)
- jump_loc(pos, jump_sline);
- }
-#else
- error("Command not available", NULL_PARG);
-#endif
- break;
-
- case A_INDEX_FILE:
- /*
- * Examine a particular file.
- */
- if (number <= 0)
- number = 1;
- if (edit_index((int) number))
- error("No such file", NULL_PARG);
- break;
-
- case A_REMOVE_FILE:
- if (ch_getflags() & CH_HELPFILE)
- break;
- old_ifile = curr_ifile;
- new_ifile = getoff_ifile(curr_ifile);
- if (new_ifile == NULL_IFILE)
- {
- bell();
- break;
- }
- if (edit_ifile(new_ifile) != 0)
- {
- reedit_ifile(old_ifile);
- break;
- }
- del_ifile(old_ifile);
- break;
-
- case A_OPT_TOGGLE:
- optflag = OPT_TOGGLE;
- optgetname = FALSE;
- mca_opt_toggle();
- c = getcc();
- goto again;
-
- case A_DISP_OPTION:
- /*
- * Report a flag setting.
- */
- optflag = OPT_NO_TOGGLE;
- optgetname = FALSE;
- mca_opt_toggle();
- c = getcc();
- goto again;
-
- case A_FIRSTCMD:
- /*
- * Set an initial command for new files.
- */
- start_mca(A_FIRSTCMD, "+", (void*)NULL, 0);
- c = getcc();
- goto again;
-
- case A_SHELL:
- /*
- * Shell escape.
- */
-#if SHELL_ESCAPE
- if (secure)
- {
- error("Command not available", NULL_PARG);
- break;
- }
- start_mca(A_SHELL, "!", ml_shell, 0);
- c = getcc();
- goto again;
-#else
- error("Command not available", NULL_PARG);
- break;
-#endif
-
- case A_SETMARK:
- /*
- * Set a mark.
- */
- if (ch_getflags() & CH_HELPFILE)
- break;
- start_mca(A_SETMARK, "mark: ", (void*)NULL, 0);
- c = getcc();
- if (c == erase_char || c == erase2_char ||
- c == kill_char || c == '\n' || c == '\r')
- break;
- setmark(c);
- break;
-
- case A_GOMARK:
- /*
- * Go to a mark.
- */
- start_mca(A_GOMARK, "goto mark: ", (void*)NULL, 0);
- c = getcc();
- if (c == erase_char || c == erase2_char ||
- c == kill_char || c == '\n' || c == '\r')
- break;
- gomark(c);
- break;
-
- case A_PIPE:
-#if PIPEC
- if (secure)
- {
- error("Command not available", NULL_PARG);
- break;
- }
- start_mca(A_PIPE, "|mark: ", (void*)NULL, 0);
- c = getcc();
- if (c == erase_char || c == erase2_char || c == kill_char)
- break;
- if (c == '\n' || c == '\r')
- c = '.';
- if (badmark(c))
- break;
- pipec = c;
- start_mca(A_PIPE, "!", ml_shell, 0);
- c = getcc();
- goto again;
-#else
- error("Command not available", NULL_PARG);
- break;
-#endif
-
- case A_B_BRACKET:
- case A_F_BRACKET:
- start_mca(action, "Brackets: ", (void*)NULL, 0);
- c = getcc();
- goto again;
-
- case A_LSHIFT:
- if (number > 0)
- shift_count = number;
- else
- number = (shift_count > 0) ?
- shift_count : sc_width / 2;
- if (number > hshift)
- number = hshift;
- hshift -= number;
- screen_trashed = 1;
- break;
-
- case A_RSHIFT:
- if (number > 0)
- shift_count = number;
- else
- number = (shift_count > 0) ?
- shift_count : sc_width / 2;
- hshift += number;
- screen_trashed = 1;
- break;
-
- case A_PREFIX:
- /*
- * The command is incomplete (more chars are needed).
- * Display the current char, so the user knows
- * what's going on, and get another character.
- */
- if (mca != A_PREFIX)
- {
- cmd_reset();
- start_mca(A_PREFIX, " ", (void*)NULL,
- CF_QUIT_ON_ERASE);
- (void) cmd_char(c);
- }
- c = getcc();
- goto again;
-
- case A_NOACTION:
- break;
-
- default:
- bell();
- break;
- }
- }
-}
diff --git a/contrib/less/configure b/contrib/less/configure
deleted file mode 100755
index 1d3f57a..0000000
--- a/contrib/less/configure
+++ /dev/null
@@ -1,8523 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for less 1.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-as_nl='
-'
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
-else
- as_have_required=no
-fi
-
- if test $as_have_required = yes && (eval ":
-(as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
-else
- as_candidate_shells=
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- case $as_dir in
- /*)
- for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
- done;;
- esac
-done
-IFS=$as_save_IFS
-
-
- for as_shell in $as_candidate_shells $SHELL; do
- # Try only shells that exist, to save several forks.
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
- (exit $1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell autoconf@gnu.org about your system,
- echo including any error possibly output before this
- echo message
-}
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Identity of this package.
-PACKAGE_NAME='less'
-PACKAGE_TARNAME='less'
-PACKAGE_VERSION='1'
-PACKAGE_STRING='less 1'
-PACKAGE_BUGREPORT=''
-
-ac_unique_file="forwback.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-CPP
-GREP
-EGREP
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-REGEX_O
-LIBOBJS
-LTLIBOBJS'
-ac_subst_files=''
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
- eval enable_$ac_feature=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
- eval enable_$ac_feature=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
- eval with_$ac_package=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
- eval with_$ac_package=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute directory names.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- { echo "$as_me: error: Working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- { echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$0" ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
- { (exit 1); exit 1; }; }
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures less 1 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/less]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of less 1:";;
- esac
- cat <<\_ACEOF
-
-Optional Features:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --disable-largefile omit support for large files
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-secure Compile in secure mode
- --with-regex={auto,pcre,posix,regcmp,re_comp,regcomp,regcomp-local} Select a regular expression library auto
- --with-editor=PROGRAM use PROGRAM as the default editor vi
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" || continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-less configure 1
-generated by GNU Autoconf 2.61
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by less $as_me 1, which was
-generated by GNU Autoconf 2.61. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- echo "PATH: $as_dir"
-done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal"
- echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -n "$CONFIG_SITE"; then
- set x "$CONFIG_SITE"
-elif test "x$prefix" != xNONE; then
- set x "$prefix/share/config.site" "$prefix/etc/config.site"
-else
- set x "$ac_default_prefix/share/config.site" \
- "$ac_default_prefix/etc/config.site"
-fi
-shift
-for ac_site_file
-do
- if test -r "$ac_site_file"; then
- { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-echo "$as_me: former value: $ac_old_val" >&2;}
- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-echo "$as_me: current value: $ac_new_val" >&2;}
- ac_cache_corrupted=:
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-ac_config_headers="$ac_config_headers defines.h"
-
-
-# Checks for programs.
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort. b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions. Remove them first so a
-# subsequent execution test works.
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-
-{ echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6; }
-if test -z "$ac_file"; then
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
- fi
- fi
-fi
-{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6; }
-
-{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
-if test "${ac_cv_objext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
- xno)
- { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ echo "$as_me:$LINENO: checking for library containing strerror" >&5
-echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; }
-if test "${ac_cv_search_strerror+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char strerror ();
-int
-main ()
-{
-return strerror ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' cposix; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_search_strerror=$ac_res
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext
- if test "${ac_cv_search_strerror+set}" = set; then
- break
-fi
-done
-if test "${ac_cv_search_strerror+set}" = set; then
- :
-else
- ac_cv_search_strerror=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
-echo "${ECHO_T}$ac_cv_search_strerror" >&6; }
-ac_res=$ac_cv_search_strerror
-if test "$ac_res" != no; then
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Extract the first word of "grep ggrep" to use in msg output
-if test -z "$GREP"; then
-set dummy grep ggrep; ac_prog_name=$2
-if test "${ac_cv_path_GREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_path_GREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
- # Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-
- $ac_path_GREP_found && break 3
- done
-done
-
-done
-IFS=$as_save_IFS
-
-
-fi
-
-GREP="$ac_cv_path_GREP"
-if test -z "$GREP"; then
- { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-else
- ac_cv_path_GREP=$GREP
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
- # Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-
- $ac_path_EGREP_found && break 3
- done
-done
-
-done
-IFS=$as_save_IFS
-
-
-fi
-
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
- { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
-
- fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-if test $ac_cv_c_compiler_gnu = yes; then
- { echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5
-echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6; }
-if test "${ac_cv_prog_gcc_traditional+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_pattern="Autoconf.*'x'"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sgtty.h>
-Autoconf TIOCGETP
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "$ac_pattern" >/dev/null 2>&1; then
- ac_cv_prog_gcc_traditional=yes
-else
- ac_cv_prog_gcc_traditional=no
-fi
-rm -f conftest*
-
-
- if test $ac_cv_prog_gcc_traditional = no; then
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <termio.h>
-Autoconf TCGETA
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "$ac_pattern" >/dev/null 2>&1; then
- ac_cv_prog_gcc_traditional=yes
-fi
-rm -f conftest*
-
- fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5
-echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6; }
- if test $ac_cv_prog_gcc_traditional = yes; then
- CC="$CC -traditional"
- fi
-fi
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- done
- done
- ;;
-esac
-done
-IFS=$as_save_IFS
-
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-# Checks for compilation model.
-# Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then
- enableval=$enable_largefile;
-fi
-
-if test "$enable_largefile" != no; then
-
- { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5
-echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; }
-if test "${ac_cv_sys_largefile_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_sys_largefile_CC=no
- if test "$GCC" != yes; then
- ac_save_CC=$CC
- while :; do
- # IRIX 6.2 and later do not support large files by default,
- # so use the C compiler's -n32 option if that helps.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- CC="$CC -n32"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_largefile_CC=' -n32'; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- break
- done
- CC=$ac_save_CC
- rm -f conftest.$ac_ext
- fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5
-echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; }
- if test "$ac_cv_sys_largefile_CC" != no; then
- CC=$CC$ac_cv_sys_largefile_CC
- fi
-
- { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; }
-if test "${ac_cv_sys_file_offset_bits+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_file_offset_bits=no; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_file_offset_bits=64; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cv_sys_file_offset_bits=unknown
- break
-done
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5
-echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; }
-case $ac_cv_sys_file_offset_bits in #(
- no | unknown) ;;
- *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
-;;
-esac
-rm -f conftest*
- if test $ac_cv_sys_file_offset_bits = unknown; then
- { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5
-echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; }
-if test "${ac_cv_sys_large_files+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- while :; do
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_large_files=no; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#define _LARGE_FILES 1
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_sys_large_files=1; break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cv_sys_large_files=unknown
- break
-done
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5
-echo "${ECHO_T}$ac_cv_sys_large_files" >&6; }
-case $ac_cv_sys_large_files in #(
- no | unknown) ;;
- *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
-;;
-esac
-rm -f conftest*
- fi
-fi
-
-
-# Checks for general libraries.
-{ echo "$as_me:$LINENO: checking for tgoto in -ltinfo" >&5
-echo $ECHO_N "checking for tgoto in -ltinfo... $ECHO_C" >&6; }
-if test "${ac_cv_lib_tinfo_tgoto+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ltinfo $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char tgoto ();
-int
-main ()
-{
-return tgoto ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_tinfo_tgoto=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_tinfo_tgoto=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_tinfo_tgoto" >&5
-echo "${ECHO_T}$ac_cv_lib_tinfo_tgoto" >&6; }
-if test $ac_cv_lib_tinfo_tgoto = yes; then
- have_tinfo=yes
-else
- have_tinfo=no
-fi
-
-{ echo "$as_me:$LINENO: checking for initscr in -lxcurses" >&5
-echo $ECHO_N "checking for initscr in -lxcurses... $ECHO_C" >&6; }
-if test "${ac_cv_lib_xcurses_initscr+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lxcurses $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char initscr ();
-int
-main ()
-{
-return initscr ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_xcurses_initscr=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_xcurses_initscr=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_xcurses_initscr" >&5
-echo "${ECHO_T}$ac_cv_lib_xcurses_initscr" >&6; }
-if test $ac_cv_lib_xcurses_initscr = yes; then
- have_xcurses=yes
-else
- have_xcurses=no
-fi
-
-{ echo "$as_me:$LINENO: checking for initscr in -lncursesw" >&5
-echo $ECHO_N "checking for initscr in -lncursesw... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ncursesw_initscr+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lncursesw $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char initscr ();
-int
-main ()
-{
-return initscr ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_ncursesw_initscr=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_ncursesw_initscr=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ncursesw_initscr" >&5
-echo "${ECHO_T}$ac_cv_lib_ncursesw_initscr" >&6; }
-if test $ac_cv_lib_ncursesw_initscr = yes; then
- have_ncursesw=yes
-else
- have_ncursesw=no
-fi
-
-{ echo "$as_me:$LINENO: checking for initscr in -lncurses" >&5
-echo $ECHO_N "checking for initscr in -lncurses... $ECHO_C" >&6; }
-if test "${ac_cv_lib_ncurses_initscr+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lncurses $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char initscr ();
-int
-main ()
-{
-return initscr ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_ncurses_initscr=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_ncurses_initscr=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_initscr" >&5
-echo "${ECHO_T}$ac_cv_lib_ncurses_initscr" >&6; }
-if test $ac_cv_lib_ncurses_initscr = yes; then
- have_ncurses=yes
-else
- have_ncurses=no
-fi
-
-{ echo "$as_me:$LINENO: checking for initscr in -lcurses" >&5
-echo $ECHO_N "checking for initscr in -lcurses... $ECHO_C" >&6; }
-if test "${ac_cv_lib_curses_initscr+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcurses $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char initscr ();
-int
-main ()
-{
-return initscr ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_curses_initscr=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_curses_initscr=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_curses_initscr" >&5
-echo "${ECHO_T}$ac_cv_lib_curses_initscr" >&6; }
-if test $ac_cv_lib_curses_initscr = yes; then
- have_curses=yes
-else
- have_curses=no
-fi
-
-{ echo "$as_me:$LINENO: checking for tgetent in -ltermcap" >&5
-echo $ECHO_N "checking for tgetent in -ltermcap... $ECHO_C" >&6; }
-if test "${ac_cv_lib_termcap_tgetent+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ltermcap $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char tgetent ();
-int
-main ()
-{
-return tgetent ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_termcap_tgetent=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_termcap_tgetent=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_termcap_tgetent" >&5
-echo "${ECHO_T}$ac_cv_lib_termcap_tgetent" >&6; }
-if test $ac_cv_lib_termcap_tgetent = yes; then
- have_termcap=yes
-else
- have_termcap=no
-fi
-
-{ echo "$as_me:$LINENO: checking for tgetent in -ltermlib" >&5
-echo $ECHO_N "checking for tgetent in -ltermlib... $ECHO_C" >&6; }
-if test "${ac_cv_lib_termlib_tgetent+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-ltermlib $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char tgetent ();
-int
-main ()
-{
-return tgetent ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_termlib_tgetent=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_termlib_tgetent=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_termlib_tgetent" >&5
-echo "${ECHO_T}$ac_cv_lib_termlib_tgetent" >&6; }
-if test $ac_cv_lib_termlib_tgetent = yes; then
- have_termlib=yes
-else
- have_termlib=no
-fi
-
-# Regular expressions (regcmp) are in -lgen on Solaris 2,
-# and in -lintl on SCO Unix.
-
-{ echo "$as_me:$LINENO: checking for regcmp in -lgen" >&5
-echo $ECHO_N "checking for regcmp in -lgen... $ECHO_C" >&6; }
-if test "${ac_cv_lib_gen_regcmp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgen $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char regcmp ();
-int
-main ()
-{
-return regcmp ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_gen_regcmp=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_gen_regcmp=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_gen_regcmp" >&5
-echo "${ECHO_T}$ac_cv_lib_gen_regcmp" >&6; }
-if test $ac_cv_lib_gen_regcmp = yes; then
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBGEN 1
-_ACEOF
-
- LIBS="-lgen $LIBS"
-
-fi
-
-
-{ echo "$as_me:$LINENO: checking for regcmp in -lintl" >&5
-echo $ECHO_N "checking for regcmp in -lintl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_intl_regcmp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lintl $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char regcmp ();
-int
-main ()
-{
-return regcmp ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_intl_regcmp=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_intl_regcmp=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_regcmp" >&5
-echo "${ECHO_T}$ac_cv_lib_intl_regcmp" >&6; }
-if test $ac_cv_lib_intl_regcmp = yes; then
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBINTL 1
-_ACEOF
-
- LIBS="-lintl $LIBS"
-
-fi
-
-
-{ echo "$as_me:$LINENO: checking for regcmp in -lPW" >&5
-echo $ECHO_N "checking for regcmp in -lPW... $ECHO_C" >&6; }
-if test "${ac_cv_lib_PW_regcmp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lPW $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char regcmp ();
-int
-main ()
-{
-return regcmp ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_PW_regcmp=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_PW_regcmp=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_PW_regcmp" >&5
-echo "${ECHO_T}$ac_cv_lib_PW_regcmp" >&6; }
-if test $ac_cv_lib_PW_regcmp = yes; then
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPW 1
-_ACEOF
-
- LIBS="-lPW $LIBS"
-
-fi
-
-
-# Checks for terminal libraries
-{ echo "$as_me:$LINENO: checking for working terminal libraries" >&5
-echo $ECHO_N "checking for working terminal libraries... $ECHO_C" >&6; }
-TERMLIBS=
-
-# Check for systems where curses is broken.
-curses_broken=0
-if test x`uname -s` = "xHP-UX" >/dev/null 2>&1; then
-if test x`uname -r` = "xB.11.00" >/dev/null 2>&1; then
- curses_broken=1
-fi
-if test x`uname -r` = "xB.11.11" >/dev/null 2>&1; then
- curses_broken=1
-fi
-fi
-
-if test $curses_broken = 0; then
-
-# -- Try tinfo.
-if test "x$TERMLIBS" = x; then
- if test $have_tinfo = yes; then
- TERMLIBS="-ltinfo"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- termok=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- termok=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try xcurses.
-if test "x$TERMLIBS" = x; then
- if test $have_xcurses = yes; then
- TERMLIBS="-lxcurses"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- termok=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- termok=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try ncursesw.
-if test "x$TERMLIBS" = x; then
- if test $have_ncursesw = yes; then
- TERMLIBS="-lncursesw"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- termok=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- termok=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try ncurses.
-if test "x$TERMLIBS" = x; then
- if test $have_ncurses = yes; then
- TERMLIBS="-lncurses"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- termok=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- termok=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try curses.
-if test "x$TERMLIBS" = x; then
- if test $have_curses = yes; then
- TERMLIBS="-lcurses"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- termok=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- termok=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try curses & termcap.
-if test "x$TERMLIBS" = x; then
- if test $have_curses = yes; then
- if test $have_termcap = yes; then
- TERMLIBS="-lcurses -ltermcap"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- termok=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- termok=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
- fi
-fi
-fi
-
-# -- Try termcap.
-if test "x$TERMLIBS" = x; then
- if test $have_termcap = yes; then
- TERMLIBS="-ltermcap"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- termok=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- termok=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try termlib.
-if test "x$TERMLIBS" = x; then
- if test $have_termlib = yes; then
- TERMLIBS="-lcurses -ltermlib"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- termok=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- termok=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-if test "x$TERMLIBS" = x; then
- { echo "$as_me:$LINENO: result: Cannot find terminal libraries - configure failed" >&5
-echo "${ECHO_T}Cannot find terminal libraries - configure failed" >&6; }
- exit 1
-fi
-{ echo "$as_me:$LINENO: result: using $TERMLIBS" >&5
-echo "${ECHO_T}using $TERMLIBS" >&6; }
-LIBS="$LIBS $TERMLIBS"
-
-# Checks for header files.
-{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_stdc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_stdc=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
- :
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-for ac_header in ctype.h errno.h fcntl.h limits.h stdio.h stdlib.h string.h termcap.h termio.h termios.h time.h unistd.h values.h sys/ioctl.h sys/stream.h wctype.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-# Checks for typedefs, structures, and compiler characteristics.
-{ echo "$as_me:$LINENO: checking whether stat file-mode macros are broken" >&5
-echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6; }
-if test "${ac_cv_header_stat_broken+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#if defined S_ISBLK && defined S_IFDIR
-extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1];
-#endif
-
-#if defined S_ISBLK && defined S_IFCHR
-extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1];
-#endif
-
-#if defined S_ISLNK && defined S_IFREG
-extern char c3[S_ISLNK (S_IFREG) ? -1 : 1];
-#endif
-
-#if defined S_ISSOCK && defined S_IFREG
-extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
-#endif
-
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_stat_broken=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_stat_broken=yes
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stat_broken" >&5
-echo "${ECHO_T}$ac_cv_header_stat_broken" >&6; }
-if test $ac_cv_header_stat_broken = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STAT_MACROS_BROKEN 1
-_ACEOF
-
-fi
-
-{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
-echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
-if test "${ac_cv_c_const+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this. */
- typedef int charset[2];
- const charset cs;
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *pcpcc;
- char **ppc;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- pcpcc = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++pcpcc;
- ppc = (char**) pcpcc;
- pcpcc = (char const *const *) ppc;
- { /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- if (s) return 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- if (!foo) return 0;
- }
- return !cs[0] && !zero.x;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_c_const=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_c_const=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
-echo "${ECHO_T}$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-cat >>confdefs.h <<\_ACEOF
-#define const
-_ACEOF
-
-fi
-
-{ echo "$as_me:$LINENO: checking for off_t" >&5
-echo $ECHO_N "checking for off_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_off_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef off_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_off_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_off_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
-echo "${ECHO_T}$ac_cv_type_off_t" >&6; }
-if test $ac_cv_type_off_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-#define off_t long int
-_ACEOF
-
-fi
-
-{ echo "$as_me:$LINENO: checking for size_t" >&5
-echo $ECHO_N "checking for size_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_size_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef size_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_size_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_size_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
-echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
-if test $ac_cv_type_size_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
-
-{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
-echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; }
-if test "${ac_cv_header_time+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_time=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_time=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
-echo "${ECHO_T}$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define TIME_WITH_SYS_TIME 1
-_ACEOF
-
-fi
-
-
-# Autoheader templates for symbols defined later by AC_DEFINE.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Checks for identifiers.
-{ echo "$as_me:$LINENO: checking for off_t" >&5
-echo $ECHO_N "checking for off_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_off_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-typedef off_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_off_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_off_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
-echo "${ECHO_T}$ac_cv_type_off_t" >&6; }
-if test $ac_cv_type_off_t = yes; then
- :
-else
-
-cat >>confdefs.h <<_ACEOF
-#define off_t long int
-_ACEOF
-
-fi
-
-{ echo "$as_me:$LINENO: checking for void" >&5
-echo $ECHO_N "checking for void... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-void *foo = 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_VOID 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: checking for const" >&5
-echo $ECHO_N "checking for const... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-const int foo = 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_CONST 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: checking for time_t" >&5
-echo $ECHO_N "checking for time_t... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <time.h>
-int
-main ()
-{
-time_t t = 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_TIME_T 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: checking for st_ino in struct stat" >&5
-echo $ECHO_N "checking for st_ino in struct stat... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/stat.h>
-int
-main ()
-{
-struct stat s; dev_t dev = s.st_dev; ino_t ino = s.st_ino;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_STAT_INO 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-# Checks for library functions.
-{ echo "$as_me:$LINENO: checking return type of signal handlers" >&5
-echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; }
-if test "${ac_cv_type_signal+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <signal.h>
-
-int
-main ()
-{
-return *(signal (0, 0)) (0) == 1;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_signal=int
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_signal=void
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
-echo "${ECHO_T}$ac_cv_type_signal" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define RETSIGTYPE $ac_cv_type_signal
-_ACEOF
-
-
-
-
-
-
-
-
-
-
-
-for ac_func in fsync popen _setjmp sigprocmask sigsetmask snprintf stat system fchmod
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-# AC_CHECK_FUNCS may not work for inline functions, so test these separately.
-{ echo "$as_me:$LINENO: checking for memcpy" >&5
-echo $ECHO_N "checking for memcpy... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#if HAVE_STRING_H
-#include <string.h>
-#endif
-int
-main ()
-{
-memcpy(0,0,0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_MEMCPY 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking for strchr" >&5
-echo $ECHO_N "checking for strchr... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#if HAVE_STRING_H
-#include <string.h>
-#endif
-int
-main ()
-{
-strchr("x",'x');
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRCHR 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking for strstr" >&5
-echo $ECHO_N "checking for strstr... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#if HAVE_STRING_H
-#include <string.h>
-#endif
-int
-main ()
-{
-strstr("x","x");
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRSTR 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-# Some systems have termios.h but not the corresponding functions.
-{ echo "$as_me:$LINENO: checking for tcgetattr" >&5
-echo $ECHO_N "checking for tcgetattr... $ECHO_C" >&6; }
-if test "${ac_cv_func_tcgetattr+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define tcgetattr to an innocuous variant, in case <limits.h> declares tcgetattr.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define tcgetattr innocuous_tcgetattr
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char tcgetattr (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef tcgetattr
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char tcgetattr ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_tcgetattr || defined __stub___tcgetattr
-choke me
-#endif
-
-int
-main ()
-{
-return tcgetattr ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_func_tcgetattr=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_tcgetattr=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_tcgetattr" >&5
-echo "${ECHO_T}$ac_cv_func_tcgetattr" >&6; }
-if test $ac_cv_func_tcgetattr = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_TERMIOS_FUNCS 1
-_ACEOF
-
-fi
-
-
-{ echo "$as_me:$LINENO: checking for fileno" >&5
-echo $ECHO_N "checking for fileno... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#if HAVE_STDIO_H
-#include <stdio.h>
-#endif
-int
-main ()
-{
-static int x; x = fileno(stdin);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_FILENO 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking for strerror" >&5
-echo $ECHO_N "checking for strerror... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#if HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if HAVE_STRING_H
-#include <string.h>
-#endif
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif
-int
-main ()
-{
-static char *x; x = strerror(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_STRERROR 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking for sys_errlist" >&5
-echo $ECHO_N "checking for sys_errlist... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-extern char *sys_errlist[]; static char **x; x = sys_errlist;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYS_ERRLIST 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking for sigset_t" >&5
-echo $ECHO_N "checking for sigset_t... $ECHO_C" >&6; }
-if test "${ac_cv_type_sigset_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <signal.h>
-
-typedef sigset_t ac__type_new_;
-int
-main ()
-{
-if ((ac__type_new_ *) 0)
- return 0;
-if (sizeof (ac__type_new_))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_type_sigset_t=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_type_sigset_t=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_sigset_t" >&5
-echo "${ECHO_T}$ac_cv_type_sigset_t" >&6; }
-if test $ac_cv_type_sigset_t = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_SIGSET_T 1
-_ACEOF
-
-
-fi
-
-
-{ echo "$as_me:$LINENO: checking for sigemptyset" >&5
-echo $ECHO_N "checking for sigemptyset... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <signal.h>
-
-int
-main ()
-{
-sigset_t s; sigemptyset(&s);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_SIGEMPTYSET 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-have_errno=no
-{ echo "$as_me:$LINENO: checking for errno" >&5
-echo $ECHO_N "checking for errno... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif
-int
-main ()
-{
-static int x; x = errno;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes - in errno.h" >&5
-echo "${ECHO_T}yes - in errno.h" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_ERRNO 1
-_ACEOF
- have_errno=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test $have_errno = no; then
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif
-int
-main ()
-{
-extern int errno; static int x; x = errno;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes - must define" >&5
-echo "${ECHO_T}yes - must define" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_ERRNO 1
-_ACEOF
- cat >>confdefs.h <<\_ACEOF
-#define MUST_DEFINE_ERRNO 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-{ echo "$as_me:$LINENO: checking for locale" >&5
-echo $ECHO_N "checking for locale... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <locale.h>
-#include <ctype.h>
-#include <langinfo.h>
-int
-main ()
-{
-setlocale(LC_CTYPE,""); isprint(0); iscntrl(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_LOCALE 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking for ctype functions" >&5
-echo $ECHO_N "checking for ctype functions... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#if HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-int
-main ()
-{
-static int x; x = isupper(x); x = tolower(x); x = toupper(x);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_UPPER_LOWER 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-{ echo "$as_me:$LINENO: checking for wctype functions" >&5
-echo $ECHO_N "checking for wctype functions... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <wctype.h>
-int
-main ()
-{
-iswlower(0); iswupper(0); towlower(0); towupper(0);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_WCTYPE 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-
-# Checks for external variable ospeed in the termcap library.
-have_ospeed=no
-{ echo "$as_me:$LINENO: checking termcap for ospeed" >&5
-echo $ECHO_N "checking termcap for ospeed... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#if HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-#if HAVE_TERMCAP_H
-#include <termcap.h>
-#endif
-int
-main ()
-{
-ospeed = 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes - in termcap.h" >&5
-echo "${ECHO_T}yes - in termcap.h" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_OSPEED 1
-_ACEOF
- have_ospeed=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-if test $have_ospeed = no; then
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-extern short ospeed; ospeed = 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes - must define" >&5
-echo "${ECHO_T}yes - must define" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_OSPEED 1
-_ACEOF
- cat >>confdefs.h <<\_ACEOF
-#define MUST_DEFINE_OSPEED 1
-_ACEOF
-
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
-# Compile in secure mode?
-
-# Check whether --with-secure was given.
-if test "${with_secure+set}" = set; then
- withval=$with_secure; cat >>confdefs.h <<\_ACEOF
-#define SECURE_COMPILE 1
-_ACEOF
-
-else
- cat >>confdefs.h <<\_ACEOF
-#define SECURE_COMPILE 0
-_ACEOF
-
-fi
-
-
-# Checks for regular expression functions.
-have_regex=no
-have_posix_regex=unknown
-{ echo "$as_me:$LINENO: checking for regcomp" >&5
-echo $ECHO_N "checking for regcomp... $ECHO_C" >&6; }
-
-# Select a regular expression library.
-WANT_REGEX=auto
-
-# Check whether --with-regex was given.
-if test "${with_regex+set}" = set; then
- withval=$with_regex; WANT_REGEX="$withval"
-fi
-
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = posix; then
-# Some versions of Solaris have a regcomp() function, but it doesn't work!
-# So we run a test program. If we're cross-compiling, do it the old way.
-if test "$cross_compiling" = yes; then
- have_posix_regex=unknown
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <regex.h>
-main() { regex_t r; regmatch_t rm; char *text = "xabcy";
-if (regcomp(&r, "abc", 0)) exit(1);
-if (regexec(&r, text, 1, &rm, 0)) exit(1);
-#ifndef __WATCOMC__
-if (rm.rm_so != 1) exit(1); /* check for correct offset */
-#else
-if (rm.rm_sp != text + 1) exit(1); /* check for correct offset */
-#endif
-exit(0); }
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- have_posix_regex=yes
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-have_posix_regex=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-if test $have_posix_regex = yes; then
- { echo "$as_me:$LINENO: result: using POSIX regcomp" >&5
-echo "${ECHO_T}using POSIX regcomp" >&6; }
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_POSIX_REGCOMP 1
-_ACEOF
-
- have_regex=yes
-elif test $have_posix_regex = unknown; then
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <regex.h>
-int
-main ()
-{
-regex_t *r; regfree(r);
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: using POSIX regcomp" >&5
-echo "${ECHO_T}using POSIX regcomp" >&6; }
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_POSIX_REGCOMP 1
-_ACEOF
- have_regex=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-fi
-fi
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = pcre; then
-{ echo "$as_me:$LINENO: checking for pcre_compile in -lpcre" >&5
-echo $ECHO_N "checking for pcre_compile in -lpcre... $ECHO_C" >&6; }
-if test "${ac_cv_lib_pcre_pcre_compile+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpcre $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char pcre_compile ();
-int
-main ()
-{
-return pcre_compile ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_lib_pcre_pcre_compile=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_lib_pcre_pcre_compile=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_pcre_pcre_compile" >&5
-echo "${ECHO_T}$ac_cv_lib_pcre_pcre_compile" >&6; }
-if test $ac_cv_lib_pcre_pcre_compile = yes; then
- { echo "$as_me:$LINENO: result: using pcre" >&5
-echo "${ECHO_T}using pcre" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_PCRE 1
-_ACEOF
- LIBS="$LIBS -lpcre" have_regex=yes
-fi
-
-fi
-fi
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = regcmp; then
-{ echo "$as_me:$LINENO: checking for regcmp" >&5
-echo $ECHO_N "checking for regcmp... $ECHO_C" >&6; }
-if test "${ac_cv_func_regcmp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define regcmp to an innocuous variant, in case <limits.h> declares regcmp.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define regcmp innocuous_regcmp
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char regcmp (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef regcmp
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char regcmp ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_regcmp || defined __stub___regcmp
-choke me
-#endif
-
-int
-main ()
-{
-return regcmp ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_func_regcmp=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_regcmp=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_regcmp" >&5
-echo "${ECHO_T}$ac_cv_func_regcmp" >&6; }
-if test $ac_cv_func_regcmp = yes; then
- { echo "$as_me:$LINENO: result: using regcmp" >&5
-echo "${ECHO_T}using regcmp" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_REGCMP 1
-_ACEOF
- have_regex=yes
-fi
-
-fi
-fi
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp; then
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include "regexp.h"
-int
-main ()
-{
-regcomp("");
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: using V8 regcomp" >&5
-echo "${ECHO_T}using V8 regcomp" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_V8_REGCOMP 1
-_ACEOF
- have_regex=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-fi
-
-if test $have_regex = no && test -f ${srcdir}/regexp.c; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp-local; then
-{ echo "$as_me:$LINENO: result: using V8 regcomp -- local source" >&5
-echo "${ECHO_T}using V8 regcomp -- local source" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define HAVE_V8_REGCOMP 1
-_ACEOF
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_REGEXEC2 1
-_ACEOF
- REGEX_O='regexp.$(O)' have_regex=yes
-fi
-fi
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = re_comp; then
-{ echo "$as_me:$LINENO: result: using re_comp" >&5
-echo "${ECHO_T}using re_comp" >&6; }; { echo "$as_me:$LINENO: checking for re_comp" >&5
-echo $ECHO_N "checking for re_comp... $ECHO_C" >&6; }
-if test "${ac_cv_func_re_comp+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define re_comp to an innocuous variant, in case <limits.h> declares re_comp.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define re_comp innocuous_re_comp
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char re_comp (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef re_comp
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char re_comp ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_re_comp || defined __stub___re_comp
-choke me
-#endif
-
-int
-main ()
-{
-return re_comp ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- ac_cv_func_re_comp=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_func_re_comp=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_re_comp" >&5
-echo "${ECHO_T}$ac_cv_func_re_comp" >&6; }
-if test $ac_cv_func_re_comp = yes; then
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_RE_COMP 1
-_ACEOF
- have_regex=yes
-fi
-
-fi
-fi
-
-if test $have_regex = no; then
-{ echo "$as_me:$LINENO: result: cannot find regular expression library" >&5
-echo "${ECHO_T}cannot find regular expression library" >&6; }; cat >>confdefs.h <<\_ACEOF
-#define NO_REGEX 1
-_ACEOF
-
-fi
-
-
-# Check whether --with-editor was given.
-if test "${with_editor+set}" = set; then
- withval=$with_editor; cat >>confdefs.h <<_ACEOF
-#define EDIT_PGM "$withval"
-_ACEOF
-
-else
- cat >>confdefs.h <<\_ACEOF
-#define EDIT_PGM "vi"
-_ACEOF
-
-fi
-
-
-
-
-
-ac_config_files="$ac_config_files Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { echo "$as_me:$LINENO: updating cache $cache_file" >&5
-echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
- { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-as_nl='
-'
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# Save the log message, to keep $[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by less $as_me 1, which was
-generated by GNU Autoconf 2.61. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-less config.status 1
-configured by $0, generated by GNU Autoconf 2.61,
- with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2006 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value. By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- CONFIG_FILES="$CONFIG_FILES $ac_optarg"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- { echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; };;
- --help | --hel | -h )
- echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
- echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- CONFIG_SHELL=$SHELL
- export CONFIG_SHELL
- exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "defines.h") CONFIG_HEADERS="$CONFIG_HEADERS defines.h" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-
- *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- echo "$me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-#
-# Set up the sed scripts for CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "$CONFIG_FILES"; then
-
-_ACEOF
-
-
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- cat >conf$$subs.sed <<_ACEOF
-SHELL!$SHELL$ac_delim
-PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
-PACKAGE_NAME!$PACKAGE_NAME$ac_delim
-PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
-PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
-PACKAGE_STRING!$PACKAGE_STRING$ac_delim
-PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
-exec_prefix!$exec_prefix$ac_delim
-prefix!$prefix$ac_delim
-program_transform_name!$program_transform_name$ac_delim
-bindir!$bindir$ac_delim
-sbindir!$sbindir$ac_delim
-libexecdir!$libexecdir$ac_delim
-datarootdir!$datarootdir$ac_delim
-datadir!$datadir$ac_delim
-sysconfdir!$sysconfdir$ac_delim
-sharedstatedir!$sharedstatedir$ac_delim
-localstatedir!$localstatedir$ac_delim
-includedir!$includedir$ac_delim
-oldincludedir!$oldincludedir$ac_delim
-docdir!$docdir$ac_delim
-infodir!$infodir$ac_delim
-htmldir!$htmldir$ac_delim
-dvidir!$dvidir$ac_delim
-pdfdir!$pdfdir$ac_delim
-psdir!$psdir$ac_delim
-libdir!$libdir$ac_delim
-localedir!$localedir$ac_delim
-mandir!$mandir$ac_delim
-DEFS!$DEFS$ac_delim
-ECHO_C!$ECHO_C$ac_delim
-ECHO_N!$ECHO_N$ac_delim
-ECHO_T!$ECHO_T$ac_delim
-LIBS!$LIBS$ac_delim
-build_alias!$build_alias$ac_delim
-host_alias!$host_alias$ac_delim
-target_alias!$target_alias$ac_delim
-CC!$CC$ac_delim
-CFLAGS!$CFLAGS$ac_delim
-LDFLAGS!$LDFLAGS$ac_delim
-CPPFLAGS!$CPPFLAGS$ac_delim
-ac_ct_CC!$ac_ct_CC$ac_delim
-EXEEXT!$EXEEXT$ac_delim
-OBJEXT!$OBJEXT$ac_delim
-CPP!$CPP$ac_delim
-GREP!$GREP$ac_delim
-EGREP!$EGREP$ac_delim
-INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
-INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
-INSTALL_DATA!$INSTALL_DATA$ac_delim
-REGEX_O!$REGEX_O$ac_delim
-LIBOBJS!$LIBOBJS$ac_delim
-LTLIBOBJS!$LTLIBOBJS$ac_delim
-_ACEOF
-
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 53; then
- break
- elif $ac_last_try; then
- { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
- ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
- ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-:end
-s/|#_!!_#|//g
-CEOF$ac_eof
-_ACEOF
-
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-fi # test -n "$CONFIG_FILES"
-
-
-for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-echo "$as_me: error: Invalid tag $ac_tag." >&2;}
- { (exit 1); exit 1; }; };;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- ac_file_inputs="$ac_file_inputs $ac_f"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input="Generated from "`IFS=:
- echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
- fi
-
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin";;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir="$ac_dir"
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
- { (exit 1); exit 1; }; }; }
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-
-case `sed -n '/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p
-' $ac_file_inputs` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF
- sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s&@configure_input@&$configure_input&;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
- -) cat "$tmp/out"; rm -f "$tmp/out";;
- *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
- esac
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
-_ACEOF
-
-# Transform confdefs.h into a sed script `conftest.defines', that
-# substitutes the proper values into config.h.in to produce config.h.
-rm -f conftest.defines conftest.tail
-# First, append a space to every undef/define line, to ease matching.
-echo 's/$/ /' >conftest.defines
-# Then, protect against being on the right side of a sed subst, or in
-# an unquoted here document, in config.status. If some macros were
-# called several times there might be several #defines for the same
-# symbol, which is useless. But do not sort them, since the last
-# AC_DEFINE must be honored.
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
-# NAME is the cpp macro being defined, VALUE is the value it is being given.
-# PARAMS is the parameter list in the macro definition--in most cases, it's
-# just an empty string.
-ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*'
-ac_dB='\\)[ (].*,\\1define\\2'
-ac_dC=' '
-ac_dD=' ,'
-
-uniq confdefs.h |
- sed -n '
- t rset
- :rset
- s/^[ ]*#[ ]*define[ ][ ]*//
- t ok
- d
- :ok
- s/[\\&,]/\\&/g
- s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
- s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
- ' >>conftest.defines
-
-# Remove the space that was appended to ease matching.
-# Then replace #undef with comments. This is necessary, for
-# example, in the case of _POSIX_SOURCE, which is predefined and required
-# on some systems where configure will not decide to define it.
-# (The regexp can be short, since the line contains either #define or #undef.)
-echo 's/ $//
-s,^[ #]*u.*,/* & */,' >>conftest.defines
-
-# Break up conftest.defines:
-ac_max_sed_lines=50
-
-# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1"
-# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2"
-# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1"
-# et cetera.
-ac_in='$ac_file_inputs'
-ac_out='"$tmp/out1"'
-ac_nxt='"$tmp/out2"'
-
-while :
-do
- # Write a here document:
- cat >>$CONFIG_STATUS <<_ACEOF
- # First, check the format of the line:
- cat >"\$tmp/defines.sed" <<\\CEOF
-/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def
-/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def
-b
-:def
-_ACEOF
- sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
- echo 'CEOF
- sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
- ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
- sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
- grep . conftest.tail >/dev/null || break
- rm -f conftest.defines
- mv conftest.tail conftest.defines
-done
-rm -f conftest.defines conftest.tail
-
-echo "ac_result=$ac_in" >>$CONFIG_STATUS
-cat >>$CONFIG_STATUS <<\_ACEOF
- if test x"$ac_file" != x-; then
- echo "/* $configure_input */" >"$tmp/config.h"
- cat "$ac_result" >>"$tmp/config.h"
- if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
- { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f $ac_file
- mv "$tmp/config.h" $ac_file
- fi
- else
- echo "/* $configure_input */"
- cat "$ac_result"
- fi
- rm -f "$tmp/out12"
- ;;
-
-
- esac
-
-done # for ac_tag
-
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-
diff --git a/contrib/less/configure.ac b/contrib/less/configure.ac
deleted file mode 100644
index 72d3407..0000000
--- a/contrib/less/configure.ac
+++ /dev/null
@@ -1,652 +0,0 @@
-# Process this file with autoconf to produce a configure script.
-
-# Copyright (C) 1984-2007 Mark Nudelman
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Less License, as specified in the README file.
-#
-# For more information about less, or for information on how to
-# contact the author, see the README file.
-
-# Autoconf initialization.
-AC_INIT(less, 1)
-AC_CONFIG_SRCDIR([forwback.c])
-AC_CONFIG_HEADER([defines.h])
-
-# Checks for programs.
-AC_PROG_CC
-AC_ISC_POSIX
-AC_PROG_GCC_TRADITIONAL
-AC_PROG_INSTALL
-
-# Checks for compilation model.
-AC_SYS_LARGEFILE
-
-# Checks for general libraries.
-AC_CHECK_LIB(tinfo, tgoto, [have_tinfo=yes], [have_tinfo=no])
-AC_CHECK_LIB(xcurses, initscr, [have_xcurses=yes], [have_xcurses=no])
-AC_CHECK_LIB(ncursesw, initscr, [have_ncursesw=yes], [have_ncursesw=no])
-AC_CHECK_LIB(ncurses, initscr, [have_ncurses=yes], [have_ncurses=no])
-AC_CHECK_LIB(curses, initscr, [have_curses=yes], [have_curses=no])
-AC_CHECK_LIB(termcap, tgetent, [have_termcap=yes], [have_termcap=no])
-AC_CHECK_LIB(termlib, tgetent, [have_termlib=yes], [have_termlib=no])
-# Regular expressions (regcmp) are in -lgen on Solaris 2,
-# and in -lintl on SCO Unix.
-AC_CHECK_LIB(gen, regcmp)
-AC_CHECK_LIB(intl, regcmp)
-AC_CHECK_LIB(PW, regcmp)
-
-# Checks for terminal libraries
-AC_MSG_CHECKING([for working terminal libraries])
-TERMLIBS=
-
-# Check for systems where curses is broken.
-curses_broken=0
-if test x`uname -s` = "xHP-UX" >/dev/null 2>&1; then
-if test x`uname -r` = "xB.11.00" >/dev/null 2>&1; then
- curses_broken=1
-fi
-if test x`uname -r` = "xB.11.11" >/dev/null 2>&1; then
- curses_broken=1
-fi
-fi
-
-if test $curses_broken = 0; then
-
-# -- Try tinfo.
-if test "x$TERMLIBS" = x; then
- if test $have_tinfo = yes; then
- TERMLIBS="-ltinfo"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
- [termok=yes], [termok=no])
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try xcurses.
-if test "x$TERMLIBS" = x; then
- if test $have_xcurses = yes; then
- TERMLIBS="-lxcurses"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
- [termok=yes], [termok=no])
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try ncursesw.
-if test "x$TERMLIBS" = x; then
- if test $have_ncursesw = yes; then
- TERMLIBS="-lncursesw"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
- [termok=yes], [termok=no])
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try ncurses.
-if test "x$TERMLIBS" = x; then
- if test $have_ncurses = yes; then
- TERMLIBS="-lncurses"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
- [termok=yes], [termok=no])
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try curses.
-if test "x$TERMLIBS" = x; then
- if test $have_curses = yes; then
- TERMLIBS="-lcurses"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
- [termok=yes], [termok=no])
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try curses & termcap.
-if test "x$TERMLIBS" = x; then
- if test $have_curses = yes; then
- if test $have_termcap = yes; then
- TERMLIBS="-lcurses -ltermcap"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
- [termok=yes], [termok=no])
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
- fi
-fi
-fi
-
-# -- Try termcap.
-if test "x$TERMLIBS" = x; then
- if test $have_termcap = yes; then
- TERMLIBS="-ltermcap"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
- [termok=yes], [termok=no])
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-# -- Try termlib.
-if test "x$TERMLIBS" = x; then
- if test $have_termlib = yes; then
- TERMLIBS="-lcurses -ltermlib"
- SAVE_LIBS=$LIBS
- LIBS="$LIBS $TERMLIBS"
- AC_TRY_LINK(, [tgetent(0,0); tgetflag(0); tgetnum(0); tgetstr(0,0);],
- [termok=yes], [termok=no])
- LIBS=$SAVE_LIBS
- if test $termok = no; then TERMLIBS=""; fi
- fi
-fi
-
-if test "x$TERMLIBS" = x; then
- AC_MSG_RESULT(Cannot find terminal libraries - configure failed)
- exit 1
-fi
-AC_MSG_RESULT(using $TERMLIBS)
-LIBS="$LIBS $TERMLIBS"
-
-# Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADERS([ctype.h errno.h fcntl.h limits.h stdio.h stdlib.h string.h termcap.h termio.h termios.h time.h unistd.h values.h sys/ioctl.h sys/stream.h wctype.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_HEADER_STAT
-AC_C_CONST
-AC_TYPE_OFF_T
-AC_TYPE_SIZE_T
-AC_HEADER_TIME
-
-# Autoheader templates for symbols defined later by AC_DEFINE.
-AH_TEMPLATE([HAVE_POSIX_REGCOMP],
- [POSIX regcomp() and regex.h])
-AH_TEMPLATE([HAVE_PCRE],
- [PCRE (Perl-compatible regular expression) library])
-AH_TEMPLATE([HAVE_RE_COMP],
- [BSD re_comp()])
-AH_TEMPLATE([HAVE_REGCMP],
- [System V regcmp()])
-AH_TEMPLATE([HAVE_V8_REGCOMP],
- [Henry Spencer V8 regcomp() and regexp.h])
-AH_TEMPLATE([NO_REGEX],
- [pattern matching is supported, but without metacharacters.])
-AH_TEMPLATE([HAVE_REGEXEC2],
- [])
-AH_TEMPLATE([HAVE_VOID],
- [Define HAVE_VOID if your compiler supports the "void" type.])
-AH_TEMPLATE([HAVE_CONST],
- [Define HAVE_CONST if your compiler supports the "const" modifier.])
-AH_TEMPLATE([HAVE_STAT_INO],
- [Define HAVE_STAT_INO if your struct stat has st_ino and st_dev.])
-AH_TEMPLATE([HAVE_TIME_T],
- [Define HAVE_TIME_T if your system supports the "time_t" type.])
-AH_TEMPLATE([HAVE_STRERROR],
- [Define HAVE_STRERROR if you have the strerror() function.])
-AH_TEMPLATE([HAVE_FILENO],
- [Define HAVE_FILENO if you have the fileno() macro.])
-AH_TEMPLATE([HAVE_ERRNO],
- [Define HAVE_ERRNO if you have the errno variable.])
-AH_TEMPLATE([MUST_DEFINE_ERRNO],
- [Define MUST_DEFINE_ERRNO if you have errno but it is not define in errno.h.])
-AH_TEMPLATE([HAVE_SYS_ERRLIST],
- [Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable.])
-AH_TEMPLATE([HAVE_OSPEED],
- [Define HAVE_OSPEED if your termcap library has the ospeed variable.])
-AH_TEMPLATE([MUST_DEFINE_OSPEED],
- [Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined in termcap.h.])
-AH_TEMPLATE([HAVE_LOCALE],
- [Define HAVE_LOCALE if you have locale.h and setlocale.])
-AH_TEMPLATE([HAVE_TERMIOS_FUNCS],
- [Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr.])
-AH_TEMPLATE([HAVE_UPPER_LOWER],
- [Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower.])
-AH_TEMPLATE([HAVE_WCTYPE],
- [Define HAVE_WCTYPE if you have iswupper, iswlower, towupper, towlower.])
-AH_TEMPLATE([HAVE_SIGSET_T],
- [Define HAVE_SIGSET_T you have the sigset_t type.])
-AH_TEMPLATE([HAVE_SIGEMPTYSET],
- [Define HAVE_SIGEMPTYSET if you have the sigemptyset macro.])
-AH_TEMPLATE([EDIT_PGM],
- [Define EDIT_PGM to your editor.])
-AH_TEMPLATE([SECURE_COMPILE],
- [Define SECURE_COMPILE=1 to build a secure version of less.])
-
-# Checks for identifiers.
-AC_TYPE_OFF_T
-AC_MSG_CHECKING(for void)
-AC_TRY_COMPILE(, [void *foo = 0;],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_VOID)], [AC_MSG_RESULT(no)])
-AC_MSG_CHECKING(for const)
-AC_TRY_COMPILE(, [const int foo = 0;],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_CONST)], [AC_MSG_RESULT(no)])
-AC_MSG_CHECKING(for time_t)
-AC_TRY_COMPILE([#include <time.h>], [time_t t = 0;],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_TIME_T)], [AC_MSG_RESULT(no)])
-AC_MSG_CHECKING(for st_ino in struct stat)
-AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/stat.h>],
- [struct stat s; dev_t dev = s.st_dev; ino_t ino = s.st_ino;],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STAT_INO)], [AC_MSG_RESULT(no)])
-
-# Checks for library functions.
-AC_TYPE_SIGNAL
-AC_CHECK_FUNCS([fsync popen _setjmp sigprocmask sigsetmask snprintf stat system fchmod])
-
-# AC_CHECK_FUNCS may not work for inline functions, so test these separately.
-AC_MSG_CHECKING(for memcpy)
-AC_TRY_LINK([
-#if HAVE_STRING_H
-#include <string.h>
-#endif], [memcpy(0,0,0);],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MEMCPY)], [AC_MSG_RESULT(no)])
-
-AC_MSG_CHECKING(for strchr)
-AC_TRY_LINK([
-#if HAVE_STRING_H
-#include <string.h>
-#endif], [strchr("x",'x');],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRCHR)], [AC_MSG_RESULT(no)])
-
-AC_MSG_CHECKING(for strstr)
-AC_TRY_LINK([
-#if HAVE_STRING_H
-#include <string.h>
-#endif], [strstr("x","x");],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRSTR)], [AC_MSG_RESULT(no)])
-
-# Some systems have termios.h but not the corresponding functions.
-AC_CHECK_FUNC(tcgetattr, AC_DEFINE(HAVE_TERMIOS_FUNCS))
-
-AC_MSG_CHECKING(for fileno)
-AC_TRY_LINK([
-#if HAVE_STDIO_H
-#include <stdio.h>
-#endif], [static int x; x = fileno(stdin);],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_FILENO)], [AC_MSG_RESULT(no)])
-
-AC_MSG_CHECKING(for strerror)
-AC_TRY_LINK([
-#if HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if HAVE_STRING_H
-#include <string.h>
-#endif
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif], [static char *x; x = strerror(0);],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRERROR)], [AC_MSG_RESULT(no)])
-
-AC_MSG_CHECKING(for sys_errlist)
-AC_TRY_LINK(, [extern char *sys_errlist[]; static char **x; x = sys_errlist;],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_ERRLIST)], [AC_MSG_RESULT(no)])
-
-AC_CHECK_TYPES([sigset_t],,,[#include <signal.h>])
-
-AC_MSG_CHECKING(for sigemptyset)
-AC_TRY_LINK([
-#include <signal.h>
-], [sigset_t s; sigemptyset(&s);],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SIGEMPTYSET)], [AC_MSG_RESULT(no)])
-
-have_errno=no
-AC_MSG_CHECKING(for errno)
-AC_TRY_LINK([
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif], [static int x; x = errno;],
- [AC_MSG_RESULT(yes - in errno.h); AC_DEFINE(HAVE_ERRNO) have_errno=yes])
-if test $have_errno = no; then
-AC_TRY_LINK([
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif], [extern int errno; static int x; x = errno;],
- [AC_MSG_RESULT(yes - must define); AC_DEFINE(HAVE_ERRNO) AC_DEFINE(MUST_DEFINE_ERRNO)],
- [AC_MSG_RESULT(no)])
-fi
-
-AC_MSG_CHECKING(for locale)
-AC_TRY_LINK([#include <locale.h>
-#include <ctype.h>
-#include <langinfo.h>], [setlocale(LC_CTYPE,""); isprint(0); iscntrl(0);],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_LOCALE)], [AC_MSG_RESULT(no)])
-
-AC_MSG_CHECKING(for ctype functions)
-AC_TRY_LINK([
-#if HAVE_CTYPE_H
-#include <ctype.h>
-#endif], [static int x; x = isupper(x); x = tolower(x); x = toupper(x);],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_UPPER_LOWER)], [AC_MSG_RESULT(no)])
-
-AC_MSG_CHECKING(for wctype functions)
-AC_TRY_LINK([#include <wctype.h>], [iswlower(0); iswupper(0); towlower(0); towupper(0);],
- [AC_MSG_RESULT(yes); AC_DEFINE(HAVE_WCTYPE)], [AC_MSG_RESULT(no)])
-
-# Checks for external variable ospeed in the termcap library.
-have_ospeed=no
-AC_MSG_CHECKING(termcap for ospeed)
-AC_TRY_LINK([
-#include <sys/types.h>
-#if HAVE_TERMIOS_H
-#include <termios.h>
-#endif
-#if HAVE_TERMCAP_H
-#include <termcap.h>
-#endif], [ospeed = 0;],
-[AC_MSG_RESULT(yes - in termcap.h); AC_DEFINE(HAVE_OSPEED) have_ospeed=yes])
-if test $have_ospeed = no; then
-AC_TRY_LINK(, [extern short ospeed; ospeed = 0;],
- [AC_MSG_RESULT(yes - must define); AC_DEFINE(HAVE_OSPEED) AC_DEFINE(MUST_DEFINE_OSPEED)],
- [AC_MSG_RESULT(no)])
-fi
-
-# Compile in secure mode?
-AC_ARG_WITH(secure,
- [ --with-secure Compile in secure mode],
- AC_DEFINE(SECURE_COMPILE, 1), AC_DEFINE(SECURE_COMPILE, 0))
-
-# Checks for regular expression functions.
-have_regex=no
-have_posix_regex=unknown
-AC_MSG_CHECKING(for regcomp)
-
-# Select a regular expression library.
-WANT_REGEX=auto
-AC_ARG_WITH(regex,
- [ --with-regex={auto,pcre,posix,regcmp,re_comp,regcomp,regcomp-local} Select a regular expression library [auto]],
- WANT_REGEX="$withval")
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = posix; then
-# Some versions of Solaris have a regcomp() function, but it doesn't work!
-# So we run a test program. If we're cross-compiling, do it the old way.
-AC_TRY_RUN([
-#include <sys/types.h>
-#include <regex.h>
-main() { regex_t r; regmatch_t rm; char *text = "xabcy";
-if (regcomp(&r, "abc", 0)) exit(1);
-if (regexec(&r, text, 1, &rm, 0)) exit(1);
-#ifndef __WATCOMC__
-if (rm.rm_so != 1) exit(1); /* check for correct offset */
-#else
-if (rm.rm_sp != text + 1) exit(1); /* check for correct offset */
-#endif
-exit(0); }],
- have_posix_regex=yes, have_posix_regex=no, have_posix_regex=unknown)
-if test $have_posix_regex = yes; then
- AC_MSG_RESULT(using POSIX regcomp)
- AC_DEFINE(HAVE_POSIX_REGCOMP)
- have_regex=yes
-elif test $have_posix_regex = unknown; then
- AC_TRY_LINK([
-#include <sys/types.h>
-#include <regex.h>],
- [regex_t *r; regfree(r);],
- AC_MSG_RESULT(using POSIX regcomp)
- AC_DEFINE(HAVE_POSIX_REGCOMP) have_regex=yes)
-else
- AC_MSG_RESULT(no)
-fi
-fi
-fi
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = pcre; then
-AC_CHECK_LIB(pcre, pcre_compile,
-[AC_MSG_RESULT(using pcre); AC_DEFINE(HAVE_PCRE) LIBS="$LIBS -lpcre" have_regex=yes], [])
-fi
-fi
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = regcmp; then
-AC_CHECK_FUNC(regcmp,
-AC_MSG_RESULT(using regcmp); AC_DEFINE(HAVE_REGCMP) have_regex=yes)
-fi
-fi
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp; then
-AC_TRY_LINK([
-#include "regexp.h"], [regcomp("");],
-AC_MSG_RESULT(using V8 regcomp); AC_DEFINE(HAVE_V8_REGCOMP) have_regex=yes)
-fi
-fi
-
-if test $have_regex = no && test -f ${srcdir}/regexp.c; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = regcomp-local; then
-AC_MSG_RESULT(using V8 regcomp -- local source); AC_DEFINE(HAVE_V8_REGCOMP) AC_DEFINE(HAVE_REGEXEC2) REGEX_O='regexp.$(O)' AC_SUBST(REGEX_O) have_regex=yes
-fi
-fi
-
-if test $have_regex = no; then
-if test $WANT_REGEX = auto -o $WANT_REGEX = re_comp; then
-AC_MSG_RESULT(using re_comp); AC_CHECK_FUNC(re_comp, AC_DEFINE(HAVE_RE_COMP) have_regex=yes)
-fi
-fi
-
-if test $have_regex = no; then
-AC_MSG_RESULT(cannot find regular expression library); AC_DEFINE(NO_REGEX)
-fi
-
-AC_ARG_WITH(editor,
- [ --with-editor=PROGRAM use PROGRAM as the default editor [vi]],
- AC_DEFINE_UNQUOTED(EDIT_PGM, "$withval"), AC_DEFINE(EDIT_PGM, "vi"))
-
-AH_TOP([
-/* Unix definition file for less. -*- C -*-
- *
- * This file has 3 sections:
- * User preferences.
- * Settings always true on Unix.
- * Settings automatically determined by configure.
- *
- * * * * * * WARNING * * * * * *
- * If you edit defines.h by hand, do "touch stamp-h" before you run make
- * so config.status doesn't overwrite your changes.
- */
-
-/* User preferences. */
-
-/*
- * SECURE is 1 if you wish to disable a bunch of features in order to
- * be safe to run by unprivileged users.
- * SECURE_COMPILE is set by the --with-secure configure option.
- */
-#define SECURE SECURE_COMPILE
-
-/*
- * SHELL_ESCAPE is 1 if you wish to allow shell escapes.
- * (This is possible only if your system supplies the system() function.)
- */
-#define SHELL_ESCAPE (!SECURE)
-
-/*
- * EXAMINE is 1 if you wish to allow examining files by name from within less.
- */
-#define EXAMINE (!SECURE)
-
-/*
- * TAB_COMPLETE_FILENAME is 1 if you wish to allow the TAB key
- * to complete filenames at prompts.
- */
-#define TAB_COMPLETE_FILENAME (!SECURE)
-
-/*
- * CMD_HISTORY is 1 if you wish to allow keys to cycle through
- * previous commands at prompts.
- */
-#define CMD_HISTORY 1
-
-/*
- * HILITE_SEARCH is 1 if you wish to have search targets to be
- * displayed in standout mode.
- */
-#define HILITE_SEARCH 1
-
-/*
- * EDITOR is 1 if you wish to allow editor invocation (the "v" command).
- * (This is possible only if your system supplies the system() function.)
- * EDIT_PGM is the name of the (default) editor to be invoked.
- */
-#define EDITOR (!SECURE)
-
-/*
- * TAGS is 1 if you wish to support tag files.
- */
-#define TAGS (!SECURE)
-
-/*
- * USERFILE is 1 if you wish to allow a .less file to specify
- * user-defined key bindings.
- */
-#define USERFILE (!SECURE)
-
-/*
- * GLOB is 1 if you wish to have shell metacharacters expanded in filenames.
- * This will generally work if your system provides the "popen" function
- * and the "echo" shell command.
- */
-#define GLOB (!SECURE)
-
-/*
- * PIPEC is 1 if you wish to have the "|" command
- * which allows the user to pipe data into a shell command.
- */
-#define PIPEC (!SECURE)
-
-/*
- * LOGFILE is 1 if you wish to allow the -l option (to create log files).
- */
-#define LOGFILE (!SECURE)
-
-/*
- * GNU_OPTIONS is 1 if you wish to support the GNU-style command
- * line options --help and --version.
- */
-#define GNU_OPTIONS 1
-
-/*
- * ONLY_RETURN is 1 if you want RETURN to be the only input which
- * will continue past an error message.
- * Otherwise, any key will continue past an error message.
- */
-#define ONLY_RETURN 0
-
-/*
- * LESSKEYFILE is the filename of the default lesskey output file
- * (in the HOME directory).
- * LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
- * DEF_LESSKEYINFILE is the filename of the default lesskey input
- * (in the HOME directory).
- * LESSHISTFILE is the filename of the history file
- * (in the HOME directory).
- */
-#define LESSKEYFILE ".less"
-#define LESSKEYFILE_SYS SYSDIR "/sysless"
-#define DEF_LESSKEYINFILE ".lesskey"
-#define LESSHISTFILE ".lesshst"
-
-
-/* Settings always true on Unix. */
-
-/*
- * Define MSDOS_COMPILER if compiling under Microsoft C.
- */
-#define MSDOS_COMPILER 0
-
-/*
- * Pathname separator character.
- */
-#define PATHNAME_SEP "/"
-
-/*
- * The value returned from tgetent on success.
- * Some HP-UX systems return 0 on success.
- */
-#define TGETENT_OK 1
-
-/*
- * HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
- */
-#define HAVE_SYS_TYPES_H 1
-
-/*
- * Define if you have the <sgstat.h> header file.
- */
-#undef HAVE_SGSTAT_H
-
-/*
- * HAVE_PERROR is 1 if your system has the perror() call.
- * (Actually, if it has sys_errlist, sys_nerr and errno.)
- */
-#define HAVE_PERROR 1
-
-/*
- * HAVE_TIME is 1 if your system has the time() call.
- */
-#define HAVE_TIME 1
-
-/*
- * HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
- */
-#define HAVE_SHELL 1
-
-/*
- * Default shell metacharacters and meta-escape character.
- */
-#define DEF_METACHARS "; *?\t\n'\"()<>[]|&^`#\\$%=~"
-#define DEF_METAESCAPE "\\"
-
-/*
- * HAVE_DUP is 1 if your system has the dup() call.
- */
-#define HAVE_DUP 1
-
-/* Define to 1 if you have the memcpy() function. */
-#define HAVE_MEMCPY 1
-
-/* Define to 1 if you have the strchr() function. */
-#define HAVE_STRCHR 1
-
-/* Define to 1 if you have the strstr() function. */
-#define HAVE_STRSTR 1
-
-/*
- * Sizes of various buffers.
- */
-#define CMDBUF_SIZE 512 /* Buffer for multichar commands */
-#define UNGOT_SIZE 100 /* Max chars to unget() */
-#define LINEBUF_SIZE 1024 /* Max size of line in input file */
-#define OUTBUF_SIZE 1024 /* Output buffer */
-#define PROMPT_SIZE 200 /* Max size of prompt string */
-#define TERMBUF_SIZE 2048 /* Termcap buffer for tgetent */
-#define TERMSBUF_SIZE 1024 /* Buffer to hold termcap strings */
-#define TAGLINE_SIZE 512 /* Max size of line in tags file */
-#define TABSTOP_MAX 32 /* Max number of custom tab stops */
-
-/* Settings automatically determined by configure. */
-])
-
-AC_CONFIG_FILES([Makefile])
-AC_OUTPUT
diff --git a/contrib/less/decode.c b/contrib/less/decode.c
deleted file mode 100644
index ac1668f..0000000
--- a/contrib/less/decode.c
+++ /dev/null
@@ -1,839 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines to decode user commands.
- *
- * This is all table driven.
- * A command table is a sequence of command descriptors.
- * Each command descriptor is a sequence of bytes with the following format:
- * <c1><c2>...<cN><0><action>
- * The characters c1,c2,...,cN are the command string; that is,
- * the characters which the user must type.
- * It is terminated by a null <0> byte.
- * The byte after the null byte is the action code associated
- * with the command string.
- * If an action byte is OR-ed with A_EXTRA, this indicates
- * that the option byte is followed by an extra string.
- *
- * There may be many command tables.
- * The first (default) table is built-in.
- * Other tables are read in from "lesskey" files.
- * All the tables are linked together and are searched in order.
- */
-
-#include "less.h"
-#include "cmd.h"
-#include "lesskey.h"
-
-extern int erase_char, erase2_char, kill_char;
-extern int secure;
-
-#define SK(k) \
- SK_SPECIAL_KEY, (k), 6, 1, 1, 1
-/*
- * Command table is ordered roughly according to expected
- * frequency of use, so the common commands are near the beginning.
- */
-
-static unsigned char cmdtable[] =
-{
- '\r',0, A_F_LINE,
- '\n',0, A_F_LINE,
- 'e',0, A_F_LINE,
- 'j',0, A_F_LINE,
- SK(SK_DOWN_ARROW),0, A_F_LINE,
- CONTROL('E'),0, A_F_LINE,
- CONTROL('N'),0, A_F_LINE,
- 'k',0, A_B_LINE,
- 'y',0, A_B_LINE,
- CONTROL('Y'),0, A_B_LINE,
- SK(SK_CONTROL_K),0, A_B_LINE,
- CONTROL('P'),0, A_B_LINE,
- SK(SK_UP_ARROW),0, A_B_LINE,
- 'J',0, A_FF_LINE,
- 'K',0, A_BF_LINE,
- 'Y',0, A_BF_LINE,
- 'd',0, A_F_SCROLL,
- CONTROL('D'),0, A_F_SCROLL,
- 'u',0, A_B_SCROLL,
- CONTROL('U'),0, A_B_SCROLL,
- ' ',0, A_F_SCREEN,
- 'f',0, A_F_SCREEN,
- CONTROL('F'),0, A_F_SCREEN,
- CONTROL('V'),0, A_F_SCREEN,
- SK(SK_PAGE_DOWN),0, A_F_SCREEN,
- 'b',0, A_B_SCREEN,
- CONTROL('B'),0, A_B_SCREEN,
- ESC,'v',0, A_B_SCREEN,
- SK(SK_PAGE_UP),0, A_B_SCREEN,
- 'z',0, A_F_WINDOW,
- 'w',0, A_B_WINDOW,
- ESC,' ',0, A_FF_SCREEN,
- 'F',0, A_F_FOREVER,
- 'R',0, A_FREPAINT,
- 'r',0, A_REPAINT,
- CONTROL('R'),0, A_REPAINT,
- CONTROL('L'),0, A_REPAINT,
- ESC,'u',0, A_UNDO_SEARCH,
- 'g',0, A_GOLINE,
- SK(SK_HOME),0, A_GOLINE,
- '<',0, A_GOLINE,
- ESC,'<',0, A_GOLINE,
- 'p',0, A_PERCENT,
- '%',0, A_PERCENT,
- ESC,'[',0, A_LSHIFT,
- ESC,']',0, A_RSHIFT,
- ESC,'(',0, A_LSHIFT,
- ESC,')',0, A_RSHIFT,
- SK(SK_RIGHT_ARROW),0, A_RSHIFT,
- SK(SK_LEFT_ARROW),0, A_LSHIFT,
- '{',0, A_F_BRACKET|A_EXTRA, '{','}',0,
- '}',0, A_B_BRACKET|A_EXTRA, '{','}',0,
- '(',0, A_F_BRACKET|A_EXTRA, '(',')',0,
- ')',0, A_B_BRACKET|A_EXTRA, '(',')',0,
- '[',0, A_F_BRACKET|A_EXTRA, '[',']',0,
- ']',0, A_B_BRACKET|A_EXTRA, '[',']',0,
- ESC,CONTROL('F'),0, A_F_BRACKET,
- ESC,CONTROL('B'),0, A_B_BRACKET,
- 'G',0, A_GOEND,
- ESC,'>',0, A_GOEND,
- '>',0, A_GOEND,
- SK(SK_END),0, A_GOEND,
- 'P',0, A_GOPOS,
-
- '0',0, A_DIGIT,
- '1',0, A_DIGIT,
- '2',0, A_DIGIT,
- '3',0, A_DIGIT,
- '4',0, A_DIGIT,
- '5',0, A_DIGIT,
- '6',0, A_DIGIT,
- '7',0, A_DIGIT,
- '8',0, A_DIGIT,
- '9',0, A_DIGIT,
- '.',0, A_DIGIT,
-
- '=',0, A_STAT,
- CONTROL('G'),0, A_STAT,
- ':','f',0, A_STAT,
- '/',0, A_F_SEARCH,
- '?',0, A_B_SEARCH,
- ESC,'/',0, A_F_SEARCH|A_EXTRA, '*',0,
- ESC,'?',0, A_B_SEARCH|A_EXTRA, '*',0,
- 'n',0, A_AGAIN_SEARCH,
- ESC,'n',0, A_T_AGAIN_SEARCH,
- 'N',0, A_REVERSE_SEARCH,
- ESC,'N',0, A_T_REVERSE_SEARCH,
- 'm',0, A_SETMARK,
- '\'',0, A_GOMARK,
- CONTROL('X'),CONTROL('X'),0, A_GOMARK,
- 'E',0, A_EXAMINE,
- ':','e',0, A_EXAMINE,
- CONTROL('X'),CONTROL('V'),0, A_EXAMINE,
- ':','n',0, A_NEXT_FILE,
- ':','p',0, A_PREV_FILE,
- 't',0, A_NEXT_TAG,
- 'T',0, A_PREV_TAG,
- ':','x',0, A_INDEX_FILE,
- ':','d',0, A_REMOVE_FILE,
- '-',0, A_OPT_TOGGLE,
- ':','t',0, A_OPT_TOGGLE|A_EXTRA, 't',0,
- 's',0, A_OPT_TOGGLE|A_EXTRA, 'o',0,
- '_',0, A_DISP_OPTION,
- '|',0, A_PIPE,
- 'v',0, A_VISUAL,
- '!',0, A_SHELL,
- '+',0, A_FIRSTCMD,
-
- 'H',0, A_HELP,
- 'h',0, A_HELP,
- SK(SK_F1),0, A_HELP,
- 'V',0, A_VERSION,
- 'q',0, A_QUIT,
- 'Q',0, A_QUIT,
- ':','q',0, A_QUIT,
- ':','Q',0, A_QUIT,
- 'Z','Z',0, A_QUIT
-};
-
-static unsigned char edittable[] =
-{
- '\t',0, EC_F_COMPLETE, /* TAB */
- '\17',0, EC_B_COMPLETE, /* BACKTAB */
- SK(SK_BACKTAB),0, EC_B_COMPLETE, /* BACKTAB */
- ESC,'\t',0, EC_B_COMPLETE, /* ESC TAB */
- CONTROL('L'),0, EC_EXPAND, /* CTRL-L */
- CONTROL('V'),0, EC_LITERAL, /* BACKSLASH */
- CONTROL('A'),0, EC_LITERAL, /* BACKSLASH */
- ESC,'l',0, EC_RIGHT, /* ESC l */
- SK(SK_RIGHT_ARROW),0, EC_RIGHT, /* RIGHTARROW */
- ESC,'h',0, EC_LEFT, /* ESC h */
- SK(SK_LEFT_ARROW),0, EC_LEFT, /* LEFTARROW */
- ESC,'b',0, EC_W_LEFT, /* ESC b */
- ESC,SK(SK_LEFT_ARROW),0, EC_W_LEFT, /* ESC LEFTARROW */
- SK(SK_CTL_LEFT_ARROW),0, EC_W_LEFT, /* CTRL-LEFTARROW */
- ESC,'w',0, EC_W_RIGHT, /* ESC w */
- ESC,SK(SK_RIGHT_ARROW),0, EC_W_RIGHT, /* ESC RIGHTARROW */
- SK(SK_CTL_RIGHT_ARROW),0, EC_W_RIGHT, /* CTRL-RIGHTARROW */
- ESC,'i',0, EC_INSERT, /* ESC i */
- SK(SK_INSERT),0, EC_INSERT, /* INSERT */
- ESC,'x',0, EC_DELETE, /* ESC x */
- SK(SK_DELETE),0, EC_DELETE, /* DELETE */
- ESC,'X',0, EC_W_DELETE, /* ESC X */
- ESC,SK(SK_DELETE),0, EC_W_DELETE, /* ESC DELETE */
- SK(SK_CTL_DELETE),0, EC_W_DELETE, /* CTRL-DELETE */
- SK(SK_CTL_BACKSPACE),0, EC_W_BACKSPACE, /* CTRL-BACKSPACE */
- ESC,'\b',0, EC_W_BACKSPACE, /* ESC BACKSPACE */
- ESC,'0',0, EC_HOME, /* ESC 0 */
- SK(SK_HOME),0, EC_HOME, /* HOME */
- ESC,'$',0, EC_END, /* ESC $ */
- SK(SK_END),0, EC_END, /* END */
- ESC,'k',0, EC_UP, /* ESC k */
- SK(SK_UP_ARROW),0, EC_UP, /* UPARROW */
- ESC,'j',0, EC_DOWN, /* ESC j */
- SK(SK_DOWN_ARROW),0, EC_DOWN, /* DOWNARROW */
-};
-
-/*
- * Structure to support a list of command tables.
- */
-struct tablelist
-{
- struct tablelist *t_next;
- char *t_start;
- char *t_end;
-};
-
-/*
- * List of command tables and list of line-edit tables.
- */
-static struct tablelist *list_fcmd_tables = NULL;
-static struct tablelist *list_ecmd_tables = NULL;
-static struct tablelist *list_var_tables = NULL;
-static struct tablelist *list_sysvar_tables = NULL;
-
-
-/*
- * Expand special key abbreviations in a command table.
- */
- static void
-expand_special_keys(table, len)
- char *table;
- int len;
-{
- register char *fm;
- register char *to;
- register int a;
- char *repl;
- int klen;
-
- for (fm = table; fm < table + len; )
- {
- /*
- * Rewrite each command in the table with any
- * special key abbreviations expanded.
- */
- for (to = fm; *fm != '\0'; )
- {
- if (*fm != SK_SPECIAL_KEY)
- {
- *to++ = *fm++;
- continue;
- }
- /*
- * After SK_SPECIAL_KEY, next byte is the type
- * of special key (one of the SK_* contants),
- * and the byte after that is the number of bytes,
- * N, reserved by the abbreviation (including the
- * SK_SPECIAL_KEY and key type bytes).
- * Replace all N bytes with the actual bytes
- * output by the special key on this terminal.
- */
- repl = special_key_str(fm[1]);
- klen = fm[2] & 0377;
- fm += klen;
- if (repl == NULL || (int) strlen(repl) > klen)
- repl = "\377";
- while (*repl != '\0')
- *to++ = *repl++;
- }
- *to++ = '\0';
- /*
- * Fill any unused bytes between end of command and
- * the action byte with A_SKIP.
- */
- while (to <= fm)
- *to++ = A_SKIP;
- fm++;
- a = *fm++ & 0377;
- if (a & A_EXTRA)
- {
- while (*fm++ != '\0')
- continue;
- }
- }
-}
-
-/*
- * Initialize the command lists.
- */
- public void
-init_cmds()
-{
- /*
- * Add the default command tables.
- */
- add_fcmd_table((char*)cmdtable, sizeof(cmdtable));
- add_ecmd_table((char*)edittable, sizeof(edittable));
-#if USERFILE
- /*
- * For backwards compatibility,
- * try to add tables in the OLD system lesskey file.
- */
-#ifdef BINDIR
- add_hometable(NULL, BINDIR "/.sysless", 1);
-#endif
- /*
- * Try to add the tables in the system lesskey file.
- */
- add_hometable("LESSKEY_SYSTEM", LESSKEYFILE_SYS, 1);
- /*
- * Try to add the tables in the standard lesskey file "$HOME/.less".
- */
- add_hometable("LESSKEY", LESSKEYFILE, 0);
-#endif
-}
-
-/*
- * Add a command table.
- */
- static int
-add_cmd_table(tlist, buf, len)
- struct tablelist **tlist;
- char *buf;
- int len;
-{
- register struct tablelist *t;
-
- if (len == 0)
- return (0);
- /*
- * Allocate a tablelist structure, initialize it,
- * and link it into the list of tables.
- */
- if ((t = (struct tablelist *)
- calloc(1, sizeof(struct tablelist))) == NULL)
- {
- return (-1);
- }
- expand_special_keys(buf, len);
- t->t_start = buf;
- t->t_end = buf + len;
- t->t_next = *tlist;
- *tlist = t;
- return (0);
-}
-
-/*
- * Add a command table.
- */
- public void
-add_fcmd_table(buf, len)
- char *buf;
- int len;
-{
- if (add_cmd_table(&list_fcmd_tables, buf, len) < 0)
- error("Warning: some commands disabled", NULL_PARG);
-}
-
-/*
- * Add an editing command table.
- */
- public void
-add_ecmd_table(buf, len)
- char *buf;
- int len;
-{
- if (add_cmd_table(&list_ecmd_tables, buf, len) < 0)
- error("Warning: some edit commands disabled", NULL_PARG);
-}
-
-/*
- * Add an environment variable table.
- */
- static void
-add_var_table(tlist, buf, len)
- struct tablelist **tlist;
- char *buf;
- int len;
-{
- if (add_cmd_table(tlist, buf, len) < 0)
- error("Warning: environment variables from lesskey file unavailable", NULL_PARG);
-}
-
-/*
- * Search a single command table for the command string in cmd.
- */
- static int
-cmd_search(cmd, table, endtable, sp)
- char *cmd;
- char *table;
- char *endtable;
- char **sp;
-{
- register char *p;
- register char *q;
- register int a;
-
- *sp = NULL;
- for (p = table, q = cmd; p < endtable; p++, q++)
- {
- if (*p == *q)
- {
- /*
- * Current characters match.
- * If we're at the end of the string, we've found it.
- * Return the action code, which is the character
- * after the null at the end of the string
- * in the command table.
- */
- if (*p == '\0')
- {
- a = *++p & 0377;
- while (a == A_SKIP)
- a = *++p & 0377;
- if (a == A_END_LIST)
- {
- /*
- * We get here only if the original
- * cmd string passed in was empty ("").
- * I don't think that can happen,
- * but just in case ...
- */
- return (A_UINVALID);
- }
- /*
- * Check for an "extra" string.
- */
- if (a & A_EXTRA)
- {
- *sp = ++p;
- a &= ~A_EXTRA;
- }
- return (a);
- }
- } else if (*q == '\0')
- {
- /*
- * Hit the end of the user's command,
- * but not the end of the string in the command table.
- * The user's command is incomplete.
- */
- return (A_PREFIX);
- } else
- {
- /*
- * Not a match.
- * Skip ahead to the next command in the
- * command table, and reset the pointer
- * to the beginning of the user's command.
- */
- if (*p == '\0' && p[1] == A_END_LIST)
- {
- /*
- * A_END_LIST is a special marker that tells
- * us to abort the cmd search.
- */
- return (A_UINVALID);
- }
- while (*p++ != '\0')
- continue;
- while (*p == A_SKIP)
- p++;
- if (*p & A_EXTRA)
- while (*++p != '\0')
- continue;
- q = cmd-1;
- }
- }
- /*
- * No match found in the entire command table.
- */
- return (A_INVALID);
-}
-
-/*
- * Decode a command character and return the associated action.
- * The "extra" string, if any, is returned in sp.
- */
- static int
-cmd_decode(tlist, cmd, sp)
- struct tablelist *tlist;
- char *cmd;
- char **sp;
-{
- register struct tablelist *t;
- register int action = A_INVALID;
-
- /*
- * Search thru all the command tables.
- * Stop when we find an action which is not A_INVALID.
- */
- for (t = tlist; t != NULL; t = t->t_next)
- {
- action = cmd_search(cmd, t->t_start, t->t_end, sp);
- if (action != A_INVALID)
- break;
- }
- if (action == A_UINVALID)
- action = A_INVALID;
- return (action);
-}
-
-/*
- * Decode a command from the cmdtables list.
- */
- public int
-fcmd_decode(cmd, sp)
- char *cmd;
- char **sp;
-{
- return (cmd_decode(list_fcmd_tables, cmd, sp));
-}
-
-/*
- * Decode a command from the edittables list.
- */
- public int
-ecmd_decode(cmd, sp)
- char *cmd;
- char **sp;
-{
- return (cmd_decode(list_ecmd_tables, cmd, sp));
-}
-
-/*
- * Get the value of an environment variable.
- * Looks first in the lesskey file, then in the real environment.
- */
- public char *
-lgetenv(var)
- char *var;
-{
- int a;
- char *s;
-
- a = cmd_decode(list_var_tables, var, &s);
- if (a == EV_OK)
- return (s);
- s = getenv(var);
- if (s != NULL && *s != '\0')
- return (s);
- a = cmd_decode(list_sysvar_tables, var, &s);
- if (a == EV_OK)
- return (s);
- return (NULL);
-}
-
-#if USERFILE
-/*
- * Get an "integer" from a lesskey file.
- * Integers are stored in a funny format:
- * two bytes, low order first, in radix KRADIX.
- */
- static int
-gint(sp)
- char **sp;
-{
- int n;
-
- n = *(*sp)++;
- n += *(*sp)++ * KRADIX;
- return (n);
-}
-
-/*
- * Process an old (pre-v241) lesskey file.
- */
- static int
-old_lesskey(buf, len)
- char *buf;
- int len;
-{
- /*
- * Old-style lesskey file.
- * The file must end with either
- * ...,cmd,0,action
- * or ...,cmd,0,action|A_EXTRA,string,0
- * So the last byte or the second to last byte must be zero.
- */
- if (buf[len-1] != '\0' && buf[len-2] != '\0')
- return (-1);
- add_fcmd_table(buf, len);
- return (0);
-}
-
-/*
- * Process a new (post-v241) lesskey file.
- */
- static int
-new_lesskey(buf, len, sysvar)
- char *buf;
- int len;
- int sysvar;
-{
- char *p;
- register int c;
- register int n;
-
- /*
- * New-style lesskey file.
- * Extract the pieces.
- */
- if (buf[len-3] != C0_END_LESSKEY_MAGIC ||
- buf[len-2] != C1_END_LESSKEY_MAGIC ||
- buf[len-1] != C2_END_LESSKEY_MAGIC)
- return (-1);
- p = buf + 4;
- for (;;)
- {
- c = *p++;
- switch (c)
- {
- case CMD_SECTION:
- n = gint(&p);
- add_fcmd_table(p, n);
- p += n;
- break;
- case EDIT_SECTION:
- n = gint(&p);
- add_ecmd_table(p, n);
- p += n;
- break;
- case VAR_SECTION:
- n = gint(&p);
- add_var_table((sysvar) ?
- &list_sysvar_tables : &list_var_tables, p, n);
- p += n;
- break;
- case END_SECTION:
- return (0);
- default:
- /*
- * Unrecognized section type.
- */
- return (-1);
- }
- }
-}
-
-/*
- * Set up a user command table, based on a "lesskey" file.
- */
- public int
-lesskey(filename, sysvar)
- char *filename;
- int sysvar;
-{
- register char *buf;
- register POSITION len;
- register long n;
- register int f;
-
- if (secure)
- return (1);
- /*
- * Try to open the lesskey file.
- */
- filename = shell_unquote(filename);
- f = open(filename, OPEN_READ);
- free(filename);
- if (f < 0)
- return (1);
-
- /*
- * Read the file into a buffer.
- * We first figure out the size of the file and allocate space for it.
- * {{ Minimal error checking is done here.
- * A garbage .less file will produce strange results.
- * To avoid a large amount of error checking code here, we
- * rely on the lesskey program to generate a good .less file. }}
- */
- len = filesize(f);
- if (len == NULL_POSITION || len < 3)
- {
- /*
- * Bad file (valid file must have at least 3 chars).
- */
- close(f);
- return (-1);
- }
- if ((buf = (char *) calloc((int)len, sizeof(char))) == NULL)
- {
- close(f);
- return (-1);
- }
- if (lseek(f, (off_t)0, SEEK_SET) == BAD_LSEEK)
- {
- free(buf);
- close(f);
- return (-1);
- }
- n = read(f, buf, (unsigned int) len);
- close(f);
- if (n != len)
- {
- free(buf);
- return (-1);
- }
-
- /*
- * Figure out if this is an old-style (before version 241)
- * or new-style lesskey file format.
- */
- if (buf[0] != C0_LESSKEY_MAGIC || buf[1] != C1_LESSKEY_MAGIC ||
- buf[2] != C2_LESSKEY_MAGIC || buf[3] != C3_LESSKEY_MAGIC)
- return (old_lesskey(buf, (int)len));
- return (new_lesskey(buf, (int)len, sysvar));
-}
-
-/*
- * Add the standard lesskey file "$HOME/.less"
- */
- public void
-add_hometable(envname, def_filename, sysvar)
- char *envname;
- char *def_filename;
- int sysvar;
-{
- char *filename;
- PARG parg;
-
- if (envname != NULL && (filename = lgetenv(envname)) != NULL)
- filename = save(filename);
- else if (sysvar)
- filename = save(def_filename);
- else
- filename = homefile(def_filename);
- if (filename == NULL)
- return;
- if (lesskey(filename, sysvar) < 0)
- {
- parg.p_string = filename;
- error("Cannot use lesskey file \"%s\"", &parg);
- }
- free(filename);
-}
-#endif
-
-/*
- * See if a char is a special line-editing command.
- */
- public int
-editchar(c, flags)
- int c;
- int flags;
-{
- int action;
- int nch;
- char *s;
- char usercmd[MAX_CMDLEN+1];
-
- /*
- * An editing character could actually be a sequence of characters;
- * for example, an escape sequence sent by pressing the uparrow key.
- * To match the editing string, we use the command decoder
- * but give it the edit-commands command table
- * This table is constructed to match the user's keyboard.
- */
- if (c == erase_char || c == erase2_char)
- return (EC_BACKSPACE);
- if (c == kill_char)
- return (EC_LINEKILL);
-
- /*
- * Collect characters in a buffer.
- * Start with the one we have, and get more if we need them.
- */
- nch = 0;
- do {
- if (nch > 0)
- c = getcc();
- usercmd[nch] = c;
- usercmd[nch+1] = '\0';
- nch++;
- action = ecmd_decode(usercmd, &s);
- } while (action == A_PREFIX);
-
- if (flags & EC_NORIGHTLEFT)
- {
- switch (action)
- {
- case EC_RIGHT:
- case EC_LEFT:
- action = A_INVALID;
- break;
- }
- }
-#if CMD_HISTORY
- if (flags & EC_NOHISTORY)
- {
- /*
- * The caller says there is no history list.
- * Reject any history-manipulation action.
- */
- switch (action)
- {
- case EC_UP:
- case EC_DOWN:
- action = A_INVALID;
- break;
- }
- }
-#endif
-#if TAB_COMPLETE_FILENAME
- if (flags & EC_NOCOMPLETE)
- {
- /*
- * The caller says we don't want any filename completion cmds.
- * Reject them.
- */
- switch (action)
- {
- case EC_F_COMPLETE:
- case EC_B_COMPLETE:
- case EC_EXPAND:
- action = A_INVALID;
- break;
- }
- }
-#endif
- if ((flags & EC_PEEK) || action == A_INVALID)
- {
- /*
- * We're just peeking, or we didn't understand the command.
- * Unget all the characters we read in the loop above.
- * This does NOT include the original character that was
- * passed in as a parameter.
- */
- while (nch > 1)
- {
- ungetcc(usercmd[--nch]);
- }
- } else
- {
- if (s != NULL)
- ungetsc(s);
- }
- return action;
-}
-
diff --git a/contrib/less/defines.ds b/contrib/less/defines.ds
deleted file mode 100644
index c98dcff..0000000
--- a/contrib/less/defines.ds
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/* DOS definition file for less. */
-/*
- * This file has 2 sections:
- * User preferences.
- * Settings always true for MS-DOS systems.
- */
-
-/* User preferences. */
-
-/*
- * SECURE is 1 if you wish to disable a bunch of features in order to
- * be safe to run by unprivileged users.
- */
-#define SECURE 0
-
-/*
- * SHELL_ESCAPE is 1 if you wish to allow shell escapes.
- * (This is possible only if your system supplies the system() function.)
- */
-#define SHELL_ESCAPE (!SECURE)
-
-/*
- * EXAMINE is 1 if you wish to allow examining files by name from within less.
- */
-#define EXAMINE (!SECURE)
-
-/*
- * TAB_COMPLETE_FILENAME is 1 if you wish to allow the TAB key
- * to complete filenames at prompts.
- */
-#define TAB_COMPLETE_FILENAME (!SECURE)
-
-/*
- * CMD_HISTORY is 1 if you wish to allow keys to cycle through
- * previous commands at prompts.
- */
-#define CMD_HISTORY 1
-
-/*
- * HILITE_SEARCH is 1 if you wish to have search targets to be
- * displayed in standout mode.
- */
-#define HILITE_SEARCH 1
-
-/*
- * EDITOR is 1 if you wish to allow editor invocation (the "v" command).
- * (This is possible only if your system supplies the system() function.)
- * EDIT_PGM is the name of the (default) editor to be invoked.
- */
-#define EDITOR (!SECURE)
-#define EDIT_PGM "vi"
-
-/*
- * TAGS is 1 if you wish to support tag files.
- */
-#define TAGS (!SECURE)
-
-/*
- * USERFILE is 1 if you wish to allow a .less file to specify
- * user-defined key bindings.
- */
-#define USERFILE (!SECURE)
-
-/*
- * GLOB is 1 if you wish to have shell metacharacters expanded in filenames.
- * This will generally work if your system provides the "popen" function
- * and the "echo" shell command.
- */
-#ifdef __DJGPP__
-#define GLOB (!SECURE)
-#else
-#define GLOB 0
-#endif
-
-/*
- * PIPEC is 1 if you wish to have the "|" command
- * which allows the user to pipe data into a shell command.
- */
-#ifdef __DJGPP__
-#define PIPEC (!SECURE)
-#else
-#define PIPEC 0
-#endif
-
-/*
- * LOGFILE is 1 if you wish to allow the -l option (to create log files).
- */
-#define LOGFILE (!SECURE)
-
-/*
- * GNU_OPTIONS is 1 if you wish to support the GNU-style command
- * line options --help and --version.
- */
-#define GNU_OPTIONS 1
-
-/*
- * ONLY_RETURN is 1 if you want RETURN to be the only input which
- * will continue past an error message.
- * Otherwise, any key will continue past an error message.
- */
-#define ONLY_RETURN 0
-
-/*
- * LESSKEYFILE is the filename of the default lesskey output file
- * (in the HOME directory).
- * LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
- * DEF_LESSKEYINFILE is the filename of the default lesskey input
- * (in the HOME directory).
- * LESSHISTFILE is the filename of the history file
- * (in the HOME directory).
- */
-#define LESSKEYFILE "_less"
-#define LESSKEYFILE_SYS "c:\\_sysless"
-#define DEF_LESSKEYINFILE "_lesskey"
-#define LESSHISTFILE "_lesshst"
-
-
-/* Settings always true for MS-DOS systems. */
-
-/*
- * Define MSDOS_COMPILER if compiling for MS-DOS.
- */
-#ifdef __DJGPP__
-#define MSDOS_COMPILER DJGPPC
-#else
-#ifdef __BORLANDC__
-#define MSDOS_COMPILER BORLANDC
-#else
-#define MSDOS_COMPILER MSOFTC
-#endif
-#endif
-
-/*
- * Pathname separator character.
- */
-#define PATHNAME_SEP "\\"
-
-/*
- * HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
- */
-#define HAVE_SYS_TYPES_H 1
-
-/*
- * Define if you have the <sgstat.h> header file.
- */
-#define HAVE_SGSTAT_H 0
-
-/*
- * HAVE_PERROR is 1 if your system has the perror() call.
- * (Actually, if it has sys_errlist, sys_nerr and errno.)
- */
-#define HAVE_PERROR 1
-
-/*
- * HAVE_TIME is 1 if your system has the time() call.
- */
-#define HAVE_TIME 1
-
-/*
- * HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
- */
-#define HAVE_SHELL 0
-
-/*
- * Default shell metacharacters and meta-escape character.
- */
-#define DEF_METACHARS "; *?\t\n'\"()<>|&"
-#define DEF_METAESCAPE ""
-
-/*
- * HAVE_DUP is 1 if your system has the dup() call.
- */
-#define HAVE_DUP 1
-
-/*
- * Sizes of various buffers.
- */
-#define CMDBUF_SIZE 512 /* Buffer for multichar commands */
-#define UNGOT_SIZE 100 /* Max chars to unget() */
-#define LINEBUF_SIZE 1024 /* Max size of line in input file */
-#define OUTBUF_SIZE 1024 /* Output buffer */
-#define PROMPT_SIZE 200 /* Max size of prompt string */
-#define TERMBUF_SIZE 2048 /* Termcap buffer for tgetent */
-#define TERMSBUF_SIZE 1024 /* Buffer to hold termcap strings */
-#define TAGLINE_SIZE 512 /* Max size of line in tags file */
-#define TABSTOP_MAX 32 /* Max number of custom tab stops */
-
-/* Define to `long' if <sys/types.h> doesn't define. */
-#if MSDOS_COMPILER==BORLANDC
-#define off_t long
-#endif
-
-/* Define if you need to in order for stat and other things to work. */
-/* #undef _POSIX_SOURCE */
-
-/* Define as the return type of signal handlers (int or void). */
-#define RETSIGTYPE void
-
-
-/*
- * Regular expression library.
- * Define exactly one of the following to be 1:
- * HAVE_POSIX_REGCOMP: POSIX regcomp() and regex.h
- * HAVE_RE_COMP: BSD re_comp()
- * HAVE_REGCMP: System V regcmp()
- * HAVE_V8_REGCOMP: Henry Spencer V8 regcomp() and regexp.h
- * NO_REGEX: pattern matching is supported, but without metacharacters.
- */
-/* #undef HAVE_POSIX_REGCOMP */
-/* #undef HAVE_RE_COMP */
-/* #undef HAVE_REGCMP */
-/* #undef HAVE_V8_REGCOMP */
-#if MSDOS_COMPILER==DJGPPC
-#define HAVE_POSIX_REGCOMP 1
-#else
-#define NO_REGEX 1
-#endif
-
-/* Define HAVE_VOID if your compiler supports the "void" type. */
-#define HAVE_VOID 1
-
-/* Define HAVE_CONST if your compiler supports the "const" modifier. */
-#define HAVE_CONST 1
-
-/* Define HAVE_TIME_T if your system supports the "time_t" type. */
-#define HAVE_TIME_T 1
-
-/* Define HAVE_STRERROR if you have the strerror() function. */
-#define HAVE_STRERROR 1
-
-/* Define HAVE_FILENO if you have the fileno() macro. */
-#define HAVE_FILENO 1
-
-/* Define HAVE_ERRNO if you have the errno variable */
-/* Define MUST_DEFINE_ERRNO if you have errno but it is not defined
- * in errno.h */
-#if MSDOS_COMPILER==MSOFTC || MSDOS_COMPILER==DJGPPC
-#define HAVE_ERRNO 1
-#define MUST_DEFINE_ERRNO 0
-#else
-#define HAVE_ERRNO 1
-#define MUST_DEFINE_ERRNO 1
-#endif
-
-/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable */
-#define HAVE_SYS_ERRLIST 1
-
-/* Define HAVE_OSPEED if your termcap library has the ospeed variable */
-/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined
- * in termcap.h. */
-#define HAVE_OSPEED 0
-#define MUST_DEFINE_OSPEED 0
-
-/* Define HAVE_LOCALE if you have locale.h and setlocale. */
-#define HAVE_LOCALE 0
-
-/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr */
-#define HAVE_TERMIOS_FUNCS 0
-
-/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower */
-#define HAVE_UPPER_LOWER 1
-
-/* Define if you have the _setjmp function. */
-#if MSDOS_COMPILER==MSOFTC || MSDOS_COMPILER==DJGPPC
-#define HAVE__SETJMP 0
-#else
-#define HAVE__SETJMP 1
-#endif
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY 1
-
-/* Define if you have the popen function. */
-#if MSDOS_COMPILER==DJGPPC
-#define HAVE_POPEN 1
-#else
-#define HAVE_POPEN 0
-#endif
-
-/* Define if you have the sigsetmask function. */
-#define HAVE_SIGSETMASK 0
-
-/* Define if you have the sigprocmask function. */
-#define HAVE_SIGPROCMASK 0
-
-/* Define if you have the sigset_t type and sigemptyset macro */
-#define HAVE_SIGSET_T 0
-#define HAVE_SIGEMPTYSET 0
-
-/* Define if you have the stat function. */
-#define HAVE_STAT 1
-
-/* Define if you have the strchr function. */
-#define HAVE_STRCHR 1
-
-/* Define if you have the system function. */
-#define HAVE_SYSTEM 1
-
-/* Define if you have the snprintf function. */
-#define HAVE_SNPRINTF 0
-
-/* Define if you have the <ctype.h> header file. */
-#define HAVE_CTYPE_H 1
-
-/* Define if you have the <wctype.h> header file. */
-#define HAVE_WCTYPE_H 0
-
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define if you have the <stdio.h> header file. */
-#define HAVE_STDIO_H 1
-
-/* Define if you have the <stdlib> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 0
-
-/* Define if you have the <sys/ptem.h> header file. */
-#define HAVE_SYS_PTEM_H 0
-
-/* Define if you have the <sys/stream.h> header file. */
-#define HAVE_SYS_STREAM_H 0
-
-/* Define if you have the <termcap.h> header file. */
-#define HAVE_TERMCAP_H 0
-
-/* Define if you have the <termio.h> header file. */
-#define HAVE_TERMIO_H 0
-
-/* Define if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 0
-
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define if you have the <unistd.h> header file. */
-#if MSDOS_COMPILER==DJGPPC
-#define HAVE_UNISTD_H 1
-#else
-#define HAVE_UNISTD_H 0
-#endif
-
-/* Define if you have the <values.h> header file. */
-#if MSDOS_COMPILER==MSOFTC
-#define HAVE_VALUES_H 0
-#else
-#define HAVE_VALUES_H 1
-#endif
-
-#if MSDOS_COMPILER == MSOFTC && _MSC_VER >= 700
-/*
- * The names of these things changed in Microsoft C version 7.0.
- */
-#define videoconfig _videoconfig
-#define rccoord _rccoord
-#define O_RDONLY _O_RDONLY
-#define O_WRONLY _O_WRONLY
-#define O_APPEND _O_APPEND
-#define O_BINARY _O_BINARY
-#define O_TEXT _O_TEXT
-#define find_t _find_t
-#define stat _stat
-#define S_IFMT _S_IFMT
-#define S_IFDIR _S_IFDIR
-#define S_IFREG _S_IFREG
-#define dup _dup
-#define open _open
-#define lseek _lseek
-#define write _write
-#define creat _creat
-#define fstat _fstat
-#define isatty _isatty
-#define close _close
-#define read _read
-#define ungetch _ungetch
-#define kbhit _kbhit
-#define getch _getch
-#endif
diff --git a/contrib/less/defines.h.in b/contrib/less/defines.h.in
deleted file mode 100644
index 8da1bae..0000000
--- a/contrib/less/defines.h.in
+++ /dev/null
@@ -1,420 +0,0 @@
-/* defines.h.in. Generated from configure.ac by autoheader. */
-
-
-/* Unix definition file for less. -*- C -*-
- *
- * This file has 3 sections:
- * User preferences.
- * Settings always true on Unix.
- * Settings automatically determined by configure.
- *
- * * * * * * WARNING * * * * * *
- * If you edit defines.h by hand, do "touch stamp-h" before you run make
- * so config.status doesn't overwrite your changes.
- */
-
-/* User preferences. */
-
-/*
- * SECURE is 1 if you wish to disable a bunch of features in order to
- * be safe to run by unprivileged users.
- * SECURE_COMPILE is set by the --with-secure configure option.
- */
-#define SECURE SECURE_COMPILE
-
-/*
- * SHELL_ESCAPE is 1 if you wish to allow shell escapes.
- * (This is possible only if your system supplies the system() function.)
- */
-#define SHELL_ESCAPE (!SECURE)
-
-/*
- * EXAMINE is 1 if you wish to allow examining files by name from within less.
- */
-#define EXAMINE (!SECURE)
-
-/*
- * TAB_COMPLETE_FILENAME is 1 if you wish to allow the TAB key
- * to complete filenames at prompts.
- */
-#define TAB_COMPLETE_FILENAME (!SECURE)
-
-/*
- * CMD_HISTORY is 1 if you wish to allow keys to cycle through
- * previous commands at prompts.
- */
-#define CMD_HISTORY 1
-
-/*
- * HILITE_SEARCH is 1 if you wish to have search targets to be
- * displayed in standout mode.
- */
-#define HILITE_SEARCH 1
-
-/*
- * EDITOR is 1 if you wish to allow editor invocation (the "v" command).
- * (This is possible only if your system supplies the system() function.)
- * EDIT_PGM is the name of the (default) editor to be invoked.
- */
-#define EDITOR (!SECURE)
-
-/*
- * TAGS is 1 if you wish to support tag files.
- */
-#define TAGS (!SECURE)
-
-/*
- * USERFILE is 1 if you wish to allow a .less file to specify
- * user-defined key bindings.
- */
-#define USERFILE (!SECURE)
-
-/*
- * GLOB is 1 if you wish to have shell metacharacters expanded in filenames.
- * This will generally work if your system provides the "popen" function
- * and the "echo" shell command.
- */
-#define GLOB (!SECURE)
-
-/*
- * PIPEC is 1 if you wish to have the "|" command
- * which allows the user to pipe data into a shell command.
- */
-#define PIPEC (!SECURE)
-
-/*
- * LOGFILE is 1 if you wish to allow the -l option (to create log files).
- */
-#define LOGFILE (!SECURE)
-
-/*
- * GNU_OPTIONS is 1 if you wish to support the GNU-style command
- * line options --help and --version.
- */
-#define GNU_OPTIONS 1
-
-/*
- * ONLY_RETURN is 1 if you want RETURN to be the only input which
- * will continue past an error message.
- * Otherwise, any key will continue past an error message.
- */
-#define ONLY_RETURN 0
-
-/*
- * LESSKEYFILE is the filename of the default lesskey output file
- * (in the HOME directory).
- * LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
- * DEF_LESSKEYINFILE is the filename of the default lesskey input
- * (in the HOME directory).
- * LESSHISTFILE is the filename of the history file
- * (in the HOME directory).
- */
-#define LESSKEYFILE ".less"
-#define LESSKEYFILE_SYS SYSDIR "/sysless"
-#define DEF_LESSKEYINFILE ".lesskey"
-#define LESSHISTFILE ".lesshst"
-
-
-/* Settings always true on Unix. */
-
-/*
- * Define MSDOS_COMPILER if compiling under Microsoft C.
- */
-#define MSDOS_COMPILER 0
-
-/*
- * Pathname separator character.
- */
-#define PATHNAME_SEP "/"
-
-/*
- * The value returned from tgetent on success.
- * Some HP-UX systems return 0 on success.
- */
-#define TGETENT_OK 1
-
-/*
- * HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
- */
-#define HAVE_SYS_TYPES_H 1
-
-/*
- * Define if you have the <sgstat.h> header file.
- */
-#undef HAVE_SGSTAT_H
-
-/*
- * HAVE_PERROR is 1 if your system has the perror() call.
- * (Actually, if it has sys_errlist, sys_nerr and errno.)
- */
-#define HAVE_PERROR 1
-
-/*
- * HAVE_TIME is 1 if your system has the time() call.
- */
-#define HAVE_TIME 1
-
-/*
- * HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
- */
-#define HAVE_SHELL 1
-
-/*
- * Default shell metacharacters and meta-escape character.
- */
-#define DEF_METACHARS "; *?\t\n'\"()<>[]|&^`#\\$%=~"
-#define DEF_METAESCAPE "\\"
-
-/*
- * HAVE_DUP is 1 if your system has the dup() call.
- */
-#define HAVE_DUP 1
-
-/* Define to 1 if you have the memcpy() function. */
-#define HAVE_MEMCPY 1
-
-/* Define to 1 if you have the strchr() function. */
-#define HAVE_STRCHR 1
-
-/* Define to 1 if you have the strstr() function. */
-#define HAVE_STRSTR 1
-
-/*
- * Sizes of various buffers.
- */
-#define CMDBUF_SIZE 512 /* Buffer for multichar commands */
-#define UNGOT_SIZE 100 /* Max chars to unget() */
-#define LINEBUF_SIZE 1024 /* Max size of line in input file */
-#define OUTBUF_SIZE 1024 /* Output buffer */
-#define PROMPT_SIZE 200 /* Max size of prompt string */
-#define TERMBUF_SIZE 2048 /* Termcap buffer for tgetent */
-#define TERMSBUF_SIZE 1024 /* Buffer to hold termcap strings */
-#define TAGLINE_SIZE 512 /* Max size of line in tags file */
-#define TABSTOP_MAX 32 /* Max number of custom tab stops */
-
-/* Settings automatically determined by configure. */
-
-
-/* Define EDIT_PGM to your editor. */
-#undef EDIT_PGM
-
-/* Define HAVE_CONST if your compiler supports the "const" modifier. */
-#undef HAVE_CONST
-
-/* Define to 1 if you have the <ctype.h> header file. */
-#undef HAVE_CTYPE_H
-
-/* Define HAVE_ERRNO if you have the errno variable. */
-#undef HAVE_ERRNO
-
-/* Define to 1 if you have the <errno.h> header file. */
-#undef HAVE_ERRNO_H
-
-/* Define to 1 if you have the `fchmod' function. */
-#undef HAVE_FCHMOD
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define HAVE_FILENO if you have the fileno() macro. */
-#undef HAVE_FILENO
-
-/* Define to 1 if you have the `fsync' function. */
-#undef HAVE_FSYNC
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the `gen' library (-lgen). */
-#undef HAVE_LIBGEN
-
-/* Define to 1 if you have the `intl' library (-lintl). */
-#undef HAVE_LIBINTL
-
-/* Define to 1 if you have the `PW' library (-lPW). */
-#undef HAVE_LIBPW
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define HAVE_LOCALE if you have locale.h and setlocale. */
-#undef HAVE_LOCALE
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define HAVE_OSPEED if your termcap library has the ospeed variable. */
-#undef HAVE_OSPEED
-
-/* PCRE (Perl-compatible regular expression) library */
-#undef HAVE_PCRE
-
-/* Define to 1 if you have the `popen' function. */
-#undef HAVE_POPEN
-
-/* POSIX regcomp() and regex.h */
-#undef HAVE_POSIX_REGCOMP
-
-/* System V regcmp() */
-#undef HAVE_REGCMP
-
-/* */
-#undef HAVE_REGEXEC2
-
-/* BSD re_comp() */
-#undef HAVE_RE_COMP
-
-/* Define HAVE_SIGEMPTYSET if you have the sigemptyset macro. */
-#undef HAVE_SIGEMPTYSET
-
-/* Define to 1 if you have the `sigprocmask' function. */
-#undef HAVE_SIGPROCMASK
-
-/* Define to 1 if you have the `sigsetmask' function. */
-#undef HAVE_SIGSETMASK
-
-/* Define to 1 if the system has the type `sigset_t'. */
-#undef HAVE_SIGSET_T
-
-/* Define to 1 if you have the `snprintf' function. */
-#undef HAVE_SNPRINTF
-
-/* Define to 1 if you have the `stat' function. */
-#undef HAVE_STAT
-
-/* Define HAVE_STAT_INO if your struct stat has st_ino and st_dev. */
-#undef HAVE_STAT_INO
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdio.h> header file. */
-#undef HAVE_STDIO_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define HAVE_STRERROR if you have the strerror() function. */
-#undef HAVE_STRERROR
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `system' function. */
-#undef HAVE_SYSTEM
-
-/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable. */
-#undef HAVE_SYS_ERRLIST
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#undef HAVE_SYS_IOCTL_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/stream.h> header file. */
-#undef HAVE_SYS_STREAM_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <termcap.h> header file. */
-#undef HAVE_TERMCAP_H
-
-/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr. */
-#undef HAVE_TERMIOS_FUNCS
-
-/* Define to 1 if you have the <termios.h> header file. */
-#undef HAVE_TERMIOS_H
-
-/* Define to 1 if you have the <termio.h> header file. */
-#undef HAVE_TERMIO_H
-
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
-/* Define HAVE_TIME_T if your system supports the "time_t" type. */
-#undef HAVE_TIME_T
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower. */
-#undef HAVE_UPPER_LOWER
-
-/* Henry Spencer V8 regcomp() and regexp.h */
-#undef HAVE_V8_REGCOMP
-
-/* Define to 1 if you have the <values.h> header file. */
-#undef HAVE_VALUES_H
-
-/* Define HAVE_VOID if your compiler supports the "void" type. */
-#undef HAVE_VOID
-
-/* Define HAVE_WCTYPE if you have iswupper, iswlower, towupper, towlower. */
-#undef HAVE_WCTYPE
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#undef HAVE_WCTYPE_H
-
-/* Define to 1 if you have the `_setjmp' function. */
-#undef HAVE__SETJMP
-
-/* Define MUST_DEFINE_ERRNO if you have errno but it is not define in errno.h.
- */
-#undef MUST_DEFINE_ERRNO
-
-/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined in
- termcap.h. */
-#undef MUST_DEFINE_OSPEED
-
-/* pattern matching is supported, but without metacharacters. */
-#undef NO_REGEX
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#undef RETSIGTYPE
-
-/* Define SECURE_COMPILE=1 to build a secure version of less. */
-#undef SECURE_COMPILE
-
-/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
-#undef STAT_MACROS_BROKEN
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `long int' if <sys/types.h> does not define. */
-#undef off_t
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
diff --git a/contrib/less/defines.o2 b/contrib/less/defines.o2
deleted file mode 100644
index 5440038..0000000
--- a/contrib/less/defines.o2
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/* OS/2 definition file for less. */
-/*
- * This file has 2 sections:
- * User preferences.
- * Settings always true for the emx compiler for OS/2 systems.
- */
-
-
-/* User preferences. */
-
-/*
- * SECURE is 1 if you wish to disable a bunch of features in order to
- * be safe to run by unprivileged users.
- */
-#define SECURE 0
-
-/*
- * SHELL_ESCAPE is 1 if you wish to allow shell escapes.
- * (This is possible only if your system supplies the system() function.)
- */
-#define SHELL_ESCAPE (!SECURE)
-
-/*
- * EXAMINE is 1 if you wish to allow examining files by name from within less.
- */
-#define EXAMINE (!SECURE)
-
-/*
- * TAB_COMPLETE_FILENAME is 1 if you wish to allow the TAB key
- * to complete filenames at prompts.
- */
-#define TAB_COMPLETE_FILENAME (!SECURE)
-
-/*
- * CMD_HISTORY is 1 if you wish to allow keys to cycle through
- * previous commands at prompts.
- */
-#define CMD_HISTORY 1
-
-/*
- * HILITE_SEARCH is 1 if you wish to have search targets to be
- * displayed in standout mode.
- */
-#define HILITE_SEARCH 1
-
-/*
- * EDITOR is 1 if you wish to allow editor invocation (the "v" command).
- * (This is possible only if your system supplies the system() function.)
- * EDIT_PGM is the name of the (default) editor to be invoked.
- */
-#define EDITOR (!SECURE)
-#define EDIT_PGM "vi"
-
-/*
- * TAGS is 1 if you wish to support tag files.
- */
-#define TAGS (!SECURE)
-
-/*
- * USERFILE is 1 if you wish to allow a .less file to specify
- * user-defined key bindings.
- */
-#define USERFILE (!SECURE)
-
-/*
- * GLOB is 1 if you wish to have shell metacharacters expanded in filenames.
- * This will generally work if your system provides the "popen" function
- * and the "echo" shell command.
- */
-#define GLOB (!SECURE)
-
-/*
- * PIPEC is 1 if you wish to have the "|" command
- * which allows the user to pipe data into a shell command.
- */
-#define PIPEC (!SECURE)
-
-/*
- * LOGFILE is 1 if you wish to allow the -l option (to create log files).
- */
-#define LOGFILE (!SECURE)
-
-/*
- * GNU_OPTIONS is 1 if you wish to support the GNU-style command
- * line options --help and --version.
- */
-#define GNU_OPTIONS 1
-
-/*
- * ONLY_RETURN is 1 if you want RETURN to be the only input which
- * will continue past an error message.
- * Otherwise, any key will continue past an error message.
- */
-#define ONLY_RETURN 0
-
-/*
- * LESSKEYFILE is the filename of the default lesskey output file
- * (in the HOME directory).
- * LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
- * DEF_LESSKEYINFILE is the filename of the default lesskey input
- * (in the HOME directory).
- * LESSHISTFILE is the filename of the history file
- * (in the HOME directory).
- */
-#define LESSKEYFILE "less.ini"
-#define LESSKEYFILE_SYS "C:\\sysless.ini"
-#define DEF_LESSKEYINFILE "lesskey.ini"
-#define LESSHISTFILE "lesshst.ini"
-
-
-/* Settings always true for the emx compiler for OS/2 systems. */
-#define OS2 1
-
-/*
- * Pathname separator character.
- */
-#define PATHNAME_SEP "\\"
-
-/*
- * HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
- */
-#define HAVE_SYS_TYPES_H 1
-
-/*
- * Define if you have the <sgstat.h> header file.
- */
-#define HAVE_SGSTAT_H 0
-
-/*
- * HAVE_PERROR is 1 if your system has the perror() call.
- * (Actually, if it has sys_errlist, sys_nerr and errno.)
- */
-#define HAVE_PERROR 1
-
-/*
- * HAVE_TIME is 1 if your system has the time() call.
- */
-#define HAVE_TIME 1
-
-/*
- * HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
- */
-#define HAVE_SHELL 0
-
-/*
- * Default shell metacharacters and meta-escape character.
- */
-#define DEF_METACHARS "; *?\t\n'\"()<>|&"
-#define DEF_METAESCAPE ""
-
-/*
- * HAVE_DUP is 1 if your system has the dup() call.
- */
-#define HAVE_DUP 1
-
-/*
- * Sizes of various buffers.
- */
-#define CMDBUF_SIZE 512 /* Buffer for multichar commands */
-#define UNGOT_SIZE 100 /* Max chars to unget() */
-#define LINEBUF_SIZE 1024 /* Max size of line in input file */
-#define OUTBUF_SIZE 1024 /* Output buffer */
-#define PROMPT_SIZE 200 /* Max size of prompt string */
-#define TERMBUF_SIZE 2048 /* Termcap buffer for tgetent */
-#define TERMSBUF_SIZE 1024 /* Buffer to hold termcap strings */
-#define TAGLINE_SIZE 512 /* Max size of line in tags file */
-#define TABSTOP_MAX 32 /* Max number of custom tab stops */
-
-/* Define to `long' if <sys/types.h> doesn't define. */
-/* #define off_t long */
-
-/* Define if you need to in order for stat and other things to work. */
-/* #undef _POSIX_SOURCE */
-
-/* Define as the return type of signal handlers (int or void). */
-#define RETSIGTYPE void
-
-
-/*
- * Regular expression library.
- * Define exactly one of the following to be 1:
- * HAVE_POSIX_REGCOMP: POSIX regcomp() and regex.h
- * HAVE_RE_COMP: BSD re_comp()
- * HAVE_REGCMP: System V regcmp()
- * HAVE_V8_REGCOMP: Henry Spencer V8 regcomp() and regexp.h
- * NO_REGEX: pattern matching is supported, but without metacharacters.
- */
-/* #undef HAVE_POSIX_REGCOMP */
-/* #undef HAVE_RE_COMP */
-/* #undef HAVE_REGCMP */
-#define HAVE_V8_REGCOMP 1
-/* #undef NO_REGEX */
-#define HAVE_REGEXEC2 1
-
-/* Define HAVE_VOID if your compiler supports the "void" type. */
-#define HAVE_VOID 1
-
-/* Define HAVE_CONST if your compiler supports the "const" modifier. */
-#define HAVE_CONST 1
-
-/* Define HAVE_TIME_T if your system supports the "time_t" type. */
-#define HAVE_TIME_T 1
-
-/* Define HAVE_STRERROR if you have the strerror() function. */
-#define HAVE_STRERROR 1
-
-/* Define HAVE_FILENO if you have the fileno() macro. */
-#define HAVE_FILENO 1
-
-/* Define HAVE_ERRNO if you have the errno variable */
-/* Define MUST_DEFINE_ERRNO if you have errno but it is not define
- * in errno.h */
-#define HAVE_ERRNO 1
-/* #undef MUST_DEFINE_ERRNO */
-
-/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable */
-#define HAVE_SYS_ERRLIST 1
-
-/* Define HAVE_OSPEED if your termcap library has the ospeed variable */
-#define HAVE_OSPEED 1
-/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined
- * in termcap.h. */
-#define MUST_DEFINE_OSPEED 0
-
-/* Define HAVE_LOCALE if you have locale.h and setlocale. */
-#define HAVE_LOCALE 1
-
-/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr */
-#define HAVE_TERMIOS_FUNCS 1
-
-/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower */
-#define HAVE_UPPER_LOWER 1
-
-/* Define if you have the _setjmp function. */
-#define HAVE__SETJMP 0
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY 1
-
-/* Define if you have the popen function. */
-#define HAVE_POPEN 1
-
-/* Define if you have the sigsetmask function. */
-#define HAVE_SIGSETMASK 0
-
-/* Define if you have the sigprocmask function. */
-#define HAVE_SIGPROCMASK 1
-
-/* Define if you have the sigset_t type and sigemptyset macro */
-#define HAVE_SIGSET_T 1
-#define HAVE_SIGEMPTYSET 1
-
-/* Define if you have the stat function. */
-#define HAVE_STAT 1
-
-/* Define if you have the strchr function. */
-#define HAVE_STRCHR 1
-
-/* Define if you have the strstr function. */
-#define HAVE_STRSTR 1
-
-/* Define if you have the system function. */
-#define HAVE_SYSTEM 1
-
-/* Define if you have the snprintf function. */
-#define HAVE_SNPRINTF 0
-
-/* Define if you have the <ctype.h> header file. */
-#define HAVE_CTYPE_H 1
-
-/* Define if you have the <wctype.h> header file. */
-#define HAVE_WCTYPE_H 0
-
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define if you have the <stdio.h> header file. */
-#define HAVE_STDIO_H 1
-
-/* Define if you have the <stdlib> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define if you have the <sys/ptem.h> header file. */
-#define HAVE_SYS_PTEM_H 0
-
-/* Define if you have the <sys/stream.h> header file. */
-#define HAVE_SYS_STREAM_H 0
-
-/* Define if you have the <termcap.h> header file. */
-#define HAVE_TERMCAP_H 1
-
-/* Define if you have the <termio.h> header file. */
-#define HAVE_TERMIO_H 1
-
-/* Define if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 1
-
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define if you have the <values.h> header file. */
-#define HAVE_VALUES_H 0
diff --git a/contrib/less/defines.o9 b/contrib/less/defines.o9
deleted file mode 100644
index 50955ba..0000000
--- a/contrib/less/defines.o9
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/* OS/9 definition file for less. */
-/*
- * This file has 2 sections:
- * User preferences.
- * Settings always true for OS-9 systems.
- */
-
-/* User preferences. */
-
-/*
- * SECURE is 1 if you wish to disable a bunch of features in order to
- * be safe to run by unprivileged users.
- */
-#define SECURE 0
-
-/*
- * SHELL_ESCAPE is 1 if you wish to allow shell escapes.
- * (This is possible only if your system supplies the system() function.)
- */
-#define SHELL_ESCAPE (!SECURE)
-
-/*
- * EXAMINE is 1 if you wish to allow examining files by name from within less.
- */
-#define EXAMINE (!SECURE)
-
-/*
- * TAB_COMPLETE_FILENAME is 1 if you wish to allow the TAB key
- * to complete filenames at prompts.
- */
-#define TAB_COMPLETE_FILENAME 1
-
-/*
- * CMD_HISTORY is 1 if you wish to allow keys to cycle through
- * previous commands at prompts.
- */
-#define CMD_HISTORY 1
-
-/*
- * HILITE_SEARCH is 1 if you wish to have search targets to be
- * displayed in standout mode.
- */
-#define HILITE_SEARCH 1
-
-/*
- * EDITOR is 1 if you wish to allow editor invocation (the "v" command).
- * (This is possible only if your system supplies the system() function.)
- * EDIT_PGM is the name of the (default) editor to be invoked.
- */
-#define EDITOR (!SECURE)
-#define EDIT_PGM "umacs"
-
-/*
- * TAGS is 1 if you wish to support tag files.
- */
-#define TAGS (!SECURE)
-
-/*
- * USERFILE is 1 if you wish to allow a .less file to specify
- * user-defined key bindings.
- */
-#define USERFILE (!SECURE)
-
-/*
- * GLOB is 1 if you wish to have shell metacharacters expanded in filenames.
- * This will generally work if your system provides the "popen" function
- * and the "echo" shell command.
- */
-#define GLOB (!SECURE)
-
-/*
- * PIPEC is 1 if you wish to have the "|" command
- * which allows the user to pipe data into a shell command.
- */
-#define PIPEC (!SECURE)
-
-/*
- * LOGFILE is 1 if you wish to allow the -l option (to create log files).
- */
-#define LOGFILE (!SECURE)
-
-/*
- * GNU_OPTIONS is 1 if you wish to support the GNU-style command
- * line options --help and --version.
- */
-#define GNU_OPTIONS 1
-
-/*
- * ONLY_RETURN is 1 if you want RETURN to be the only input which
- * will continue past an error message.
- * Otherwise, any key will continue past an error message.
- */
-#define ONLY_RETURN 0
-
-/*
- * LESSKEYFILE is the filename of the default lesskey output file
- * (in the HOME directory).
- * LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
- * DEF_LESSKEYINFILE is the filename of the default lesskey input
- * (in the HOME directory).
- * LESSHISTFILE is the filename of the history file
- * (in the HOME directory).
- */
-#define LESSKEYFILE ".less"
-#define LESSKEYFILE_SYS "/.sysless"
-#define DEF_LESSKEYINFILE ".lesskey"
-#define LESSHISTFILE ".lesshst"
-
-
-/* Settings always true for OS-9. */
-
-/* This is not needed; it is defined by the compiler. */
-/* #define _OSK 1 */
-#define OS2 0
-#define MSDOS_COMPILER 0
-
-/*
- * Pathname separator character.
- */
-#define PATHNAME_SEP "/"
-
-/*
- * HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
- */
-#define HAVE_SYS_TYPES_H 0
-
-/*
- * Define if you have the <sgstat.h> header file.
- */
-#define HAVE_SGSTAT_H 1
-
-/*
- * HAVE_PERROR is 1 if your system has the perror() call.
- * (Actually, if it has sys_errlist, sys_nerr and errno.)
- */
-#if _OSK_MWC32
-#define HAVE_PERROR 0
-#else
-#define HAVE_PERROR 1
-#endif
-
-/*
- * HAVE_TIME is 1 if your system has the time() call.
- */
-#define HAVE_TIME 1
-
-/*
- * HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
- */
-#define HAVE_SHELL 0
-
-/*
- * Default shell metacharacters and meta-escape character.
- */
-#define DEF_METACHARS "; \t\n'\"()<>|&^`#\\"
-#define DEF_METAESCAPE "\\"
-
-/*
- * HAVE_DUP is 1 if your system has the dup() call.
- */
-#define HAVE_DUP 0
-
-/*
- * Sizes of various buffers.
- */
-#define CMDBUF_SIZE 512 /* Buffer for multichar commands */
-#define UNGOT_SIZE 100 /* Max chars to unget() */
-#define LINEBUF_SIZE 1024 /* Max size of line in input file */
-#define OUTBUF_SIZE 1024 /* Output buffer */
-#define PROMPT_SIZE 200 /* Max size of prompt string */
-#define TERMBUF_SIZE 2048 /* Termcap buffer for tgetent */
-#define TERMSBUF_SIZE 1024 /* Buffer to hold termcap strings */
-#define TAGLINE_SIZE 512 /* Max size of line in tags file */
-#define TABSTOP_MAX 32 /* Max number of custom tab stops */
-
-/* Define to `long' if <sys/types.h> doesn't define. */
-#define off_t long
-
-/* Define if you need to in order for stat and other things to work. */
-#define _POSIX_SOURCE 0
-
-/* Define as the return type of signal handlers (int or void). */
-#if _OSK_MWC32
-#define RETSIGTYPE int
-#else
-#define RETSIGTYPE void
-#endif
-
-
-/*
- * Regular expression library.
- * Define exactly one of the following to be 1:
- * HAVE_POSIX_REGCOMP: POSIX regcomp() and regex.h
- * HAVE_RE_COMP: BSD re_comp()
- * HAVE_REGCMP: System V regcmp()
- * HAVE_V8_REGCOMP: Henry Spencer V8 regcomp() and regexp.h
- * NO_REGEX: pattern matching is supported, but without metacharacters.
- */
-#define HAVE_POSIX_REGCOMP 0
-#define HAVE_RE_COMP 0
-#define HAVE_REGCMP 0
-#define HAVE_V8_REGCOMP 1
-#define NO_REGEX 0
-#define HAVE_REGEXEC2 1
-
-/* Define HAVE_VOID if your compiler supports the "void" type. */
-#define HAVE_VOID 1
-
-/* Define HAVE_CONST if your compiler supports the "const" modifier. */
-#define HAVE_CONST 0
-
-/* Define HAVE_TIME_T if your system supports the "time_t" type. */
-#define HAVE_TIME_T 1
-
-/* Define HAVE_STRERROR if you have the strerror() function. */
-#define HAVE_STRERROR 0
-
-/* Define HAVE_FILENO if you have the fileno() macro. */
-#define HAVE_FILENO 1
-
-/* Define HAVE_ERRNO if you have the errno variable */
-/* Define MUST_DEFINE_ERRNO if you have errno but it is not define
- * in errno.h */
-#define HAVE_ERRNO 1
-#define MUST_DEFINE_ERRNO 0
-
-/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable */
-#define HAVE_SYS_ERRLIST 0
-
-/* Define HAVE_OSPEED if your termcap library has the ospeed variable */
-/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined
- * in termcap.h. */
-#define HAVE_OSPEED 0
-#define MUST_DEFINE_OSPEED 0
-
-/* Define HAVE_LOCALE if you have locale.h and setlocale. */
-#define HAVE_LOCALE 0
-
-/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr */
-#define HAVE_TERMIOS_FUNCS 0
-
-/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower */
-#define HAVE_UPPER_LOWER 1
-
-/* Define if you have the _setjmp function. */
-#define HAVE__SETJMP 1
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY 1
-
-/* Define if you have the popen function. */
-#define HAVE_POPEN 1
-
-/* Define if you have the sigsetmask function. */
-#define HAVE_SIGSETMASK 0
-
-/* Define if you have the sigprocmask function. */
-#define HAVE_SIGPROCMASK 0
-
-/* Define if you have the sigset_t type and sigemptyset macro */
-#define HAVE_SIGSET_T 0
-#define HAVE_SIGEMPTYSET 0
-
-/* Define if you have the stat function. */
-#define HAVE_STAT 0
-
-/* Define if you have the strchr function. */
-#define HAVE_STRCHR 0
-
-/* Define if you have the system function. */
-#define HAVE_SYSTEM 1
-
-/* Define if you have the snprintf function. */
-#define HAVE_SNPRINTF 0
-
-/* Define if you have the <ctype.h> header file. */
-#define HAVE_CTYPE_H 1
-
-/* Define if you have the <wctype.h> header file. */
-#define HAVE_WCTYPE_H 0
-
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 0
-
-/* Define if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 0
-
-/* Define if you have the <stdio.h> header file. */
-#define HAVE_STDIO_H 1
-
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define if you have the <stdlib> header file. */
-#if _OSK_MWC32
-#define HAVE_STDLIB_H 0
-#else
-#define HAVE_STDLIB_H 1
-#endif
-
-/* Define if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 0
-
-/* Define if you have the <sys/ptem.h> header file. */
-#define HAVE_SYS_PTEM_H 0
-
-/* Define if you have the <sys/stream.h> header file. */
-#define HAVE_SYS_STREAM_H 0
-
-/* Define if you have the <termcap.h> header file. */
-#define HAVE_TERMCAP_H 1
-
-/* Define if you have the <termio.h> header file. */
-#define HAVE_TERMIO_H 0
-
-/* Define if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 0
-
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 0
-
-/* Define if you have the <values.h> header file. */
-#define HAVE_VALUES_H 0
diff --git a/contrib/less/defines.wn b/contrib/less/defines.wn
deleted file mode 100644
index 7c3194c..0000000
--- a/contrib/less/defines.wn
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/* Windows definition file for less. */
-/*
- * This file has 2 sections:
- * User preferences.
- * Settings always true for Windows systems.
- */
-
-
-/* User preferences. */
-
-/*
- * SECURE is 1 if you wish to disable a bunch of features in order to
- * be safe to run by unprivileged users.
- */
-#define SECURE 0
-
-/*
- * SHELL_ESCAPE is 1 if you wish to allow shell escapes.
- * (This is possible only if your system supplies the system() function.)
- */
-#define SHELL_ESCAPE (!SECURE)
-
-/*
- * EXAMINE is 1 if you wish to allow examining files by name from within less.
- */
-#define EXAMINE (!SECURE)
-
-/*
- * TAB_COMPLETE_FILENAME is 1 if you wish to allow the TAB key
- * to complete filenames at prompts.
- */
-#define TAB_COMPLETE_FILENAME (!SECURE)
-
-/*
- * CMD_HISTORY is 1 if you wish to allow keys to cycle through
- * previous commands at prompts.
- */
-#define CMD_HISTORY 1
-
-/*
- * HILITE_SEARCH is 1 if you wish to have search targets to be
- * displayed in standout mode.
- */
-#define HILITE_SEARCH 1
-
-/*
- * EDITOR is 1 if you wish to allow editor invocation (the "v" command).
- * (This is possible only if your system supplies the system() function.)
- * EDIT_PGM is the name of the (default) editor to be invoked.
- */
-#define EDITOR (!SECURE)
-#define EDIT_PGM "edit"
-
-/*
- * TAGS is 1 if you wish to support tag files.
- */
-#define TAGS (!SECURE)
-
-/*
- * USERFILE is 1 if you wish to allow a .less file to specify
- * user-defined key bindings.
- */
-#define USERFILE (!SECURE)
-
-/*
- * GLOB is 1 if you wish to have shell metacharacters expanded in filenames.
- * This will generally work if your system provides the "popen" function
- * and the "echo" shell command.
- */
-#define GLOB 0
-
-/*
- * PIPEC is 1 if you wish to have the "|" command
- * which allows the user to pipe data into a shell command.
- */
-#define PIPEC 1
-
-/*
- * LOGFILE is 1 if you wish to allow the -l option (to create log files).
- */
-#define LOGFILE (!SECURE)
-
-/*
- * GNU_OPTIONS is 1 if you wish to support the GNU-style command
- * line options --help and --version.
- */
-#define GNU_OPTIONS 1
-
-/*
- * ONLY_RETURN is 1 if you want RETURN to be the only input which
- * will continue past an error message.
- * Otherwise, any key will continue past an error message.
- */
-#define ONLY_RETURN 0
-
-/*
- * LESSKEYFILE is the filename of the default lesskey output file
- * (in the HOME directory).
- * LESSKEYFILE_SYS is the filename of the system-wide lesskey output file.
- * DEF_LESSKEYINFILE is the filename of the default lesskey input
- * (in the HOME directory).
- * LESSHISTFILE is the filename of the history file
- * (in the HOME directory).
- */
-#define LESSKEYFILE "_less"
-#define LESSKEYFILE_SYS "c:\\_sysless"
-#define DEF_LESSKEYINFILE "_lesskey"
-#define LESSHISTFILE "_lesshst"
-
-
-/* Settings always true for Windows systems. */
-
-#define MSDOS_COMPILER WIN32C
-
-/*
- * Pathname separator character.
- */
-#define PATHNAME_SEP "\\"
-
-/*
- * HAVE_SYS_TYPES_H is 1 if your system has <sys/types.h>.
- */
-#define HAVE_SYS_TYPES_H 1
-
-/*
- * Define if you have the <sgstat.h> header file.
- */
-#define HAVE_SGSTAT_H 0
-
-/*
- * HAVE_PERROR is 1 if your system has the perror() call.
- * (Actually, if it has sys_errlist, sys_nerr and errno.)
- */
-#define HAVE_PERROR 1
-
-/*
- * HAVE_TIME is 1 if your system has the time() call.
- */
-#define HAVE_TIME 1
-
-/*
- * HAVE_SHELL is 1 if your system supports a SHELL command interpreter.
- */
-#define HAVE_SHELL 0
-
-/*
- * Default shell metacharacters and meta-escape character.
- */
-#define DEF_METACHARS "; *?\t\n'\"()<>|&"
-#define DEF_METAESCAPE ""
-
-/*
- * HAVE_DUP is 1 if your system has the dup() call.
- */
-#define HAVE_DUP 1
-
-/*
- * Sizes of various buffers.
- */
-#define CMDBUF_SIZE 512 /* Buffer for multichar commands */
-#define UNGOT_SIZE 100 /* Max chars to unget() */
-#define LINEBUF_SIZE 1024 /* Max size of line in input file */
-#define OUTBUF_SIZE 1024 /* Output buffer */
-#define PROMPT_SIZE 200 /* Max size of prompt string */
-#define TERMBUF_SIZE 2048 /* Termcap buffer for tgetent */
-#define TERMSBUF_SIZE 1024 /* Buffer to hold termcap strings */
-#define TAGLINE_SIZE 512 /* Max size of line in tags file */
-#define TABSTOP_MAX 32 /* Max number of custom tab stops */
-
-/* Define to `long' if <sys/types.h> doesn't define. */
-/* #define off_t long */
-
-/* Define if you need to in order for stat and other things to work. */
-/* #undef _POSIX_SOURCE */
-
-/* Define as the return type of signal handlers (int or void). */
-#define RETSIGTYPE void
-
-
-/*
- * Regular expression library.
- * Define exactly one of the following to be 1:
- * HAVE_POSIX_REGCOMP: POSIX regcomp() and regex.h
- * HAVE_RE_COMP: BSD re_comp()
- * HAVE_REGCMP: System V regcmp()
- * HAVE_V8_REGCOMP: Henry Spencer V8 regcomp() and regexp.h
- * NO_REGEX: pattern matching is supported, but without metacharacters.
- */
-/* #undef HAVE_POSIX_REGCOMP */
-/* #undef HAVE_RE_COMP */
-/* #undef HAVE_REGCMP */
-#define HAVE_V8_REGCOMP 1
-/* #undef NO_REGEX */
-#define HAVE_REGEXEC2 1
-
-/* Define HAVE_VOID if your compiler supports the "void" type. */
-#define HAVE_VOID 1
-
-/* Define HAVE_CONST if your compiler supports the "const" modifier. */
-#define HAVE_CONST 1
-
-/* Define HAVE_TIME_T if your system supports the "time_t" type. */
-#define HAVE_TIME_T 1
-
-/* Define HAVE_STRERROR if you have the strerror() function. */
-#define HAVE_STRERROR 1
-
-/* Define HAVE_FILENO if you have the fileno() macro. */
-#define HAVE_FILENO 1
-
-/* Define HAVE_ERRNO if you have the errno variable */
-/* Define MUST_DEFINE_ERRNO if you have errno but it is not define
- * in errno.h */
-#define HAVE_ERRNO 1
-#define MUST_DEFINE_ERRNO 1
-
-/* Define HAVE_SYS_ERRLIST if you have the sys_errlist[] variable */
-#define HAVE_SYS_ERRLIST 1
-
-/* Define HAVE_OSPEED if your termcap library has the ospeed variable */
-#define HAVE_OSPEED 0
-/* Define MUST_DEFINE_OSPEED if you have ospeed but it is not defined
- * in termcap.h. */
-#define MUST_DEFINE_OSPEED 0
-
-/* Define HAVE_LOCALE if you have locale.h and setlocale. */
-#define HAVE_LOCALE 0
-
-/* Define HAVE_TERMIOS_FUNCS if you have tcgetattr/tcsetattr */
-#define HAVE_TERMIOS_FUNCS 0
-
-/* Define HAVE_UPPER_LOWER if you have isupper, islower, toupper, tolower */
-#define HAVE_UPPER_LOWER 1
-
-/* Define if you have the _setjmp function. */
-#define HAVE__SETJMP 1
-
-/* Define if you have the memcpy function. */
-#define HAVE_MEMCPY 1
-
-/* Define if you have the popen function. */
-#define HAVE_POPEN 1
-
-/* Define if you have the sigsetmask function. */
-#define HAVE_SIGSETMASK 0
-
-/* Define if you have the sigprocmask function. */
-#define HAVE_SIGPROCMASK 0
-
-/* Define if you have the sigset_t type and sigemptyset macro */
-#define HAVE_SIGSET_T 0
-#define HAVE_SIGEMPTYSET 0
-
-/* Define if you have the stat function. */
-#define HAVE_STAT 1
-
-/* Define if you have the strchr function. */
-#define HAVE_STRCHR 1
-
-/* Define if you have the system function. */
-#define HAVE_SYSTEM 1
-
-/* Define if you have the snprintf function. */
-#define HAVE_SNPRINTF 0
-
-/* Define if you have the <ctype.h> header file. */
-#define HAVE_CTYPE_H 1
-
-/* Define if you have the <wctype.h> header file. */
-#define HAVE_WCTYPE_H 1
-
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 0
-
-/* Define if you have the <stdio.h> header file. */
-#define HAVE_STDIO_H 1
-
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define if you have the <stdlib> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 0
-
-/* Define if you have the <sys/ptem.h> header file. */
-#define HAVE_SYS_PTEM_H 0
-
-/* Define if you have the <sys/stream.h> header file. */
-#define HAVE_SYS_STREAM_H 0
-
-/* Define if you have the <termcap.h> header file. */
-#define HAVE_TERMCAP_H 0
-
-/* Define if you have the <termio.h> header file. */
-#define HAVE_TERMIO_H 0
-
-/* Define if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 0
-
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 0
-
-/* Define if you have the <values.h> header file. */
-#ifdef _MSC_VER
-#define HAVE_VALUES_H 0
-#else
-#define HAVE_VALUES_H 1
-#endif
-
-#define popen _popen
-#define pclose _pclose
diff --git a/contrib/less/edit.c b/contrib/less/edit.c
deleted file mode 100644
index e2e30f2..0000000
--- a/contrib/less/edit.c
+++ /dev/null
@@ -1,818 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-#include "less.h"
-#if HAVE_STAT
-#include <sys/stat.h>
-#endif
-
-public int fd0 = 0;
-
-extern int new_file;
-extern int errmsgs;
-extern int cbufs;
-extern char *every_first_cmd;
-extern int any_display;
-extern int force_open;
-extern int is_tty;
-extern int sigs;
-extern IFILE curr_ifile;
-extern IFILE old_ifile;
-extern struct scrpos initial_scrpos;
-extern void constant *ml_examine;
-#if SPACES_IN_FILENAMES
-extern char openquote;
-extern char closequote;
-#endif
-
-#if LOGFILE
-extern int logfile;
-extern int force_logfile;
-extern char *namelogfile;
-#endif
-
-#if HAVE_STAT_INO
-public dev_t curr_dev;
-public ino_t curr_ino;
-#endif
-
-char *curr_altfilename = NULL;
-static void *curr_altpipe;
-
-
-/*
- * Textlist functions deal with a list of words separated by spaces.
- * init_textlist sets up a textlist structure.
- * forw_textlist uses that structure to iterate thru the list of
- * words, returning each one as a standard null-terminated string.
- * back_textlist does the same, but runs thru the list backwards.
- */
- public void
-init_textlist(tlist, str)
- struct textlist *tlist;
- char *str;
-{
- char *s;
-#if SPACES_IN_FILENAMES
- int meta_quoted = 0;
- int delim_quoted = 0;
- char *esc = get_meta_escape();
- int esclen = strlen(esc);
-#endif
-
- tlist->string = skipsp(str);
- tlist->endstring = tlist->string + strlen(tlist->string);
- for (s = str; s < tlist->endstring; s++)
- {
-#if SPACES_IN_FILENAMES
- if (meta_quoted)
- {
- meta_quoted = 0;
- } else if (esclen > 0 && s + esclen < tlist->endstring &&
- strncmp(s, esc, esclen) == 0)
- {
- meta_quoted = 1;
- s += esclen - 1;
- } else if (delim_quoted)
- {
- if (*s == closequote)
- delim_quoted = 0;
- } else /* (!delim_quoted) */
- {
- if (*s == openquote)
- delim_quoted = 1;
- else if (*s == ' ')
- *s = '\0';
- }
-#else
- if (*s == ' ')
- *s = '\0';
-#endif
- }
-}
-
- public char *
-forw_textlist(tlist, prev)
- struct textlist *tlist;
- char *prev;
-{
- char *s;
-
- /*
- * prev == NULL means return the first word in the list.
- * Otherwise, return the word after "prev".
- */
- if (prev == NULL)
- s = tlist->string;
- else
- s = prev + strlen(prev);
- if (s >= tlist->endstring)
- return (NULL);
- while (*s == '\0')
- s++;
- if (s >= tlist->endstring)
- return (NULL);
- return (s);
-}
-
- public char *
-back_textlist(tlist, prev)
- struct textlist *tlist;
- char *prev;
-{
- char *s;
-
- /*
- * prev == NULL means return the last word in the list.
- * Otherwise, return the word before "prev".
- */
- if (prev == NULL)
- s = tlist->endstring;
- else if (prev <= tlist->string)
- return (NULL);
- else
- s = prev - 1;
- while (*s == '\0')
- s--;
- if (s <= tlist->string)
- return (NULL);
- while (s[-1] != '\0' && s > tlist->string)
- s--;
- return (s);
-}
-
-/*
- * Close the current input file.
- */
- static void
-close_file()
-{
- struct scrpos scrpos;
-
- if (curr_ifile == NULL_IFILE)
- return;
-
- /*
- * Save the current position so that we can return to
- * the same position if we edit this file again.
- */
- get_scrpos(&scrpos);
- if (scrpos.pos != NULL_POSITION)
- {
- store_pos(curr_ifile, &scrpos);
- lastmark();
- }
- /*
- * Close the file descriptor, unless it is a pipe.
- */
- ch_close();
- /*
- * If we opened a file using an alternate name,
- * do special stuff to close it.
- */
- if (curr_altfilename != NULL)
- {
- close_altfile(curr_altfilename, get_filename(curr_ifile),
- curr_altpipe);
- free(curr_altfilename);
- curr_altfilename = NULL;
- }
- curr_ifile = NULL_IFILE;
-#if HAVE_STAT_INO
- curr_ino = curr_dev = 0;
-#endif
-}
-
-/*
- * Edit a new file (given its name).
- * Filename == "-" means standard input.
- * Filename == NULL means just close the current file.
- */
- public int
-edit(filename)
- char *filename;
-{
- if (filename == NULL)
- return (edit_ifile(NULL_IFILE));
- return (edit_ifile(get_ifile(filename, curr_ifile)));
-}
-
-/*
- * Edit a new file (given its IFILE).
- * ifile == NULL means just close the current file.
- */
- public int
-edit_ifile(ifile)
- IFILE ifile;
-{
- int f;
- int answer;
- int no_display;
- int chflags;
- char *filename;
- char *open_filename;
- char *qopen_filename;
- char *alt_filename;
- void *alt_pipe;
- IFILE was_curr_ifile;
- PARG parg;
-
- if (ifile == curr_ifile)
- {
- /*
- * Already have the correct file open.
- */
- return (0);
- }
-
- /*
- * We must close the currently open file now.
- * This is necessary to make the open_altfile/close_altfile pairs
- * nest properly (or rather to avoid nesting at all).
- * {{ Some stupid implementations of popen() mess up if you do:
- * fA = popen("A"); fB = popen("B"); pclose(fA); pclose(fB); }}
- */
-#if LOGFILE
- end_logfile();
-#endif
- was_curr_ifile = save_curr_ifile();
- if (curr_ifile != NULL_IFILE)
- {
- chflags = ch_getflags();
- close_file();
- if ((chflags & CH_HELPFILE) && held_ifile(was_curr_ifile) <= 1)
- {
- /*
- * Don't keep the help file in the ifile list.
- */
- del_ifile(was_curr_ifile);
- was_curr_ifile = old_ifile;
- }
- }
-
- if (ifile == NULL_IFILE)
- {
- /*
- * No new file to open.
- * (Don't set old_ifile, because if you call edit_ifile(NULL),
- * you're supposed to have saved curr_ifile yourself,
- * and you'll restore it if necessary.)
- */
- unsave_ifile(was_curr_ifile);
- return (0);
- }
-
- filename = save(get_filename(ifile));
- /*
- * See if LESSOPEN specifies an "alternate" file to open.
- */
- alt_pipe = NULL;
- alt_filename = open_altfile(filename, &f, &alt_pipe);
- open_filename = (alt_filename != NULL) ? alt_filename : filename;
- qopen_filename = shell_unquote(open_filename);
-
- chflags = 0;
- if (alt_pipe != NULL)
- {
- /*
- * The alternate "file" is actually a pipe.
- * f has already been set to the file descriptor of the pipe
- * in the call to open_altfile above.
- * Keep the file descriptor open because it was opened
- * via popen(), and pclose() wants to close it.
- */
- chflags |= CH_POPENED;
- } else if (strcmp(open_filename, "-") == 0)
- {
- /*
- * Use standard input.
- * Keep the file descriptor open because we can't reopen it.
- */
- f = fd0;
- chflags |= CH_KEEPOPEN;
- /*
- * Must switch stdin to BINARY mode.
- */
- SET_BINARY(f);
-#if MSDOS_COMPILER==DJGPPC
- /*
- * Setting stdin to binary by default causes
- * Ctrl-C to not raise SIGINT. We must undo
- * that side-effect.
- */
- __djgpp_set_ctrl_c(1);
-#endif
- } else if (strcmp(open_filename, FAKE_HELPFILE) == 0)
- {
- f = -1;
- chflags |= CH_HELPFILE;
- } else if ((parg.p_string = bad_file(open_filename)) != NULL)
- {
- /*
- * It looks like a bad file. Don't try to open it.
- */
- error("%s", &parg);
- free(parg.p_string);
- err1:
- if (alt_filename != NULL)
- {
- close_altfile(alt_filename, filename, alt_pipe);
- free(alt_filename);
- }
- del_ifile(ifile);
- free(qopen_filename);
- free(filename);
- /*
- * Re-open the current file.
- */
- if (was_curr_ifile == ifile)
- {
- /*
- * Whoops. The "current" ifile is the one we just deleted.
- * Just give up.
- */
- quit(QUIT_ERROR);
- }
- reedit_ifile(was_curr_ifile);
- return (1);
- } else if ((f = open(qopen_filename, OPEN_READ)) < 0)
- {
- /*
- * Got an error trying to open it.
- */
- parg.p_string = errno_message(filename);
- error("%s", &parg);
- free(parg.p_string);
- goto err1;
- } else
- {
- chflags |= CH_CANSEEK;
- if (!force_open && !opened(ifile) && bin_file(f))
- {
- /*
- * Looks like a binary file.
- * Ask user if we should proceed.
- */
- parg.p_string = filename;
- answer = query("\"%s\" may be a binary file. See it anyway? ",
- &parg);
- if (answer != 'y' && answer != 'Y')
- {
- close(f);
- goto err1;
- }
- }
- }
-
- /*
- * Get the new ifile.
- * Get the saved position for the file.
- */
- if (was_curr_ifile != NULL_IFILE)
- {
- old_ifile = was_curr_ifile;
- unsave_ifile(was_curr_ifile);
- }
- curr_ifile = ifile;
- curr_altfilename = alt_filename;
- curr_altpipe = alt_pipe;
- set_open(curr_ifile); /* File has been opened */
- get_pos(curr_ifile, &initial_scrpos);
- new_file = TRUE;
- ch_init(f, chflags);
-
- if (!(chflags & CH_HELPFILE))
- {
-#if LOGFILE
- if (namelogfile != NULL && is_tty)
- use_logfile(namelogfile);
-#endif
-#if HAVE_STAT_INO
- /* Remember the i-number and device of the opened file. */
- {
- struct stat statbuf;
- int r = stat(qopen_filename, &statbuf);
- if (r == 0)
- {
- curr_ino = statbuf.st_ino;
- curr_dev = statbuf.st_dev;
- }
- }
-#endif
- if (every_first_cmd != NULL)
- ungetsc(every_first_cmd);
- }
-
- free(qopen_filename);
- no_display = !any_display;
- flush();
- any_display = TRUE;
-
- if (is_tty)
- {
- /*
- * Output is to a real tty.
- */
-
- /*
- * Indicate there is nothing displayed yet.
- */
- pos_clear();
- clr_linenum();
-#if HILITE_SEARCH
- clr_hilite();
-#endif
- cmd_addhist(ml_examine, filename);
- if (no_display && errmsgs > 0)
- {
- /*
- * We displayed some messages on error output
- * (file descriptor 2; see error() function).
- * Before erasing the screen contents,
- * display the file name and wait for a keystroke.
- */
- parg.p_string = filename;
- error("%s", &parg);
- }
- }
- free(filename);
- return (0);
-}
-
-/*
- * Edit a space-separated list of files.
- * For each filename in the list, enter it into the ifile list.
- * Then edit the first one.
- */
- public int
-edit_list(filelist)
- char *filelist;
-{
- IFILE save_ifile;
- char *good_filename;
- char *filename;
- char *gfilelist;
- char *gfilename;
- struct textlist tl_files;
- struct textlist tl_gfiles;
-
- save_ifile = save_curr_ifile();
- good_filename = NULL;
-
- /*
- * Run thru each filename in the list.
- * Try to glob the filename.
- * If it doesn't expand, just try to open the filename.
- * If it does expand, try to open each name in that list.
- */
- init_textlist(&tl_files, filelist);
- filename = NULL;
- while ((filename = forw_textlist(&tl_files, filename)) != NULL)
- {
- gfilelist = lglob(filename);
- init_textlist(&tl_gfiles, gfilelist);
- gfilename = NULL;
- while ((gfilename = forw_textlist(&tl_gfiles, gfilename)) != NULL)
- {
- if (edit(gfilename) == 0 && good_filename == NULL)
- good_filename = get_filename(curr_ifile);
- }
- free(gfilelist);
- }
- /*
- * Edit the first valid filename in the list.
- */
- if (good_filename == NULL)
- {
- unsave_ifile(save_ifile);
- return (1);
- }
- if (get_ifile(good_filename, curr_ifile) == curr_ifile)
- {
- /*
- * Trying to edit the current file; don't reopen it.
- */
- unsave_ifile(save_ifile);
- return (0);
- }
- reedit_ifile(save_ifile);
- return (edit(good_filename));
-}
-
-/*
- * Edit the first file in the command line (ifile) list.
- */
- public int
-edit_first()
-{
- curr_ifile = NULL_IFILE;
- return (edit_next(1));
-}
-
-/*
- * Edit the last file in the command line (ifile) list.
- */
- public int
-edit_last()
-{
- curr_ifile = NULL_IFILE;
- return (edit_prev(1));
-}
-
-
-/*
- * Edit the n-th next or previous file in the command line (ifile) list.
- */
- static int
-edit_istep(h, n, dir)
- IFILE h;
- int n;
- int dir;
-{
- IFILE next;
-
- /*
- * Skip n filenames, then try to edit each filename.
- */
- for (;;)
- {
- next = (dir > 0) ? next_ifile(h) : prev_ifile(h);
- if (--n < 0)
- {
- if (edit_ifile(h) == 0)
- break;
- }
- if (next == NULL_IFILE)
- {
- /*
- * Reached end of the ifile list.
- */
- return (1);
- }
- if (ABORT_SIGS())
- {
- /*
- * Interrupt breaks out, if we're in a long
- * list of files that can't be opened.
- */
- return (1);
- }
- h = next;
- }
- /*
- * Found a file that we can edit.
- */
- return (0);
-}
-
- static int
-edit_inext(h, n)
- IFILE h;
- int n;
-{
- return (edit_istep(h, n, +1));
-}
-
- public int
-edit_next(n)
- int n;
-{
- return edit_istep(curr_ifile, n, +1);
-}
-
- static int
-edit_iprev(h, n)
- IFILE h;
- int n;
-{
- return (edit_istep(h, n, -1));
-}
-
- public int
-edit_prev(n)
- int n;
-{
- return edit_istep(curr_ifile, n, -1);
-}
-
-/*
- * Edit a specific file in the command line (ifile) list.
- */
- public int
-edit_index(n)
- int n;
-{
- IFILE h;
-
- h = NULL_IFILE;
- do
- {
- if ((h = next_ifile(h)) == NULL_IFILE)
- {
- /*
- * Reached end of the list without finding it.
- */
- return (1);
- }
- } while (get_index(h) != n);
-
- return (edit_ifile(h));
-}
-
- public IFILE
-save_curr_ifile()
-{
- if (curr_ifile != NULL_IFILE)
- hold_ifile(curr_ifile, 1);
- return (curr_ifile);
-}
-
- public void
-unsave_ifile(save_ifile)
- IFILE save_ifile;
-{
- if (save_ifile != NULL_IFILE)
- hold_ifile(save_ifile, -1);
-}
-
-/*
- * Reedit the ifile which was previously open.
- */
- public void
-reedit_ifile(save_ifile)
- IFILE save_ifile;
-{
- IFILE next;
- IFILE prev;
-
- /*
- * Try to reopen the ifile.
- * Note that opening it may fail (maybe the file was removed),
- * in which case the ifile will be deleted from the list.
- * So save the next and prev ifiles first.
- */
- unsave_ifile(save_ifile);
- next = next_ifile(save_ifile);
- prev = prev_ifile(save_ifile);
- if (edit_ifile(save_ifile) == 0)
- return;
- /*
- * If can't reopen it, open the next input file in the list.
- */
- if (next != NULL_IFILE && edit_inext(next, 0) == 0)
- return;
- /*
- * If can't open THAT one, open the previous input file in the list.
- */
- if (prev != NULL_IFILE && edit_iprev(prev, 0) == 0)
- return;
- /*
- * If can't even open that, we're stuck. Just quit.
- */
- quit(QUIT_ERROR);
-}
-
- public void
-reopen_curr_ifile()
-{
- IFILE save_ifile = save_curr_ifile();
- close_file();
- reedit_ifile(save_ifile);
-}
-
-/*
- * Edit standard input.
- */
- public int
-edit_stdin()
-{
- if (isatty(fd0))
- {
- error("Missing filename (\"less --help\" for help)", NULL_PARG);
- quit(QUIT_OK);
- }
- return (edit("-"));
-}
-
-/*
- * Copy a file directly to standard output.
- * Used if standard output is not a tty.
- */
- public void
-cat_file()
-{
- register int c;
-
- while ((c = ch_forw_get()) != EOI)
- putchr(c);
- flush();
-}
-
-#if LOGFILE
-
-/*
- * If the user asked for a log file and our input file
- * is standard input, create the log file.
- * We take care not to blindly overwrite an existing file.
- */
- public void
-use_logfile(filename)
- char *filename;
-{
- register int exists;
- register int answer;
- PARG parg;
-
- if (ch_getflags() & CH_CANSEEK)
- /*
- * Can't currently use a log file on a file that can seek.
- */
- return;
-
- /*
- * {{ We could use access() here. }}
- */
- filename = shell_unquote(filename);
- exists = open(filename, OPEN_READ);
- close(exists);
- exists = (exists >= 0);
-
- /*
- * Decide whether to overwrite the log file or append to it.
- * If it doesn't exist we "overwrite" it.
- */
- if (!exists || force_logfile)
- {
- /*
- * Overwrite (or create) the log file.
- */
- answer = 'O';
- } else
- {
- /*
- * Ask user what to do.
- */
- parg.p_string = filename;
- answer = query("Warning: \"%s\" exists; Overwrite, Append or Don't log? ", &parg);
- }
-
-loop:
- switch (answer)
- {
- case 'O': case 'o':
- /*
- * Overwrite: create the file.
- */
- logfile = creat(filename, 0644);
- break;
- case 'A': case 'a':
- /*
- * Append: open the file and seek to the end.
- */
- logfile = open(filename, OPEN_APPEND);
- if (lseek(logfile, (off_t)0, SEEK_END) == BAD_LSEEK)
- {
- close(logfile);
- logfile = -1;
- }
- break;
- case 'D': case 'd':
- /*
- * Don't do anything.
- */
- free(filename);
- return;
- case 'q':
- quit(QUIT_OK);
- /*NOTREACHED*/
- default:
- /*
- * Eh?
- */
- answer = query("Overwrite, Append, or Don't log? (Type \"O\", \"A\", \"D\" or \"q\") ", NULL_PARG);
- goto loop;
- }
-
- if (logfile < 0)
- {
- /*
- * Error in opening logfile.
- */
- parg.p_string = filename;
- error("Cannot write to \"%s\"", &parg);
- free(filename);
- return;
- }
- free(filename);
- SET_BINARY(logfile);
-}
-
-#endif
diff --git a/contrib/less/filename.c b/contrib/less/filename.c
deleted file mode 100644
index aa45b76..0000000
--- a/contrib/less/filename.c
+++ /dev/null
@@ -1,1048 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines to mess around with filenames (and files).
- * Much of this is very OS dependent.
- */
-
-#include "less.h"
-#include "lglob.h"
-#if MSDOS_COMPILER
-#include <dos.h>
-#if MSDOS_COMPILER==WIN32C && !defined(_MSC_VER)
-#include <dir.h>
-#endif
-#if MSDOS_COMPILER==DJGPPC
-#include <glob.h>
-#include <dir.h>
-#define _MAX_PATH PATH_MAX
-#endif
-#endif
-#ifdef _OSK
-#include <rbf.h>
-#ifndef _OSK_MWC32
-#include <modes.h>
-#endif
-#endif
-#if OS2
-#include <signal.h>
-#endif
-
-#if HAVE_STAT
-#include <sys/stat.h>
-#ifndef S_ISDIR
-#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-#endif
-#ifndef S_ISREG
-#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
-#endif
-#endif
-
-
-extern int force_open;
-extern int secure;
-extern int use_lessopen;
-extern int ctldisp;
-extern IFILE curr_ifile;
-extern IFILE old_ifile;
-#if SPACES_IN_FILENAMES
-extern char openquote;
-extern char closequote;
-#endif
-
-/*
- * Remove quotes around a filename.
- */
- public char *
-shell_unquote(str)
- char *str;
-{
- char *name;
- char *p;
-
- name = p = (char *) ecalloc(strlen(str)+1, sizeof(char));
- if (*str == openquote)
- {
- str++;
- while (*str != '\0')
- {
- if (*str == closequote)
- {
- if (str[1] != closequote)
- break;
- str++;
- }
- *p++ = *str++;
- }
- } else
- {
- char *esc = get_meta_escape();
- int esclen = strlen(esc);
- while (*str != '\0')
- {
- if (esclen > 0 && strncmp(str, esc, esclen) == 0)
- str += esclen;
- *p++ = *str++;
- }
- }
- *p = '\0';
- return (name);
-}
-
-/*
- * Get the shell's escape character.
- */
- public char *
-get_meta_escape()
-{
- char *s;
-
- s = lgetenv("LESSMETAESCAPE");
- if (s == NULL)
- s = DEF_METAESCAPE;
- return (s);
-}
-
-/*
- * Get the characters which the shell considers to be "metacharacters".
- */
- static char *
-metachars()
-{
- static char *mchars = NULL;
-
- if (mchars == NULL)
- {
- mchars = lgetenv("LESSMETACHARS");
- if (mchars == NULL)
- mchars = DEF_METACHARS;
- }
- return (mchars);
-}
-
-/*
- * Is this a shell metacharacter?
- */
- static int
-metachar(c)
- char c;
-{
- return (strchr(metachars(), c) != NULL);
-}
-
-/*
- * Insert a backslash before each metacharacter in a string.
- */
- public char *
-shell_quote(s)
- char *s;
-{
- char *p;
- char *newstr;
- int len;
- char *esc = get_meta_escape();
- int esclen = strlen(esc);
- int use_quotes = 0;
- int have_quotes = 0;
-
- /*
- * Determine how big a string we need to allocate.
- */
- len = 1; /* Trailing null byte */
- for (p = s; *p != '\0'; p++)
- {
- len++;
- if (*p == openquote || *p == closequote)
- have_quotes = 1;
- if (metachar(*p))
- {
- if (esclen == 0)
- {
- /*
- * We've got a metachar, but this shell
- * doesn't support escape chars. Use quotes.
- */
- use_quotes = 1;
- } else
- {
- /*
- * Allow space for the escape char.
- */
- len += esclen;
- }
- }
- }
- if (use_quotes)
- {
- if (have_quotes)
- /*
- * We can't quote a string that contains quotes.
- */
- return (NULL);
- len = strlen(s) + 3;
- }
- /*
- * Allocate and construct the new string.
- */
- newstr = p = (char *) ecalloc(len, sizeof(char));
- if (use_quotes)
- {
- SNPRINTF3(newstr, len, "%c%s%c", openquote, s, closequote);
- } else
- {
- while (*s != '\0')
- {
- if (metachar(*s))
- {
- /*
- * Add the escape char.
- */
- strcpy(p, esc);
- p += esclen;
- }
- *p++ = *s++;
- }
- *p = '\0';
- }
- return (newstr);
-}
-
-/*
- * Return a pathname that points to a specified file in a specified directory.
- * Return NULL if the file does not exist in the directory.
- */
- static char *
-dirfile(dirname, filename)
- char *dirname;
- char *filename;
-{
- char *pathname;
- char *qpathname;
- int len;
- int f;
-
- if (dirname == NULL || *dirname == '\0')
- return (NULL);
- /*
- * Construct the full pathname.
- */
- len= strlen(dirname) + strlen(filename) + 2;
- pathname = (char *) calloc(len, sizeof(char));
- if (pathname == NULL)
- return (NULL);
- SNPRINTF3(pathname, len, "%s%s%s", dirname, PATHNAME_SEP, filename);
- /*
- * Make sure the file exists.
- */
- qpathname = shell_unquote(pathname);
- f = open(qpathname, OPEN_READ);
- if (f < 0)
- {
- free(pathname);
- pathname = NULL;
- } else
- {
- close(f);
- }
- free(qpathname);
- return (pathname);
-}
-
-/*
- * Return the full pathname of the given file in the "home directory".
- */
- public char *
-homefile(filename)
- char *filename;
-{
- register char *pathname;
-
- /*
- * Try $HOME/filename.
- */
- pathname = dirfile(lgetenv("HOME"), filename);
- if (pathname != NULL)
- return (pathname);
-#if OS2
- /*
- * Try $INIT/filename.
- */
- pathname = dirfile(lgetenv("INIT"), filename);
- if (pathname != NULL)
- return (pathname);
-#endif
-#if MSDOS_COMPILER || OS2
- /*
- * Look for the file anywhere on search path.
- */
- pathname = (char *) calloc(_MAX_PATH, sizeof(char));
-#if MSDOS_COMPILER==DJGPPC
- {
- char *res = searchpath(filename);
- if (res == 0)
- *pathname = '\0';
- else
- strcpy(pathname, res);
- }
-#else
- _searchenv(filename, "PATH", pathname);
-#endif
- if (*pathname != '\0')
- return (pathname);
- free(pathname);
-#endif
- return (NULL);
-}
-
-/*
- * Expand a string, substituting any "%" with the current filename,
- * and any "#" with the previous filename.
- * But a string of N "%"s is just replaced with N-1 "%"s.
- * Likewise for a string of N "#"s.
- * {{ This is a lot of work just to support % and #. }}
- */
- public char *
-fexpand(s)
- char *s;
-{
- register char *fr, *to;
- register int n;
- register char *e;
- IFILE ifile;
-
-#define fchar_ifile(c) \
- ((c) == '%' ? curr_ifile : \
- (c) == '#' ? old_ifile : NULL_IFILE)
-
- /*
- * Make one pass to see how big a buffer we
- * need to allocate for the expanded string.
- */
- n = 0;
- for (fr = s; *fr != '\0'; fr++)
- {
- switch (*fr)
- {
- case '%':
- case '#':
- if (fr > s && fr[-1] == *fr)
- {
- /*
- * Second (or later) char in a string
- * of identical chars. Treat as normal.
- */
- n++;
- } else if (fr[1] != *fr)
- {
- /*
- * Single char (not repeated). Treat specially.
- */
- ifile = fchar_ifile(*fr);
- if (ifile == NULL_IFILE)
- n++;
- else
- n += strlen(get_filename(ifile));
- }
- /*
- * Else it is the first char in a string of
- * identical chars. Just discard it.
- */
- break;
- default:
- n++;
- break;
- }
- }
-
- e = (char *) ecalloc(n+1, sizeof(char));
-
- /*
- * Now copy the string, expanding any "%" or "#".
- */
- to = e;
- for (fr = s; *fr != '\0'; fr++)
- {
- switch (*fr)
- {
- case '%':
- case '#':
- if (fr > s && fr[-1] == *fr)
- {
- *to++ = *fr;
- } else if (fr[1] != *fr)
- {
- ifile = fchar_ifile(*fr);
- if (ifile == NULL_IFILE)
- *to++ = *fr;
- else
- {
- strcpy(to, get_filename(ifile));
- to += strlen(to);
- }
- }
- break;
- default:
- *to++ = *fr;
- break;
- }
- }
- *to = '\0';
- return (e);
-}
-
-#if TAB_COMPLETE_FILENAME
-
-/*
- * Return a blank-separated list of filenames which "complete"
- * the given string.
- */
- public char *
-fcomplete(s)
- char *s;
-{
- char *fpat;
- char *qs;
-
- if (secure)
- return (NULL);
- /*
- * Complete the filename "s" by globbing "s*".
- */
-#if MSDOS_COMPILER && (MSDOS_COMPILER == MSOFTC || MSDOS_COMPILER == BORLANDC)
- /*
- * But in DOS, we have to glob "s*.*".
- * But if the final component of the filename already has
- * a dot in it, just do "s*".
- * (Thus, "FILE" is globbed as "FILE*.*",
- * but "FILE.A" is globbed as "FILE.A*").
- */
- {
- char *slash;
- int len;
- for (slash = s+strlen(s)-1; slash > s; slash--)
- if (*slash == *PATHNAME_SEP || *slash == '/')
- break;
- len = strlen(s) + 4;
- fpat = (char *) ecalloc(len, sizeof(char));
- if (strchr(slash, '.') == NULL)
- SNPRINTF1(fpat, len, "%s*.*", s);
- else
- SNPRINTF1(fpat, len, "%s*", s);
- }
-#else
- {
- int len = strlen(s) + 2;
- fpat = (char *) ecalloc(len, sizeof(char));
- SNPRINTF1(fpat, len, "%s*", s);
- }
-#endif
- qs = lglob(fpat);
- s = shell_unquote(qs);
- if (strcmp(s,fpat) == 0)
- {
- /*
- * The filename didn't expand.
- */
- free(qs);
- qs = NULL;
- }
- free(s);
- free(fpat);
- return (qs);
-}
-#endif
-
-/*
- * Try to determine if a file is "binary".
- * This is just a guess, and we need not try too hard to make it accurate.
- */
- public int
-bin_file(f)
- int f;
-{
- int i;
- int n;
- int bin_count = 0;
- unsigned char data[256];
-
- if (!seekable(f))
- return (0);
- if (lseek(f, (off_t)0, SEEK_SET) == BAD_LSEEK)
- return (0);
- n = read(f, data, sizeof(data));
- for (i = 0; i < n; i++)
- {
- char c = data[i];
- if (ctldisp == OPT_ONPLUS && IS_CSI_START(c))
- {
- while (++i < n && is_ansi_middle(data[i]))
- continue;
- } else if (binary_char(c))
- bin_count++;
- }
- /*
- * Call it a binary file if there are more than 5 binary characters
- * in the first 256 bytes of the file.
- */
- return (bin_count > 5);
-}
-
-/*
- * Try to determine the size of a file by seeking to the end.
- */
- static POSITION
-seek_filesize(f)
- int f;
-{
- off_t spos;
-
- spos = lseek(f, (off_t)0, SEEK_END);
- if (spos == BAD_LSEEK)
- return (NULL_POSITION);
- return ((POSITION) spos);
-}
-
-/*
- * Read a string from a file.
- * Return a pointer to the string in memory.
- */
- static char *
-readfd(fd)
- FILE *fd;
-{
- int len;
- int ch;
- char *buf;
- char *p;
-
- /*
- * Make a guess about how many chars in the string
- * and allocate a buffer to hold it.
- */
- len = 100;
- buf = (char *) ecalloc(len, sizeof(char));
- for (p = buf; ; p++)
- {
- if ((ch = getc(fd)) == '\n' || ch == EOF)
- break;
- if (p - buf >= len-1)
- {
- /*
- * The string is too big to fit in the buffer we have.
- * Allocate a new buffer, twice as big.
- */
- len *= 2;
- *p = '\0';
- p = (char *) ecalloc(len, sizeof(char));
- strcpy(p, buf);
- free(buf);
- buf = p;
- p = buf + strlen(buf);
- }
- *p = ch;
- }
- *p = '\0';
- return (buf);
-}
-
-
-
-#if HAVE_POPEN
-
-FILE *popen();
-
-/*
- * Execute a shell command.
- * Return a pointer to a pipe connected to the shell command's standard output.
- */
- static FILE *
-shellcmd(cmd)
- char *cmd;
-{
- FILE *fd;
-
-#if HAVE_SHELL
- char *shell;
-
- shell = lgetenv("SHELL");
- if (shell != NULL && *shell != '\0')
- {
- char *scmd;
- char *esccmd;
-
- /*
- * Read the output of <$SHELL -c cmd>.
- * Escape any metacharacters in the command.
- */
- esccmd = shell_quote(cmd);
- if (esccmd == NULL)
- {
- fd = popen(cmd, "r");
- } else
- {
- int len = strlen(shell) + strlen(esccmd) + 5;
- scmd = (char *) ecalloc(len, sizeof(char));
- SNPRINTF3(scmd, len, "%s %s %s", shell, shell_coption(), esccmd);
- free(esccmd);
- fd = popen(scmd, "r");
- free(scmd);
- }
- } else
-#endif
- {
- fd = popen(cmd, "r");
- }
- /*
- * Redirection in `popen' might have messed with the
- * standard devices. Restore binary input mode.
- */
- SET_BINARY(0);
- return (fd);
-}
-
-#endif /* HAVE_POPEN */
-
-
-/*
- * Expand a filename, doing any system-specific metacharacter substitutions.
- */
- public char *
-lglob(filename)
- char *filename;
-{
- char *gfilename;
- char *ofilename;
-
- ofilename = fexpand(filename);
- if (secure)
- return (ofilename);
- filename = shell_unquote(ofilename);
-
-#ifdef DECL_GLOB_LIST
-{
- /*
- * The globbing function returns a list of names.
- */
- int length;
- char *p;
- char *qfilename;
- DECL_GLOB_LIST(list)
-
- GLOB_LIST(filename, list);
- if (GLOB_LIST_FAILED(list))
- {
- free(filename);
- return (ofilename);
- }
- length = 1; /* Room for trailing null byte */
- for (SCAN_GLOB_LIST(list, p))
- {
- INIT_GLOB_LIST(list, p);
- qfilename = shell_quote(p);
- if (qfilename != NULL)
- {
- length += strlen(qfilename) + 1;
- free(qfilename);
- }
- }
- gfilename = (char *) ecalloc(length, sizeof(char));
- for (SCAN_GLOB_LIST(list, p))
- {
- INIT_GLOB_LIST(list, p);
- qfilename = shell_quote(p);
- if (qfilename != NULL)
- {
- sprintf(gfilename + strlen(gfilename), "%s ", qfilename);
- free(qfilename);
- }
- }
- /*
- * Overwrite the final trailing space with a null terminator.
- */
- *--p = '\0';
- GLOB_LIST_DONE(list);
-}
-#else
-#ifdef DECL_GLOB_NAME
-{
- /*
- * The globbing function returns a single name, and
- * is called multiple times to walk thru all names.
- */
- register char *p;
- register int len;
- register int n;
- char *pathname;
- char *qpathname;
- DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle)
-
- GLOB_FIRST_NAME(filename, &fnd, handle);
- if (GLOB_FIRST_FAILED(handle))
- {
- free(filename);
- return (ofilename);
- }
-
- _splitpath(filename, drive, dir, fname, ext);
- len = 100;
- gfilename = (char *) ecalloc(len, sizeof(char));
- p = gfilename;
- do {
- n = strlen(drive) + strlen(dir) + strlen(fnd.GLOB_NAME) + 1;
- pathname = (char *) ecalloc(n, sizeof(char));
- SNPRINTF3(pathname, n, "%s%s%s", drive, dir, fnd.GLOB_NAME);
- qpathname = shell_quote(pathname);
- free(pathname);
- if (qpathname != NULL)
- {
- n = strlen(qpathname);
- while (p - gfilename + n + 2 >= len)
- {
- /*
- * No room in current buffer.
- * Allocate a bigger one.
- */
- len *= 2;
- *p = '\0';
- p = (char *) ecalloc(len, sizeof(char));
- strcpy(p, gfilename);
- free(gfilename);
- gfilename = p;
- p = gfilename + strlen(gfilename);
- }
- strcpy(p, qpathname);
- free(qpathname);
- p += n;
- *p++ = ' ';
- }
- } while (GLOB_NEXT_NAME(handle, &fnd) == 0);
-
- /*
- * Overwrite the final trailing space with a null terminator.
- */
- *--p = '\0';
- GLOB_NAME_DONE(handle);
-}
-#else
-#if HAVE_POPEN
-{
- /*
- * We get the shell to glob the filename for us by passing
- * an "echo" command to the shell and reading its output.
- */
- FILE *fd;
- char *s;
- char *lessecho;
- char *cmd;
- char *esc;
- int len;
-
- esc = get_meta_escape();
- if (strlen(esc) == 0)
- esc = "-";
- esc = shell_quote(esc);
- if (esc == NULL)
- {
- free(filename);
- return (ofilename);
- }
- lessecho = lgetenv("LESSECHO");
- if (lessecho == NULL || *lessecho == '\0')
- lessecho = "lessecho";
- /*
- * Invoke lessecho, and read its output (a globbed list of filenames).
- */
- len = strlen(lessecho) + strlen(ofilename) + (7*strlen(metachars())) + 24;
- cmd = (char *) ecalloc(len, sizeof(char));
- SNPRINTF4(cmd, len, "%s -p0x%x -d0x%x -e%s ", lessecho, openquote, closequote, esc);
- free(esc);
- for (s = metachars(); *s != '\0'; s++)
- sprintf(cmd + strlen(cmd), "-n0x%x ", *s);
- sprintf(cmd + strlen(cmd), "-- %s", ofilename);
- fd = shellcmd(cmd);
- free(cmd);
- if (fd == NULL)
- {
- /*
- * Cannot create the pipe.
- * Just return the original (fexpanded) filename.
- */
- free(filename);
- return (ofilename);
- }
- gfilename = readfd(fd);
- pclose(fd);
- if (*gfilename == '\0')
- {
- free(gfilename);
- free(filename);
- return (ofilename);
- }
-}
-#else
- /*
- * No globbing functions at all. Just use the fexpanded filename.
- */
- gfilename = save(filename);
-#endif
-#endif
-#endif
- free(filename);
- free(ofilename);
- return (gfilename);
-}
-
-/*
- * See if we should open a "replacement file"
- * instead of the file we're about to open.
- */
- public char *
-open_altfile(filename, pf, pfd)
- char *filename;
- int *pf;
- void **pfd;
-{
-#if !HAVE_POPEN
- return (NULL);
-#else
- char *lessopen;
- char *cmd;
- int len;
- FILE *fd;
-#if HAVE_FILENO
- int returnfd = 0;
-#endif
-
- if (!use_lessopen || secure)
- return (NULL);
- ch_ungetchar(-1);
- if ((lessopen = lgetenv("LESSOPEN")) == NULL)
- return (NULL);
- if (strcmp(filename, "-") == 0)
- return (NULL);
- if (*lessopen == '|')
- {
- /*
- * If LESSOPEN starts with a |, it indicates
- * a "pipe preprocessor".
- */
-#if HAVE_FILENO
- lessopen++;
- returnfd = 1;
-#else
- error("LESSOPEN pipe is not supported", NULL_PARG);
- return (NULL);
-#endif
- }
-
- len = strlen(lessopen) + strlen(filename) + 2;
- cmd = (char *) ecalloc(len, sizeof(char));
- SNPRINTF1(cmd, len, lessopen, filename);
- fd = shellcmd(cmd);
- free(cmd);
- if (fd == NULL)
- {
- /*
- * Cannot create the pipe.
- */
- return (NULL);
- }
-#if HAVE_FILENO
- if (returnfd)
- {
- int f;
- char c;
-
- /*
- * Read one char to see if the pipe will produce any data.
- * If it does, push the char back on the pipe.
- */
- f = fileno(fd);
- SET_BINARY(f);
- if (read(f, &c, 1) != 1)
- {
- /*
- * Pipe is empty. This means there is no alt file.
- */
- pclose(fd);
- return (NULL);
- }
- ch_ungetchar(c);
- *pfd = (void *) fd;
- *pf = f;
- return (save("-"));
- }
-#endif
- cmd = readfd(fd);
- pclose(fd);
- if (*cmd == '\0')
- /*
- * Pipe is empty. This means there is no alt file.
- */
- return (NULL);
- return (cmd);
-#endif /* HAVE_POPEN */
-}
-
-/*
- * Close a replacement file.
- */
- public void
-close_altfile(altfilename, filename, pipefd)
- char *altfilename;
- char *filename;
- void *pipefd;
-{
-#if HAVE_POPEN
- char *lessclose;
- FILE *fd;
- char *cmd;
- int len;
-
- if (secure)
- return;
- if (pipefd != NULL)
- {
-#if OS2
- /*
- * The pclose function of OS/2 emx sometimes fails.
- * Send SIGINT to the piped process before closing it.
- */
- kill(((FILE*)pipefd)->_pid, SIGINT);
-#endif
- pclose((FILE*) pipefd);
- }
- if ((lessclose = lgetenv("LESSCLOSE")) == NULL)
- return;
- len = strlen(lessclose) + strlen(filename) + strlen(altfilename) + 2;
- cmd = (char *) ecalloc(len, sizeof(char));
- SNPRINTF2(cmd, len, lessclose, filename, altfilename);
- fd = shellcmd(cmd);
- free(cmd);
- if (fd != NULL)
- pclose(fd);
-#endif
-}
-
-/*
- * Is the specified file a directory?
- */
- public int
-is_dir(filename)
- char *filename;
-{
- int isdir = 0;
-
- filename = shell_unquote(filename);
-#if HAVE_STAT
-{
- int r;
- struct stat statbuf;
-
- r = stat(filename, &statbuf);
- isdir = (r >= 0 && S_ISDIR(statbuf.st_mode));
-}
-#else
-#ifdef _OSK
-{
- register int f;
-
- f = open(filename, S_IREAD | S_IFDIR);
- if (f >= 0)
- close(f);
- isdir = (f >= 0);
-}
-#endif
-#endif
- free(filename);
- return (isdir);
-}
-
-/*
- * Returns NULL if the file can be opened and
- * is an ordinary file, otherwise an error message
- * (if it cannot be opened or is a directory, etc.)
- */
- public char *
-bad_file(filename)
- char *filename;
-{
- register char *m = NULL;
-
- filename = shell_unquote(filename);
- if (!force_open && is_dir(filename))
- {
- static char is_a_dir[] = " is a directory";
-
- m = (char *) ecalloc(strlen(filename) + sizeof(is_a_dir),
- sizeof(char));
- strcpy(m, filename);
- strcat(m, is_a_dir);
- } else
- {
-#if HAVE_STAT
- int r;
- struct stat statbuf;
-
- r = stat(filename, &statbuf);
- if (r < 0)
- {
- m = errno_message(filename);
- } else if (force_open)
- {
- m = NULL;
- } else if (!S_ISREG(statbuf.st_mode))
- {
- static char not_reg[] = " is not a regular file (use -f to see it)";
- m = (char *) ecalloc(strlen(filename) + sizeof(not_reg),
- sizeof(char));
- strcpy(m, filename);
- strcat(m, not_reg);
- }
-#endif
- }
- free(filename);
- return (m);
-}
-
-/*
- * Return the size of a file, as cheaply as possible.
- * In Unix, we can stat the file.
- */
- public POSITION
-filesize(f)
- int f;
-{
-#if HAVE_STAT
- struct stat statbuf;
-
- if (fstat(f, &statbuf) >= 0)
- return ((POSITION) statbuf.st_size);
-#else
-#ifdef _OSK
- long size;
-
- if ((size = (long) _gs_size(f)) >= 0)
- return ((POSITION) size);
-#endif
-#endif
- return (seek_filesize(f));
-}
-
-/*
- *
- */
- public char *
-shell_coption()
-{
- return ("-c");
-}
diff --git a/contrib/less/forwback.c b/contrib/less/forwback.c
deleted file mode 100644
index 7b5bb2d..0000000
--- a/contrib/less/forwback.c
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Primitives for displaying the file on the screen,
- * scrolling either forward or backward.
- */
-
-#include "less.h"
-#include "position.h"
-
-public int hit_eof; /* Keeps track of how many times we hit end of file */
-public int screen_trashed;
-public int squished;
-public int no_back_scroll = 0;
-public int forw_prompt;
-
-extern int sigs;
-extern int top_scroll;
-extern int quiet;
-extern int sc_width, sc_height;
-extern int plusoption;
-extern int forw_scroll;
-extern int back_scroll;
-extern int ignore_eoi;
-extern int clear_bg;
-extern int final_attr;
-extern int oldbot;
-#if TAGS
-extern char *tagoption;
-#endif
-
-/*
- * Sound the bell to indicate user is trying to move past end of file.
- */
- static void
-eof_bell()
-{
- if (quiet == NOT_QUIET)
- bell();
- else
- vbell();
-}
-
-/*
- * Check to see if the end of file is currently "displayed".
- */
- static void
-eof_check()
-{
- POSITION pos;
-
- if (ignore_eoi)
- return;
- if (ABORT_SIGS())
- return;
- /*
- * If the bottom line is empty, we are at EOF.
- * If the bottom line ends at the file length,
- * we must be just at EOF.
- */
- pos = position(BOTTOM_PLUS_ONE);
- if (pos == NULL_POSITION || pos == ch_length())
- hit_eof++;
-}
-
-/*
- * If the screen is "squished", repaint it.
- * "Squished" means the first displayed line is not at the top
- * of the screen; this can happen when we display a short file
- * for the first time.
- */
- public void
-squish_check()
-{
- if (!squished)
- return;
- squished = 0;
- repaint();
-}
-
-/*
- * Display n lines, scrolling forward,
- * starting at position pos in the input file.
- * "force" means display the n lines even if we hit end of file.
- * "only_last" means display only the last screenful if n > screen size.
- * "nblank" is the number of blank lines to draw before the first
- * real line. If nblank > 0, the pos must be NULL_POSITION.
- * The first real line after the blanks will start at ch_zero().
- */
- public void
-forw(n, pos, force, only_last, nblank)
- register int n;
- POSITION pos;
- int force;
- int only_last;
- int nblank;
-{
- int eof = 0;
- int nlines = 0;
- int do_repaint;
- static int first_time = 1;
-
- squish_check();
-
- /*
- * do_repaint tells us not to display anything till the end,
- * then just repaint the entire screen.
- * We repaint if we are supposed to display only the last
- * screenful and the request is for more than a screenful.
- * Also if the request exceeds the forward scroll limit
- * (but not if the request is for exactly a screenful, since
- * repainting itself involves scrolling forward a screenful).
- */
- do_repaint = (only_last && n > sc_height-1) ||
- (forw_scroll >= 0 && n > forw_scroll && n != sc_height-1);
-
- if (!do_repaint)
- {
- if (top_scroll && n >= sc_height - 1 && pos != ch_length())
- {
- /*
- * Start a new screen.
- * {{ This is not really desirable if we happen
- * to hit eof in the middle of this screen,
- * but we don't yet know if that will happen. }}
- */
- pos_clear();
- add_forw_pos(pos);
- force = 1;
- clear();
- home();
- }
-
- if (pos != position(BOTTOM_PLUS_ONE) || empty_screen())
- {
- /*
- * This is not contiguous with what is
- * currently displayed. Clear the screen image
- * (position table) and start a new screen.
- */
- pos_clear();
- add_forw_pos(pos);
- force = 1;
- if (top_scroll)
- {
- clear();
- home();
- } else if (!first_time)
- {
- putstr("...skipping...\n");
- }
- }
- }
-
- while (--n >= 0)
- {
- /*
- * Read the next line of input.
- */
- if (nblank > 0)
- {
- /*
- * Still drawing blanks; don't get a line
- * from the file yet.
- * If this is the last blank line, get ready to
- * read a line starting at ch_zero() next time.
- */
- if (--nblank == 0)
- pos = ch_zero();
- } else
- {
- /*
- * Get the next line from the file.
- */
- pos = forw_line(pos);
- if (pos == NULL_POSITION)
- {
- /*
- * End of file: stop here unless the top line
- * is still empty, or "force" is true.
- * Even if force is true, stop when the last
- * line in the file reaches the top of screen.
- */
- eof = 1;
- if (!force && position(TOP) != NULL_POSITION)
- break;
- if (!empty_lines(0, 0) &&
- !empty_lines(1, 1) &&
- empty_lines(2, sc_height-1))
- break;
- }
- }
- /*
- * Add the position of the next line to the position table.
- * Display the current line on the screen.
- */
- add_forw_pos(pos);
- nlines++;
- if (do_repaint)
- continue;
- /*
- * If this is the first screen displayed and
- * we hit an early EOF (i.e. before the requested
- * number of lines), we "squish" the display down
- * at the bottom of the screen.
- * But don't do this if a + option or a -t option
- * was given. These options can cause us to
- * start the display after the beginning of the file,
- * and it is not appropriate to squish in that case.
- */
- if (first_time && pos == NULL_POSITION && !top_scroll &&
-#if TAGS
- tagoption == NULL &&
-#endif
- !plusoption)
- {
- squished = 1;
- continue;
- }
- put_line();
-#if 0
- /* {{
- * Can't call clear_eol here. The cursor might be at end of line
- * on an ignaw terminal, so clear_eol would clear the last char
- * of the current line instead of all of the next line.
- * If we really need to do this on clear_bg terminals, we need
- * to find a better way.
- * }}
- */
- if (clear_bg && apply_at_specials(final_attr) != AT_NORMAL)
- {
- /*
- * Writing the last character on the last line
- * of the display may have scrolled the screen.
- * If we were in standout mode, clear_bg terminals
- * will fill the new line with the standout color.
- * Now we're in normal mode again, so clear the line.
- */
- clear_eol();
- }
-#endif
- forw_prompt = 1;
- }
-
- if (ignore_eoi)
- hit_eof = 0;
- else if (eof && !ABORT_SIGS())
- hit_eof++;
- else
- eof_check();
- if (nlines == 0)
- eof_bell();
- else if (do_repaint)
- repaint();
- first_time = 0;
- (void) currline(BOTTOM);
-}
-
-/*
- * Display n lines, scrolling backward.
- */
- public void
-back(n, pos, force, only_last)
- register int n;
- POSITION pos;
- int force;
- int only_last;
-{
- int nlines = 0;
- int do_repaint;
-
- squish_check();
- do_repaint = (n > get_back_scroll() || (only_last && n > sc_height-1));
- hit_eof = 0;
- while (--n >= 0)
- {
- /*
- * Get the previous line of input.
- */
- pos = back_line(pos);
- if (pos == NULL_POSITION)
- {
- /*
- * Beginning of file: stop here unless "force" is true.
- */
- if (!force)
- break;
- }
- /*
- * Add the position of the previous line to the position table.
- * Display the line on the screen.
- */
- add_back_pos(pos);
- nlines++;
- if (!do_repaint)
- {
- home();
- add_line();
- put_line();
- }
- }
-
- eof_check();
- if (nlines == 0)
- eof_bell();
- else if (do_repaint)
- repaint();
- else if (!oldbot)
- lower_left();
- (void) currline(BOTTOM);
-}
-
-/*
- * Display n more lines, forward.
- * Start just after the line currently displayed at the bottom of the screen.
- */
- public void
-forward(n, force, only_last)
- int n;
- int force;
- int only_last;
-{
- POSITION pos;
-
- if (get_quit_at_eof() && hit_eof && !(ch_getflags() & CH_HELPFILE))
- {
- /*
- * If the -e flag is set and we're trying to go
- * forward from end-of-file, go on to the next file.
- */
- if (edit_next(1))
- quit(QUIT_OK);
- return;
- }
-
- pos = position(BOTTOM_PLUS_ONE);
- if (pos == NULL_POSITION && (!force || empty_lines(2, sc_height-1)))
- {
- if (ignore_eoi)
- {
- /*
- * ignore_eoi is to support A_F_FOREVER.
- * Back up until there is a line at the bottom
- * of the screen.
- */
- if (empty_screen())
- pos = ch_zero();
- else
- {
- do
- {
- back(1, position(TOP), 1, 0);
- pos = position(BOTTOM_PLUS_ONE);
- } while (pos == NULL_POSITION);
- }
- } else
- {
- eof_bell();
- hit_eof++;
- return;
- }
- }
- forw(n, pos, force, only_last, 0);
-}
-
-/*
- * Display n more lines, backward.
- * Start just before the line currently displayed at the top of the screen.
- */
- public void
-backward(n, force, only_last)
- int n;
- int force;
- int only_last;
-{
- POSITION pos;
-
- pos = position(TOP);
- if (pos == NULL_POSITION && (!force || position(BOTTOM) == 0))
- {
- eof_bell();
- return;
- }
- back(n, pos, force, only_last);
-}
-
-/*
- * Get the backwards scroll limit.
- * Must call this function instead of just using the value of
- * back_scroll, because the default case depends on sc_height and
- * top_scroll, as well as back_scroll.
- */
- public int
-get_back_scroll()
-{
- if (no_back_scroll)
- return (0);
- if (back_scroll >= 0)
- return (back_scroll);
- if (top_scroll)
- return (sc_height - 2);
- return (10000); /* infinity */
-}
diff --git a/contrib/less/funcs.h b/contrib/less/funcs.h
deleted file mode 100644
index 649598e..0000000
--- a/contrib/less/funcs.h
+++ /dev/null
@@ -1,270 +0,0 @@
- public char * save ();
- public VOID_POINTER ecalloc ();
- public char * skipsp ();
- public int sprefix ();
- public void quit ();
- public void raw_mode ();
- public void scrsize ();
- public char * special_key_str ();
- public void get_term ();
- public void init ();
- public void deinit ();
- public void home ();
- public void add_line ();
- public void remove_top ();
- public void win32_scroll_up ();
- public void lower_left ();
- public void line_left ();
- public void check_winch ();
- public void goto_line ();
- public void vbell ();
- public void bell ();
- public void clear ();
- public void clear_eol ();
- public void clear_bot ();
- public void at_enter ();
- public void at_exit ();
- public void at_switch ();
- public int is_at_equiv ();
- public int apply_at_specials ();
- public void backspace ();
- public void putbs ();
- public char WIN32getch ();
- public void match_brac ();
- public void ch_ungetchar ();
- public void end_logfile ();
- public void sync_logfile ();
- public int ch_seek ();
- public int ch_end_seek ();
- public int ch_beg_seek ();
- public POSITION ch_length ();
- public POSITION ch_tell ();
- public int ch_forw_get ();
- public int ch_back_get ();
- public void ch_setbufspace ();
- public void ch_flush ();
- public int seekable ();
- public void ch_init ();
- public void ch_close ();
- public int ch_getflags ();
- public void ch_dump ();
- public void init_charset ();
- public int binary_char ();
- public int control_char ();
- public char * prchar ();
- public char * prutfchar ();
- public int utf_len ();
- public int is_utf8_well_formed ();
- public LWCHAR get_wchar ();
- public void put_wchar ();
- public LWCHAR step_char ();
- public int is_composing_char ();
- public int is_ubin_char ();
- public int is_wide_char ();
- public int is_combining_char ();
- public void cmd_reset ();
- public void clear_cmd ();
- public void cmd_putstr ();
- public int len_cmdbuf ();
- public void set_mlist ();
- public void cmd_addhist ();
- public void cmd_accept ();
- public int cmd_char ();
- public LINENUM cmd_int ();
- public char * get_cmdbuf ();
- public char * cmd_lastpattern ();
- public void init_cmdhist ();
- public void save_cmdhist ();
- public int in_mca ();
- public void dispversion ();
- public int getcc ();
- public void ungetcc ();
- public void ungetsc ();
- public void commands ();
- public void init_cmds ();
- public void add_fcmd_table ();
- public void add_ecmd_table ();
- public int fcmd_decode ();
- public int ecmd_decode ();
- public char * lgetenv ();
- public int lesskey ();
- public void add_hometable ();
- public int editchar ();
- public void init_textlist ();
- public char * forw_textlist ();
- public char * back_textlist ();
- public int edit ();
- public int edit_ifile ();
- public int edit_list ();
- public int edit_first ();
- public int edit_last ();
- public int edit_next ();
- public int edit_prev ();
- public int edit_index ();
- public IFILE save_curr_ifile ();
- public void unsave_ifile ();
- public void reedit_ifile ();
- public void reopen_curr_ifile ();
- public int edit_stdin ();
- public void cat_file ();
- public void use_logfile ();
- public char * shell_unquote ();
- public char * get_meta_escape ();
- public char * shell_quote ();
- public char * homefile ();
- public char * fexpand ();
- public char * fcomplete ();
- public int bin_file ();
- public char * lglob ();
- public char * open_altfile ();
- public void close_altfile ();
- public int is_dir ();
- public char * bad_file ();
- public POSITION filesize ();
- public char * shell_coption ();
- public void squish_check ();
- public void forw ();
- public void back ();
- public void forward ();
- public void backward ();
- public int get_back_scroll ();
- public void del_ifile ();
- public IFILE next_ifile ();
- public IFILE prev_ifile ();
- public IFILE getoff_ifile ();
- public int nifile ();
- public IFILE get_ifile ();
- public char * get_filename ();
- public int get_index ();
- public void store_pos ();
- public void get_pos ();
- public void set_open ();
- public int opened ();
- public void hold_ifile ();
- public int held_ifile ();
- public void * get_filestate ();
- public void set_filestate ();
- public void if_dump ();
- public POSITION forw_line ();
- public POSITION back_line ();
- public void set_attnpos ();
- public void jump_forw ();
- public void jump_back ();
- public void repaint ();
- public void jump_percent ();
- public void jump_line_loc ();
- public void jump_loc ();
- public void init_line ();
- public int is_ascii_char ();
- public void prewind ();
- public void plinenum ();
- public void pshift_all ();
- public int is_ansi_end ();
- public int is_ansi_middle ();
- public int pappend ();
- public int pflushmbc ();
- public void pdone ();
- public int gline ();
- public void null_line ();
- public POSITION forw_raw_line ();
- public POSITION back_raw_line ();
- public void clr_linenum ();
- public void add_lnum ();
- public LINENUM find_linenum ();
- public POSITION find_pos ();
- public LINENUM currline ();
- public void lsystem ();
- public int pipe_mark ();
- public int pipe_data ();
- public void init_mark ();
- public int badmark ();
- public void setmark ();
- public void lastmark ();
- public void gomark ();
- public POSITION markpos ();
- public void unmark ();
- public void opt_o ();
- public void opt__O ();
- public void opt_l ();
- public void opt_j ();
- public void calc_jump_sline ();
- public void opt_k ();
- public void opt_t ();
- public void opt__T ();
- public void opt_p ();
- public void opt__P ();
- public void opt_b ();
- public void opt_i ();
- public void opt__V ();
- public void opt_D ();
- public void opt_x ();
- public void opt_quote ();
- public void opt_query ();
- public int get_swindow ();
- public void scan_option ();
- public void toggle_option ();
- public int single_char_option ();
- public char * opt_prompt ();
- public int isoptpending ();
- public void nopendopt ();
- public int getnum ();
- public long getfraction ();
- public int get_quit_at_eof ();
- public void init_option ();
- public struct loption * findopt ();
- public struct loption * findopt_name ();
- public int iread ();
- public void intread ();
- public long get_time ();
- public char * errno_message ();
- public int percentage ();
- public POSITION percent_pos ();
- public int os9_signal ();
- public void put_line ();
- public void flush ();
- public int putchr ();
- public void putstr ();
- public void get_return ();
- public void error ();
- public void ierror ();
- public int query ();
- public POSITION position ();
- public void add_forw_pos ();
- public void add_back_pos ();
- public void pos_clear ();
- public void pos_init ();
- public int onscreen ();
- public int empty_screen ();
- public int empty_lines ();
- public void get_scrpos ();
- public int adjsline ();
- public void init_prompt ();
- public char * pr_expand ();
- public char * eq_message ();
- public char * pr_string ();
- public char * wait_message ();
- public void repaint_hilite ();
- public void clear_attn ();
- public void undo_search ();
- public void clr_hilite ();
- public int is_hilited ();
- public void chg_caseless ();
- public void chg_hilite ();
- public int search ();
- public void prep_hilite ();
- public RETSIGTYPE winch ();
- public RETSIGTYPE winch ();
- public void init_signals ();
- public void psignals ();
- public void cleantags ();
- public int gettagtype ();
- public void findtag ();
- public POSITION tagsearch ();
- public char * nexttag ();
- public char * prevtag ();
- public int ntags ();
- public int curr_tag ();
- public int edit_tagfile ();
- public void open_getchr ();
- public void close_getchr ();
- public int getchr ();
diff --git a/contrib/less/help.c b/contrib/less/help.c
deleted file mode 100644
index 5f7b129..0000000
--- a/contrib/less/help.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/* This file was generated by mkhelp from less.hlp */
-#include "less.h"
-constant char helpdata[] = {
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','\b','S','U','\b','U','M','\b','M','M','\b','M','A','\b','A','R','\b','R','Y','\b','Y',' ','O','\b','O','F','\b','F',' ','L','\b','L','E','\b','E','S','\b','S','S','\b','S',' ','C','\b','C','O','\b','O','M','\b','M','M','\b','M','A','\b','A','N','\b','N','D','\b','D','S','\b','S','\n',
-'\n',
-' ',' ',' ',' ',' ',' ','C','o','m','m','a','n','d','s',' ','m','a','r','k','e','d',' ','w','i','t','h',' ','*',' ','m','a','y',' ','b','e',' ','p','r','e','c','e','d','e','d',' ','b','y',' ','a',' ','n','u','m','b','e','r',',',' ','_','\b','N','.','\n',
-' ',' ',' ',' ',' ',' ','N','o','t','e','s',' ','i','n',' ','p','a','r','e','n','t','h','e','s','e','s',' ','i','n','d','i','c','a','t','e',' ','t','h','e',' ','b','e','h','a','v','i','o','r',' ','i','f',' ','_','\b','N',' ','i','s',' ','g','i','v','e','n','.','\n',
-'\n',
-' ',' ','h',' ',' ','H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','t','h','i','s',' ','h','e','l','p','.','\n',
-' ',' ','q',' ',' ',':','q',' ',' ','Q',' ',' ',':','Q',' ',' ','Z','Z',' ',' ',' ',' ',' ','E','x','i','t','.','\n',
-' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','M','\b','M','O','\b','O','V','\b','V','I','\b','I','N','\b','N','G','\b','G','\n',
-'\n',
-' ',' ','e',' ',' ','^','E',' ',' ','j',' ',' ','^','N',' ',' ','C','R',' ',' ','*',' ',' ','F','o','r','w','a','r','d',' ',' ','o','n','e',' ','l','i','n','e',' ',' ',' ','(','o','r',' ','_','\b','N',' ','l','i','n','e','s',')','.','\n',
-' ',' ','y',' ',' ','^','Y',' ',' ','k',' ',' ','^','K',' ',' ','^','P',' ',' ','*',' ',' ','B','a','c','k','w','a','r','d',' ','o','n','e',' ','l','i','n','e',' ',' ',' ','(','o','r',' ','_','\b','N',' ','l','i','n','e','s',')','.','\n',
-' ',' ','f',' ',' ','^','F',' ',' ','^','V',' ',' ','S','P','A','C','E',' ',' ','*',' ',' ','F','o','r','w','a','r','d',' ',' ','o','n','e',' ','w','i','n','d','o','w',' ','(','o','r',' ','_','\b','N',' ','l','i','n','e','s',')','.','\n',
-' ',' ','b',' ',' ','^','B',' ',' ','E','S','C','-','v',' ',' ',' ',' ',' ',' ','*',' ',' ','B','a','c','k','w','a','r','d',' ','o','n','e',' ','w','i','n','d','o','w',' ','(','o','r',' ','_','\b','N',' ','l','i','n','e','s',')','.','\n',
-' ',' ','z',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','F','o','r','w','a','r','d',' ',' ','o','n','e',' ','w','i','n','d','o','w',' ','(','a','n','d',' ','s','e','t',' ','w','i','n','d','o','w',' ','t','o',' ','_','\b','N',')','.','\n',
-' ',' ','w',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','B','a','c','k','w','a','r','d',' ','o','n','e',' ','w','i','n','d','o','w',' ','(','a','n','d',' ','s','e','t',' ','w','i','n','d','o','w',' ','t','o',' ','_','\b','N',')','.','\n',
-' ',' ','E','S','C','-','S','P','A','C','E',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','F','o','r','w','a','r','d',' ',' ','o','n','e',' ','w','i','n','d','o','w',',',' ','b','u','t',' ','d','o','n','\'','t',' ','s','t','o','p',' ','a','t',' ','e','n','d','-','o','f','-','f','i','l','e','.','\n',
-' ',' ','d',' ',' ','^','D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','F','o','r','w','a','r','d',' ',' ','o','n','e',' ','h','a','l','f','-','w','i','n','d','o','w',' ','(','a','n','d',' ','s','e','t',' ','h','a','l','f','-','w','i','n','d','o','w',' ','t','o',' ','_','\b','N',')','.','\n',
-' ',' ','u',' ',' ','^','U',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','B','a','c','k','w','a','r','d',' ','o','n','e',' ','h','a','l','f','-','w','i','n','d','o','w',' ','(','a','n','d',' ','s','e','t',' ','h','a','l','f','-','w','i','n','d','o','w',' ','t','o',' ','_','\b','N',')','.','\n',
-' ',' ','E','S','C','-',')',' ',' ','R','i','g','h','t','A','r','r','o','w',' ','*',' ',' ','L','e','f','t',' ',' ','o','n','e',' ','h','a','l','f',' ','s','c','r','e','e','n',' ','w','i','d','t','h',' ','(','o','r',' ','_','\b','N',' ','p','o','s','i','t','i','o','n','s',')','.','\n',
-' ',' ','E','S','C','-','(',' ',' ','L','e','f','t','A','r','r','o','w',' ',' ','*',' ',' ','R','i','g','h','t',' ','o','n','e',' ','h','a','l','f',' ','s','c','r','e','e','n',' ','w','i','d','t','h',' ','(','o','r',' ','_','\b','N',' ','p','o','s','i','t','i','o','n','s',')','.','\n',
-' ',' ','F',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','w','a','r','d',' ','f','o','r','e','v','e','r',';',' ','l','i','k','e',' ','"','t','a','i','l',' ','-','f','"','.','\n',
-' ',' ','r',' ',' ','^','R',' ',' ','^','L',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','R','e','p','a','i','n','t',' ','s','c','r','e','e','n','.','\n',
-' ',' ','R',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','R','e','p','a','i','n','t',' ','s','c','r','e','e','n',',',' ','d','i','s','c','a','r','d','i','n','g',' ','b','u','f','f','e','r','e','d',' ','i','n','p','u','t','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','D','e','f','a','u','l','t',' ','"','w','i','n','d','o','w','"',' ','i','s',' ','t','h','e',' ','s','c','r','e','e','n',' ','h','e','i','g','h','t','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','D','e','f','a','u','l','t',' ','"','h','a','l','f','-','w','i','n','d','o','w','"',' ','i','s',' ','h','a','l','f',' ','o','f',' ','t','h','e',' ','s','c','r','e','e','n',' ','h','e','i','g','h','t','.','\n',
-' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','\b','S','E','\b','E','A','\b','A','R','\b','R','C','\b','C','H','\b','H','I','\b','I','N','\b','N','G','\b','G','\n',
-'\n',
-' ',' ','/','_','\b','p','_','\b','a','_','\b','t','_','\b','t','_','\b','e','_','\b','r','_','\b','n',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','S','e','a','r','c','h',' ','f','o','r','w','a','r','d',' ','f','o','r',' ','(','_','\b','N','-','t','h',')',' ','m','a','t','c','h','i','n','g',' ','l','i','n','e','.','\n',
-' ',' ','?','_','\b','p','_','\b','a','_','\b','t','_','\b','t','_','\b','e','_','\b','r','_','\b','n',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','S','e','a','r','c','h',' ','b','a','c','k','w','a','r','d',' ','f','o','r',' ','(','_','\b','N','-','t','h',')',' ','m','a','t','c','h','i','n','g',' ','l','i','n','e','.','\n',
-' ',' ','n',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','R','e','p','e','a','t',' ','p','r','e','v','i','o','u','s',' ','s','e','a','r','c','h',' ','(','f','o','r',' ','_','\b','N','-','t','h',' ','o','c','c','u','r','r','e','n','c','e',')','.','\n',
-' ',' ','N',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','R','e','p','e','a','t',' ','p','r','e','v','i','o','u','s',' ','s','e','a','r','c','h',' ','i','n',' ','r','e','v','e','r','s','e',' ','d','i','r','e','c','t','i','o','n','.','\n',
-' ',' ','E','S','C','-','n',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','R','e','p','e','a','t',' ','p','r','e','v','i','o','u','s',' ','s','e','a','r','c','h',',',' ','s','p','a','n','n','i','n','g',' ','f','i','l','e','s','.','\n',
-' ',' ','E','S','C','-','N',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','R','e','p','e','a','t',' ','p','r','e','v','i','o','u','s',' ','s','e','a','r','c','h',',',' ','r','e','v','e','r','s','e',' ','d','i','r','.',' ','&',' ','s','p','a','n','n','i','n','g',' ','f','i','l','e','s','.','\n',
-' ',' ','E','S','C','-','u',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','n','d','o',' ','(','t','o','g','g','l','e',')',' ','s','e','a','r','c','h',' ','h','i','g','h','l','i','g','h','t','i','n','g','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','S','e','a','r','c','h',' ','p','a','t','t','e','r','n','s',' ','m','a','y',' ','b','e',' ','m','o','d','i','f','i','e','d',' ','b','y',' ','o','n','e',' ','o','r',' ','m','o','r','e',' ','o','f',':','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','^','N',' ','o','r',' ','!',' ',' ','S','e','a','r','c','h',' ','f','o','r',' ','N','O','N','-','m','a','t','c','h','i','n','g',' ','l','i','n','e','s','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','^','E',' ','o','r',' ','*',' ',' ','S','e','a','r','c','h',' ','m','u','l','t','i','p','l','e',' ','f','i','l','e','s',' ','(','p','a','s','s',' ','t','h','r','u',' ','E','N','D',' ','O','F',' ','F','I','L','E',')','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','^','F',' ','o','r',' ','@',' ',' ','S','t','a','r','t',' ','s','e','a','r','c','h',' ','a','t',' ','F','I','R','S','T',' ','f','i','l','e',' ','(','f','o','r',' ','/',')',' ','o','r',' ','l','a','s','t',' ','f','i','l','e',' ','(','f','o','r',' ','?',')','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','^','K',' ',' ',' ',' ',' ',' ',' ','H','i','g','h','l','i','g','h','t',' ','m','a','t','c','h','e','s',',',' ','b','u','t',' ','d','o','n','\'','t',' ','m','o','v','e',' ','(','K','E','E','P',' ','p','o','s','i','t','i','o','n',')','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','^','R',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','R','E','G','U','L','A','R',' ','E','X','P','R','E','S','S','I','O','N','S','.','\n',
-' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','J','\b','J','U','\b','U','M','\b','M','P','\b','P','I','\b','I','N','\b','N','G','\b','G','\n',
-'\n',
-' ',' ','g',' ',' ','<',' ',' ','E','S','C','-','<',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','G','o',' ','t','o',' ','f','i','r','s','t',' ','l','i','n','e',' ','i','n',' ','f','i','l','e',' ','(','o','r',' ','l','i','n','e',' ','_','\b','N',')','.','\n',
-' ',' ','G',' ',' ','>',' ',' ','E','S','C','-','>',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','G','o',' ','t','o',' ','l','a','s','t',' ','l','i','n','e',' ','i','n',' ','f','i','l','e',' ','(','o','r',' ','l','i','n','e',' ','_','\b','N',')','.','\n',
-' ',' ','p',' ',' ','%',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','G','o',' ','t','o',' ','b','e','g','i','n','n','i','n','g',' ','o','f',' ','f','i','l','e',' ','(','o','r',' ','_','\b','N',' ','p','e','r','c','e','n','t',' ','i','n','t','o',' ','f','i','l','e',')','.','\n',
-' ',' ','t',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','G','o',' ','t','o',' ','t','h','e',' ','(','_','\b','N','-','t','h',')',' ','n','e','x','t',' ','t','a','g','.','\n',
-' ',' ','T',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','G','o',' ','t','o',' ','t','h','e',' ','(','_','\b','N','-','t','h',')',' ','p','r','e','v','i','o','u','s',' ','t','a','g','.','\n',
-' ',' ','{',' ',' ','(',' ',' ','[',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','F','i','n','d',' ','c','l','o','s','e',' ','b','r','a','c','k','e','t',' ','}',' ',')',' ',']','.','\n',
-' ',' ','}',' ',' ',')',' ',' ',']',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','F','i','n','d',' ','o','p','e','n',' ','b','r','a','c','k','e','t',' ','{',' ','(',' ','[','.','\n',
-' ',' ','E','S','C','-','^','F',' ','_','\b','<','_','\b','c','_','\b','1','_','\b','>',' ','_','\b','<','_','\b','c','_','\b','2','_','\b','>',' ',' ','*',' ',' ','F','i','n','d',' ','c','l','o','s','e',' ','b','r','a','c','k','e','t',' ','_','\b','<','_','\b','c','_','\b','2','_','\b','>','.','\n',
-' ',' ','E','S','C','-','^','B',' ','_','\b','<','_','\b','c','_','\b','1','_','\b','>',' ','_','\b','<','_','\b','c','_','\b','2','_','\b','>',' ',' ','*',' ',' ','F','i','n','d',' ','o','p','e','n',' ','b','r','a','c','k','e','t',' ','_','\b','<','_','\b','c','_','\b','1','_','\b','>',' ','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','E','a','c','h',' ','"','f','i','n','d',' ','c','l','o','s','e',' ','b','r','a','c','k','e','t','"',' ','c','o','m','m','a','n','d',' ','g','o','e','s',' ','f','o','r','w','a','r','d',' ','t','o',' ','t','h','e',' ','c','l','o','s','e',' ','b','r','a','c','k','e','t',' ','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m','a','t','c','h','i','n','g',' ','t','h','e',' ','(','_','\b','N','-','t','h',')',' ','o','p','e','n',' ','b','r','a','c','k','e','t',' ','i','n',' ','t','h','e',' ','t','o','p',' ','l','i','n','e','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','E','a','c','h',' ','"','f','i','n','d',' ','o','p','e','n',' ','b','r','a','c','k','e','t','"',' ','c','o','m','m','a','n','d',' ','g','o','e','s',' ','b','a','c','k','w','a','r','d',' ','t','o',' ','t','h','e',' ','o','p','e','n',' ','b','r','a','c','k','e','t',' ','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m','a','t','c','h','i','n','g',' ','t','h','e',' ','(','_','\b','N','-','t','h',')',' ','c','l','o','s','e',' ','b','r','a','c','k','e','t',' ','i','n',' ','t','h','e',' ','b','o','t','t','o','m',' ','l','i','n','e','.','\n',
-'\n',
-' ',' ','m','_','\b','<','_','\b','l','_','\b','e','_','\b','t','_','\b','t','_','\b','e','_','\b','r','_','\b','>',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','M','a','r','k',' ','t','h','e',' ','c','u','r','r','e','n','t',' ','p','o','s','i','t','i','o','n',' ','w','i','t','h',' ','<','l','e','t','t','e','r','>','.','\n',
-' ',' ','\'','_','\b','<','_','\b','l','_','\b','e','_','\b','t','_','\b','t','_','\b','e','_','\b','r','_','\b','>',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','G','o',' ','t','o',' ','a',' ','p','r','e','v','i','o','u','s','l','y',' ','m','a','r','k','e','d',' ','p','o','s','i','t','i','o','n','.','\n',
-' ',' ','\'','\'',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','G','o',' ','t','o',' ','t','h','e',' ','p','r','e','v','i','o','u','s',' ','p','o','s','i','t','i','o','n','.','\n',
-' ',' ','^','X','^','X',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','a','m','e',' ','a','s',' ','\'','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','A',' ','m','a','r','k',' ','i','s',' ','a','n','y',' ','u','p','p','e','r','-','c','a','s','e',' ','o','r',' ','l','o','w','e','r','-','c','a','s','e',' ','l','e','t','t','e','r','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','C','e','r','t','a','i','n',' ','m','a','r','k','s',' ','a','r','e',' ','p','r','e','d','e','f','i','n','e','d',':','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','^',' ',' ','m','e','a','n','s',' ',' ','b','e','g','i','n','n','i','n','g',' ','o','f',' ','t','h','e',' ','f','i','l','e','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','$',' ',' ','m','e','a','n','s',' ',' ','e','n','d',' ','o','f',' ','t','h','e',' ','f','i','l','e','\n',
-' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','\b','C','H','\b','H','A','\b','A','N','\b','N','G','\b','G','I','\b','I','N','\b','N','G','\b','G',' ','F','\b','F','I','\b','I','L','\b','L','E','\b','E','S','\b','S','\n',
-'\n',
-' ',' ',':','e',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','x','a','m','i','n','e',' ','a',' ','n','e','w',' ','f','i','l','e','.','\n',
-' ',' ','^','X','^','V',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','a','m','e',' ','a','s',' ',':','e','.','\n',
-' ',' ',':','n',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','E','x','a','m','i','n','e',' ','t','h','e',' ','(','_','\b','N','-','t','h',')',' ','n','e','x','t',' ','f','i','l','e',' ','f','r','o','m',' ','t','h','e',' ','c','o','m','m','a','n','d',' ','l','i','n','e','.','\n',
-' ',' ',':','p',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','E','x','a','m','i','n','e',' ','t','h','e',' ','(','_','\b','N','-','t','h',')',' ','p','r','e','v','i','o','u','s',' ','f','i','l','e',' ','f','r','o','m',' ','t','h','e',' ','c','o','m','m','a','n','d',' ','l','i','n','e','.','\n',
-' ',' ',':','x',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*',' ',' ','E','x','a','m','i','n','e',' ','t','h','e',' ','f','i','r','s','t',' ','(','o','r',' ','_','\b','N','-','t','h',')',' ','f','i','l','e',' ','f','r','o','m',' ','t','h','e',' ','c','o','m','m','a','n','d',' ','l','i','n','e','.','\n',
-' ',' ',':','d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','t','h','e',' ','c','u','r','r','e','n','t',' ','f','i','l','e',' ','f','r','o','m',' ','t','h','e',' ','c','o','m','m','a','n','d',' ','l','i','n','e',' ','l','i','s','t','.','\n',
-' ',' ','=',' ',' ','^','G',' ',' ',':','f',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','P','r','i','n','t',' ','c','u','r','r','e','n','t',' ','f','i','l','e',' ','n','a','m','e','.','\n',
-' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','M','\b','M','I','\b','I','S','\b','S','C','\b','C','E','\b','E','L','\b','L','L','\b','L','A','\b','A','N','\b','N','E','\b','E','O','\b','O','U','\b','U','S','\b','S',' ','C','\b','C','O','\b','O','M','\b','M','M','\b','M','A','\b','A','N','\b','N','D','\b','D','S','\b','S','\n',
-'\n',
-' ',' ','-','_','\b','<','_','\b','f','_','\b','l','_','\b','a','_','\b','g','_','\b','>',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','T','o','g','g','l','e',' ','a',' ','c','o','m','m','a','n','d',' ','l','i','n','e',' ','o','p','t','i','o','n',' ','[','s','e','e',' ','O','P','T','I','O','N','S',' ','b','e','l','o','w',']','.','\n',
-' ',' ','-','-','_','\b','<','_','\b','n','_','\b','a','_','\b','m','_','\b','e','_','\b','>',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','T','o','g','g','l','e',' ','a',' ','c','o','m','m','a','n','d',' ','l','i','n','e',' ','o','p','t','i','o','n',',',' ','b','y',' ','n','a','m','e','.','\n',
-' ',' ','_','_','\b','<','_','\b','f','_','\b','l','_','\b','a','_','\b','g','_','\b','>',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','t','h','e',' ','s','e','t','t','i','n','g',' ','o','f',' ','a',' ','c','o','m','m','a','n','d',' ','l','i','n','e',' ','o','p','t','i','o','n','.','\n',
-' ',' ','_','_','_','\b','<','_','\b','n','_','\b','a','_','\b','m','_','\b','e','_','\b','>',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','t','h','e',' ','s','e','t','t','i','n','g',' ','o','f',' ','a','n',' ','o','p','t','i','o','n',',',' ','b','y',' ','n','a','m','e','.','\n',
-' ',' ','+','_','\b','c','_','\b','m','_','\b','d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','x','e','c','u','t','e',' ','t','h','e',' ','l','e','s','s',' ','c','m','d',' ','e','a','c','h',' ','t','i','m','e',' ','a',' ','n','e','w',' ','f','i','l','e',' ','i','s',' ','e','x','a','m','i','n','e','d','.','\n',
-'\n',
-' ',' ','!','_','\b','c','_','\b','o','_','\b','m','_','\b','m','_','\b','a','_','\b','n','_','\b','d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','x','e','c','u','t','e',' ','t','h','e',' ','s','h','e','l','l',' ','c','o','m','m','a','n','d',' ','w','i','t','h',' ','$','S','H','E','L','L','.','\n',
-' ',' ','|','X','\b','X','_','\b','c','_','\b','o','_','\b','m','_','\b','m','_','\b','a','_','\b','n','_','\b','d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','P','i','p','e',' ','f','i','l','e',' ','b','e','t','w','e','e','n',' ','c','u','r','r','e','n','t',' ','p','o','s',' ','&',' ','m','a','r','k',' ','X','\b','X',' ','t','o',' ','s','h','e','l','l',' ','c','o','m','m','a','n','d','.','\n',
-' ',' ','v',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','d','i','t',' ','t','h','e',' ','c','u','r','r','e','n','t',' ','f','i','l','e',' ','w','i','t','h',' ','$','V','I','S','U','A','L',' ','o','r',' ','$','E','D','I','T','O','R','.','\n',
-' ',' ','V',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','P','r','i','n','t',' ','v','e','r','s','i','o','n',' ','n','u','m','b','e','r',' ','o','f',' ','"','l','e','s','s','"','.','\n',
-' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','O','\b','O','P','\b','P','T','\b','T','I','\b','I','O','\b','O','N','\b','N','S','\b','S','\n',
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ','M','o','s','t',' ','o','p','t','i','o','n','s',' ','m','a','y',' ','b','e',' ','c','h','a','n','g','e','d',' ','e','i','t','h','e','r',' ','o','n',' ','t','h','e',' ','c','o','m','m','a','n','d',' ','l','i','n','e',',','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','o','r',' ','f','r','o','m',' ','w','i','t','h','i','n',' ','l','e','s','s',' ','b','y',' ','u','s','i','n','g',' ','t','h','e',' ','-',' ','o','r',' ','-','-',' ','c','o','m','m','a','n','d','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','O','p','t','i','o','n','s',' ','m','a','y',' ','b','e',' ','g','i','v','e','n',' ','i','n',' ','o','n','e',' ','o','f',' ','t','w','o',' ','f','o','r','m','s',':',' ','e','i','t','h','e','r',' ','a',' ','s','i','n','g','l','e','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','c','h','a','r','a','c','t','e','r',' ','p','r','e','c','e','d','e','d',' ','b','y',' ','a',' ','-',',',' ','o','r',' ','a',' ','n','a','m','e',' ','p','r','e','c','e','e','d','e','d',' ','b','y',' ','-','-','.','\n',
-'\n',
-' ',' ','-','?',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','h','e','l','p','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','h','e','l','p',' ','(','f','r','o','m',' ','c','o','m','m','a','n','d',' ','l','i','n','e',')','.','\n',
-' ',' ','-','a',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','s','e','a','r','c','h','-','s','k','i','p','-','s','c','r','e','e','n','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','w','a','r','d',' ','s','e','a','r','c','h',' ','s','k','i','p','s',' ','c','u','r','r','e','n','t',' ','s','c','r','e','e','n','.','\n',
-' ',' ','-','b',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','b','u','f','f','e','r','s','=','[','_','\b','N',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','N','u','m','b','e','r',' ','o','f',' ','b','u','f','f','e','r','s','.','\n',
-' ',' ','-','B',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','a','u','t','o','-','b','u','f','f','e','r','s','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','a','u','t','o','m','a','t','i','c','a','l','l','y',' ','a','l','l','o','c','a','t','e',' ','b','u','f','f','e','r','s',' ','f','o','r',' ','p','i','p','e','s','.','\n',
-' ',' ','-','c',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','c','l','e','a','r','-','s','c','r','e','e','n','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','R','e','p','a','i','n','t',' ','b','y',' ','c','l','e','a','r','i','n','g',' ','r','a','t','h','e','r',' ','t','h','a','n',' ','s','c','r','o','l','l','i','n','g','.','\n',
-' ',' ','-','d',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','d','u','m','b','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','u','m','b',' ','t','e','r','m','i','n','a','l','.','\n',
-' ',' ','-','D',' ','[','_','\b','x','_','\b','n','_','\b','.','_','\b','n',']',' ',' ','.',' ',' ','-','-','c','o','l','o','r','=','_','\b','x','_','\b','n','_','\b','.','_','\b','n','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','s','c','r','e','e','n',' ','c','o','l','o','r','s','.',' ','(','M','S','-','D','O','S',' ','o','n','l','y',')','\n',
-' ',' ','-','e',' ',' ','-','E',' ',' ','.','.','.','.',' ',' ','-','-','q','u','i','t','-','a','t','-','e','o','f',' ',' ','-','-','Q','U','I','T','-','A','T','-','E','O','F','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Q','u','i','t',' ','a','t',' ','e','n','d',' ','o','f',' ','f','i','l','e','.','\n',
-' ',' ','-','f',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','f','o','r','c','e','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','c','e',' ','o','p','e','n',' ','n','o','n','-','r','e','g','u','l','a','r',' ','f','i','l','e','s','.','\n',
-' ',' ','-','F',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','q','u','i','t','-','i','f','-','o','n','e','-','s','c','r','e','e','n','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Q','u','i','t',' ','i','f',' ','e','n','t','i','r','e',' ','f','i','l','e',' ','f','i','t','s',' ','o','n',' ','f','i','r','s','t',' ','s','c','r','e','e','n','.','\n',
-' ',' ','-','g',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','h','i','l','i','t','e','-','s','e','a','r','c','h','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','H','i','g','h','l','i','g','h','t',' ','o','n','l','y',' ','l','a','s','t',' ','m','a','t','c','h',' ','f','o','r',' ','s','e','a','r','c','h','e','s','.','\n',
-' ',' ','-','G',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','H','I','L','I','T','E','-','S','E','A','R','C','H','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','h','i','g','h','l','i','g','h','t',' ','a','n','y',' ','m','a','t','c','h','e','s',' ','f','o','r',' ','s','e','a','r','c','h','e','s','.','\n',
-' ',' ','-','h',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','m','a','x','-','b','a','c','k','-','s','c','r','o','l','l','=','[','_','\b','N',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','B','a','c','k','w','a','r','d',' ','s','c','r','o','l','l',' ','l','i','m','i','t','.','\n',
-' ',' ','-','i',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','i','g','n','o','r','e','-','c','a','s','e','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','I','g','n','o','r','e',' ','c','a','s','e',' ','i','n',' ','s','e','a','r','c','h','e','s',' ','t','h','a','t',' ','d','o',' ','n','o','t',' ','c','o','n','t','a','i','n',' ','u','p','p','e','r','c','a','s','e','.','\n',
-' ',' ','-','I',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','I','G','N','O','R','E','-','C','A','S','E','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','I','g','n','o','r','e',' ','c','a','s','e',' ','i','n',' ','a','l','l',' ','s','e','a','r','c','h','e','s','.','\n',
-' ',' ','-','j',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','j','u','m','p','-','t','a','r','g','e','t','=','[','_','\b','N',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','c','r','e','e','n',' ','p','o','s','i','t','i','o','n',' ','o','f',' ','t','a','r','g','e','t',' ','l','i','n','e','s','.','\n',
-' ',' ','-','J',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','s','t','a','t','u','s','-','c','o','l','u','m','n','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','a',' ','s','t','a','t','u','s',' ','c','o','l','u','m','n',' ','a','t',' ','l','e','f','t',' ','e','d','g','e',' ','o','f',' ','s','c','r','e','e','n','.','\n',
-' ',' ','-','k',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','l','e','s','s','k','e','y','-','f','i','l','e','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','s','e',' ','a',' ','l','e','s','s','k','e','y',' ','f','i','l','e','.','\n',
-' ',' ','-','L',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','n','o','-','l','e','s','s','o','p','e','n','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','I','g','n','o','r','e',' ','t','h','e',' ','L','E','S','S','O','P','E','N',' ','e','n','v','i','r','o','n','m','e','n','t',' ','v','a','r','i','a','b','l','e','.','\n',
-' ',' ','-','m',' ',' ','-','M',' ',' ','.','.','.','.',' ',' ','-','-','l','o','n','g','-','p','r','o','m','p','t',' ',' ','-','-','L','O','N','G','-','P','R','O','M','P','T','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','p','r','o','m','p','t',' ','s','t','y','l','e','.','\n',
-' ',' ','-','n',' ',' ','-','N',' ',' ','.','.','.','.',' ',' ','-','-','l','i','n','e','-','n','u','m','b','e','r','s',' ',' ','-','-','L','I','N','E','-','N','U','M','B','E','R','S','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','l','i','n','e',' ','n','u','m','b','e','r','s','.','\n',
-' ',' ','-','o',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','l','o','g','-','f','i','l','e','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','p','y',' ','t','o',' ','l','o','g',' ','f','i','l','e',' ','(','s','t','a','n','d','a','r','d',' ','i','n','p','u','t',' ','o','n','l','y',')','.','\n',
-' ',' ','-','O',' ','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ',' ','.',' ',' ','-','-','L','O','G','-','F','I','L','E','=','[','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','p','y',' ','t','o',' ','l','o','g',' ','f','i','l','e',' ','(','u','n','c','o','n','d','i','t','i','o','n','a','l','l','y',' ','o','v','e','r','w','r','i','t','e',')','.','\n',
-' ',' ','-','p',' ','[','_','\b','p','_','\b','a','_','\b','t','_','\b','t','_','\b','e','_','\b','r','_','\b','n',']',' ',' ','-','-','p','a','t','t','e','r','n','=','[','_','\b','p','_','\b','a','_','\b','t','_','\b','t','_','\b','e','_','\b','r','_','\b','n',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','t','a','r','t',' ','a','t',' ','p','a','t','t','e','r','n',' ','(','f','r','o','m',' ','c','o','m','m','a','n','d',' ','l','i','n','e',')','.','\n',
-' ',' ','-','P',' ','[','_','\b','p','_','\b','r','_','\b','o','_','\b','m','_','\b','p','_','\b','t',']',' ',' ',' ','-','-','p','r','o','m','p','t','=','[','_','\b','p','_','\b','r','_','\b','o','_','\b','m','_','\b','p','_','\b','t',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','f','i','n','e',' ','n','e','w',' ','p','r','o','m','p','t','.','\n',
-' ',' ','-','q',' ',' ','-','Q',' ',' ','.','.','.','.',' ',' ','-','-','q','u','i','e','t',' ',' ','-','-','Q','U','I','E','T',' ',' ','-','-','s','i','l','e','n','t',' ','-','-','S','I','L','E','N','T','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Q','u','i','e','t',' ','t','h','e',' ','t','e','r','m','i','n','a','l',' ','b','e','l','l','.','\n',
-' ',' ','-','r',' ',' ','-','R',' ',' ','.','.','.','.',' ',' ','-','-','r','a','w','-','c','o','n','t','r','o','l','-','c','h','a','r','s',' ',' ','-','-','R','A','W','-','C','O','N','T','R','O','L','-','C','H','A','R','S','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','O','u','t','p','u','t',' ','"','r','a','w','"',' ','c','o','n','t','r','o','l',' ','c','h','a','r','a','c','t','e','r','s','.','\n',
-' ',' ','-','s',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','s','q','u','e','e','z','e','-','b','l','a','n','k','-','l','i','n','e','s','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','q','u','e','e','z','e',' ','m','u','l','t','i','p','l','e',' ','b','l','a','n','k',' ','l','i','n','e','s','.','\n',
-' ',' ','-','S',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','c','h','o','p','-','l','o','n','g','-','l','i','n','e','s','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','h','o','p',' ','l','o','n','g',' ','l','i','n','e','s','.','\n',
-' ',' ','-','t',' ','[','_','\b','t','_','\b','a','_','\b','g',']',' ',' ','.','.',' ',' ','-','-','t','a','g','=','[','_','\b','t','_','\b','a','_','\b','g',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','i','n','d',' ','a',' ','t','a','g','.','\n',
-' ',' ','-','T',' ','[','_','\b','t','_','\b','a','_','\b','g','_','\b','s','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']',' ','-','-','t','a','g','-','f','i','l','e','=','[','_','\b','t','_','\b','a','_','\b','g','_','\b','s','_','\b','f','_','\b','i','_','\b','l','_','\b','e',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','U','s','e',' ','a','n',' ','a','l','t','e','r','n','a','t','e',' ','t','a','g','s',' ','f','i','l','e','.','\n',
-' ',' ','-','u',' ',' ','-','U',' ',' ','.','.','.','.',' ',' ','-','-','u','n','d','e','r','l','i','n','e','-','s','p','e','c','i','a','l',' ',' ','-','-','U','N','D','E','R','L','I','N','E','-','S','P','E','C','I','A','L','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','h','a','n','g','e',' ','h','a','n','d','l','i','n','g',' ','o','f',' ','b','a','c','k','s','p','a','c','e','s','.','\n',
-' ',' ','-','V',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','v','e','r','s','i','o','n','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','i','s','p','l','a','y',' ','t','h','e',' ','v','e','r','s','i','o','n',' ','n','u','m','b','e','r',' ','o','f',' ','"','l','e','s','s','"','.','\n',
-' ',' ','-','w',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','h','i','l','i','t','e','-','u','n','r','e','a','d','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','H','i','g','h','l','i','g','h','t',' ','f','i','r','s','t',' ','n','e','w',' ','l','i','n','e',' ','a','f','t','e','r',' ','f','o','r','w','a','r','d','-','s','c','r','e','e','n','.','\n',
-' ',' ','-','W',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','H','I','L','I','T','E','-','U','N','R','E','A','D','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','H','i','g','h','l','i','g','h','t',' ','f','i','r','s','t',' ','n','e','w',' ','l','i','n','e',' ','a','f','t','e','r',' ','a','n','y',' ','f','o','r','w','a','r','d',' ','m','o','v','e','m','e','n','t','.','\n',
-' ',' ','-','x',' ','[','_','\b','N','[',',','.','.','.',']',']',' ',' ','-','-','t','a','b','s','=','[','_','\b','N','[',',','.','.','.',']',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','t','a','b',' ','s','t','o','p','s','.','\n',
-' ',' ','-','X',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','n','o','-','i','n','i','t','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','t','e','r','m','c','a','p',' ','i','n','i','t','/','d','e','i','n','i','t',' ','s','t','r','i','n','g','s','.','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','-','-','n','o','-','k','e','y','p','a','d','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','u','s','e',' ','t','e','r','m','c','a','p',' ','k','e','y','p','a','d',' ','i','n','i','t','/','d','e','i','n','i','t',' ','s','t','r','i','n','g','s','.','\n',
-' ',' ','-','y',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','m','a','x','-','f','o','r','w','-','s','c','r','o','l','l','=','[','_','\b','N',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','F','o','r','w','a','r','d',' ','s','c','r','o','l','l',' ','l','i','m','i','t','.','\n',
-' ',' ','-','z',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','w','i','n','d','o','w','=','[','_','\b','N',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','s','i','z','e',' ','o','f',' ','w','i','n','d','o','w','.','\n',
-' ',' ','-','"',' ','[','_','\b','c','[','_','\b','c',']',']',' ',' ','.',' ',' ','-','-','q','u','o','t','e','s','=','[','_','\b','c','[','_','\b','c',']',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','S','e','t',' ','s','h','e','l','l',' ','q','u','o','t','e',' ','c','h','a','r','a','c','t','e','r','s','.','\n',
-' ',' ','-','~',' ',' ','.','.','.','.','.','.','.','.',' ',' ','-','-','t','i','l','d','e','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','o','n','\'','t',' ','d','i','s','p','l','a','y',' ','t','i','l','d','e','s',' ','a','f','t','e','r',' ','e','n','d',' ','o','f',' ','f','i','l','e','.','\n',
-' ',' ','-','#',' ','[','_','\b','N',']',' ',' ','.','.','.','.',' ',' ','-','-','s','h','i','f','t','=','[','_','\b','N',']','\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','H','o','r','i','z','o','n','t','a','l',' ','s','c','r','o','l','l',' ','a','m','o','u','n','t',' ','(','0',' ','=',' ','o','n','e',' ','h','a','l','f',' ','s','c','r','e','e','n',' ','w','i','d','t','h',')','\n',
-'\n',
-' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','\n',
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','L','\b','L','I','\b','I','N','\b','N','E','\b','E',' ','E','\b','E','D','\b','D','I','\b','I','T','\b','T','I','\b','I','N','\b','N','G','\b','G','\n',
-'\n',
-' ',' ',' ',' ',' ',' ',' ',' ','T','h','e','s','e',' ','k','e','y','s',' ','c','a','n',' ','b','e',' ','u','s','e','d',' ','t','o',' ','e','d','i','t',' ','t','e','x','t',' ','b','e','i','n','g',' ','e','n','t','e','r','e','d',' ','\n',
-' ',' ',' ',' ',' ',' ',' ',' ','o','n',' ','t','h','e',' ','"','c','o','m','m','a','n','d',' ','l','i','n','e','"',' ','a','t',' ','t','h','e',' ','b','o','t','t','o','m',' ','o','f',' ','t','h','e',' ','s','c','r','e','e','n','.','\n',
-'\n',
-' ','R','i','g','h','t','A','r','r','o','w',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','l',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','r','i','g','h','t',' ','o','n','e',' ','c','h','a','r','a','c','t','e','r','.','\n',
-' ','L','e','f','t','A','r','r','o','w',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','h',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','l','e','f','t',' ','o','n','e',' ','c','h','a','r','a','c','t','e','r','.','\n',
-' ','C','N','T','L','-','R','i','g','h','t','A','r','r','o','w',' ',' ','E','S','C','-','R','i','g','h','t','A','r','r','o','w',' ',' ','E','S','C','-','w',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','r','i','g','h','t',' ','o','n','e',' ','w','o','r','d','.','\n',
-' ','C','N','T','L','-','L','e','f','t','A','r','r','o','w',' ',' ',' ','E','S','C','-','L','e','f','t','A','r','r','o','w',' ',' ',' ','E','S','C','-','b',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','l','e','f','t',' ','o','n','e',' ','w','o','r','d','.','\n',
-' ','H','O','M','E',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','0',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','t','o',' ','s','t','a','r','t',' ','o','f',' ','l','i','n','e','.','\n',
-' ','E','N','D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','$',' ',' ',' ',' ',' ','M','o','v','e',' ','c','u','r','s','o','r',' ','t','o',' ','e','n','d',' ','o','f',' ','l','i','n','e','.','\n',
-' ','B','A','C','K','S','P','A','C','E',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','c','h','a','r',' ','t','o',' ','l','e','f','t',' ','o','f',' ','c','u','r','s','o','r','.','\n',
-' ','D','E','L','E','T','E',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','x',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','c','h','a','r',' ','u','n','d','e','r',' ','c','u','r','s','o','r','.','\n',
-' ','C','N','T','L','-','B','A','C','K','S','P','A','C','E',' ',' ',' ','E','S','C','-','B','A','C','K','S','P','A','C','E',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','w','o','r','d',' ','t','o',' ','l','e','f','t',' ','o','f',' ','c','u','r','s','o','r','.','\n',
-' ','C','N','T','L','-','D','E','L','E','T','E',' ',' ',' ',' ',' ',' ','E','S','C','-','D','E','L','E','T','E',' ',' ',' ',' ',' ',' ','E','S','C','-','X',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','w','o','r','d',' ','u','n','d','e','r',' ','c','u','r','s','o','r','.','\n',
-' ','C','N','T','L','-','U',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C',' ','(','M','S','-','D','O','S',' ','o','n','l','y',')',' ',' ',' ',' ',' ',' ',' ',' ',' ','D','e','l','e','t','e',' ','e','n','t','i','r','e',' ','l','i','n','e','.','\n',
-' ','U','p','A','r','r','o','w',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','k',' ',' ',' ',' ',' ','R','e','t','r','i','e','v','e',' ','p','r','e','v','i','o','u','s',' ','c','o','m','m','a','n','d',' ','l','i','n','e','.','\n',
-' ','D','o','w','n','A','r','r','o','w',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','j',' ',' ',' ',' ',' ','R','e','t','r','i','e','v','e',' ','n','e','x','t',' ','c','o','m','m','a','n','d',' ','l','i','n','e','.','\n',
-' ','T','A','B',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','m','p','l','e','t','e',' ','f','i','l','e','n','a','m','e',' ','&',' ','c','y','c','l','e','.','\n',
-' ','S','H','I','F','T','-','T','A','B',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','E','S','C','-','T','A','B',' ',' ',' ','C','o','m','p','l','e','t','e',' ','f','i','l','e','n','a','m','e',' ','&',' ','r','e','v','e','r','s','e',' ','c','y','c','l','e','.','\n',
-' ','C','N','T','L','-','L',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','C','o','m','p','l','e','t','e',' ','f','i','l','e','n','a','m','e',',',' ','l','i','s','t',' ','a','l','l','.','\n',
-'\n',
-'\n',
- 0 };
-constant int size_helpdata = sizeof(helpdata) - 1;
diff --git a/contrib/less/ifile.c b/contrib/less/ifile.c
deleted file mode 100644
index 96e8e60..0000000
--- a/contrib/less/ifile.c
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * An IFILE represents an input file.
- *
- * It is actually a pointer to an ifile structure,
- * but is opaque outside this module.
- * Ifile structures are kept in a linked list in the order they
- * appear on the command line.
- * Any new file which does not already appear in the list is
- * inserted after the current file.
- */
-
-#include "less.h"
-
-extern IFILE curr_ifile;
-
-struct ifile {
- struct ifile *h_next; /* Links for command line list */
- struct ifile *h_prev;
- char *h_filename; /* Name of the file */
- void *h_filestate; /* File state (used in ch.c) */
- int h_index; /* Index within command line list */
- int h_hold; /* Hold count */
- char h_opened; /* Has this ifile been opened? */
- struct scrpos h_scrpos; /* Saved position within the file */
-};
-
-/*
- * Convert an IFILE (external representation)
- * to a struct file (internal representation), and vice versa.
- */
-#define int_ifile(h) ((struct ifile *)(h))
-#define ext_ifile(h) ((IFILE)(h))
-
-/*
- * Anchor for linked list.
- */
-static struct ifile anchor = { &anchor, &anchor, NULL, NULL, 0, 0, '\0',
- { NULL_POSITION, 0 } };
-static int ifiles = 0;
-
- static void
-incr_index(p, incr)
- register struct ifile *p;
- int incr;
-{
- for (; p != &anchor; p = p->h_next)
- p->h_index += incr;
-}
-
-/*
- * Link an ifile into the ifile list.
- */
- static void
-link_ifile(p, prev)
- struct ifile *p;
- struct ifile *prev;
-{
- /*
- * Link into list.
- */
- if (prev == NULL)
- prev = &anchor;
- p->h_next = prev->h_next;
- p->h_prev = prev;
- prev->h_next->h_prev = p;
- prev->h_next = p;
- /*
- * Calculate index for the new one,
- * and adjust the indexes for subsequent ifiles in the list.
- */
- p->h_index = prev->h_index + 1;
- incr_index(p->h_next, 1);
- ifiles++;
-}
-
-/*
- * Unlink an ifile from the ifile list.
- */
- static void
-unlink_ifile(p)
- struct ifile *p;
-{
- p->h_next->h_prev = p->h_prev;
- p->h_prev->h_next = p->h_next;
- incr_index(p->h_next, -1);
- ifiles--;
-}
-
-/*
- * Allocate a new ifile structure and stick a filename in it.
- * It should go after "prev" in the list
- * (or at the beginning of the list if "prev" is NULL).
- * Return a pointer to the new ifile structure.
- */
- static struct ifile *
-new_ifile(filename, prev)
- char *filename;
- struct ifile *prev;
-{
- register struct ifile *p;
-
- /*
- * Allocate and initialize structure.
- */
- p = (struct ifile *) ecalloc(1, sizeof(struct ifile));
- p->h_filename = save(filename);
- p->h_scrpos.pos = NULL_POSITION;
- p->h_opened = 0;
- p->h_hold = 0;
- p->h_filestate = NULL;
- link_ifile(p, prev);
- return (p);
-}
-
-/*
- * Delete an existing ifile structure.
- */
- public void
-del_ifile(h)
- IFILE h;
-{
- register struct ifile *p;
-
- if (h == NULL_IFILE)
- return;
- /*
- * If the ifile we're deleting is the currently open ifile,
- * move off it.
- */
- unmark(h);
- if (h == curr_ifile)
- curr_ifile = getoff_ifile(curr_ifile);
- p = int_ifile(h);
- unlink_ifile(p);
- free(p->h_filename);
- free(p);
-}
-
-/*
- * Get the ifile after a given one in the list.
- */
- public IFILE
-next_ifile(h)
- IFILE h;
-{
- register struct ifile *p;
-
- p = (h == NULL_IFILE) ? &anchor : int_ifile(h);
- if (p->h_next == &anchor)
- return (NULL_IFILE);
- return (ext_ifile(p->h_next));
-}
-
-/*
- * Get the ifile before a given one in the list.
- */
- public IFILE
-prev_ifile(h)
- IFILE h;
-{
- register struct ifile *p;
-
- p = (h == NULL_IFILE) ? &anchor : int_ifile(h);
- if (p->h_prev == &anchor)
- return (NULL_IFILE);
- return (ext_ifile(p->h_prev));
-}
-
-/*
- * Return a different ifile from the given one.
- */
- public IFILE
-getoff_ifile(ifile)
- IFILE ifile;
-{
- IFILE newifile;
-
- if ((newifile = prev_ifile(ifile)) != NULL_IFILE)
- return (newifile);
- if ((newifile = next_ifile(ifile)) != NULL_IFILE)
- return (newifile);
- return (NULL_IFILE);
-}
-
-/*
- * Return the number of ifiles.
- */
- public int
-nifile()
-{
- return (ifiles);
-}
-
-/*
- * Find an ifile structure, given a filename.
- */
- static struct ifile *
-find_ifile(filename)
- char *filename;
-{
- register struct ifile *p;
-
- for (p = anchor.h_next; p != &anchor; p = p->h_next)
- if (strcmp(filename, p->h_filename) == 0)
- return (p);
- return (NULL);
-}
-
-/*
- * Get the ifile associated with a filename.
- * If the filename has not been seen before,
- * insert the new ifile after "prev" in the list.
- */
- public IFILE
-get_ifile(filename, prev)
- char *filename;
- IFILE prev;
-{
- register struct ifile *p;
-
- if ((p = find_ifile(filename)) == NULL)
- p = new_ifile(filename, int_ifile(prev));
- return (ext_ifile(p));
-}
-
-/*
- * Get the filename associated with a ifile.
- */
- public char *
-get_filename(ifile)
- IFILE ifile;
-{
- if (ifile == NULL)
- return (NULL);
- return (int_ifile(ifile)->h_filename);
-}
-
-/*
- * Get the index of the file associated with a ifile.
- */
- public int
-get_index(ifile)
- IFILE ifile;
-{
- return (int_ifile(ifile)->h_index);
-}
-
-/*
- * Save the file position to be associated with a given file.
- */
- public void
-store_pos(ifile, scrpos)
- IFILE ifile;
- struct scrpos *scrpos;
-{
- int_ifile(ifile)->h_scrpos = *scrpos;
-}
-
-/*
- * Recall the file position associated with a file.
- * If no position has been associated with the file, return NULL_POSITION.
- */
- public void
-get_pos(ifile, scrpos)
- IFILE ifile;
- struct scrpos *scrpos;
-{
- *scrpos = int_ifile(ifile)->h_scrpos;
-}
-
-/*
- * Mark the ifile as "opened".
- */
- public void
-set_open(ifile)
- IFILE ifile;
-{
- int_ifile(ifile)->h_opened = 1;
-}
-
-/*
- * Return whether the ifile has been opened previously.
- */
- public int
-opened(ifile)
- IFILE ifile;
-{
- return (int_ifile(ifile)->h_opened);
-}
-
- public void
-hold_ifile(ifile, incr)
- IFILE ifile;
- int incr;
-{
- int_ifile(ifile)->h_hold += incr;
-}
-
- public int
-held_ifile(ifile)
- IFILE ifile;
-{
- return (int_ifile(ifile)->h_hold);
-}
-
- public void *
-get_filestate(ifile)
- IFILE ifile;
-{
- return (int_ifile(ifile)->h_filestate);
-}
-
- public void
-set_filestate(ifile, filestate)
- IFILE ifile;
- void *filestate;
-{
- int_ifile(ifile)->h_filestate = filestate;
-}
-
-#if 0
- public void
-if_dump()
-{
- register struct ifile *p;
-
- for (p = anchor.h_next; p != &anchor; p = p->h_next)
- {
- printf("%x: %d. <%s> pos %d,%x\n",
- p, p->h_index, p->h_filename,
- p->h_scrpos.ln, p->h_scrpos.pos);
- ch_dump(p->h_filestate);
- }
-}
-#endif
diff --git a/contrib/less/input.c b/contrib/less/input.c
deleted file mode 100644
index 1129a7b..0000000
--- a/contrib/less/input.c
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * High level routines dealing with getting lines of input
- * from the file being viewed.
- *
- * When we speak of "lines" here, we mean PRINTABLE lines;
- * lines processed with respect to the screen width.
- * We use the term "raw line" to refer to lines simply
- * delimited by newlines; not processed with respect to screen width.
- */
-
-#include "less.h"
-
-extern int squeeze;
-extern int chopline;
-extern int hshift;
-extern int quit_if_one_screen;
-extern int sigs;
-extern int ignore_eoi;
-extern int status_col;
-extern POSITION start_attnpos;
-extern POSITION end_attnpos;
-#if HILITE_SEARCH
-extern int hilite_search;
-extern int size_linebuf;
-#endif
-
-/*
- * Get the next line.
- * A "current" position is passed and a "new" position is returned.
- * The current position is the position of the first character of
- * a line. The new position is the position of the first character
- * of the NEXT line. The line obtained is the line starting at curr_pos.
- */
- public POSITION
-forw_line(curr_pos)
- POSITION curr_pos;
-{
- POSITION base_pos;
- POSITION new_pos;
- register int c;
- int blankline;
- int endline;
- int backchars;
-
- if (curr_pos == NULL_POSITION)
- {
- null_line();
- return (NULL_POSITION);
- }
-#if HILITE_SEARCH
- if (hilite_search == OPT_ONPLUS || status_col)
- /*
- * If we are ignoring EOI (command F), only prepare
- * one line ahead, to avoid getting stuck waiting for
- * slow data without displaying the data we already have.
- * If we're not ignoring EOI, we *could* do the same, but
- * for efficiency we prepare several lines ahead at once.
- */
- prep_hilite(curr_pos, curr_pos + 3*size_linebuf,
- ignore_eoi ? 1 : -1);
-#endif
- if (ch_seek(curr_pos))
- {
- null_line();
- return (NULL_POSITION);
- }
-
- base_pos = curr_pos;
- for (;;)
- {
- if (ABORT_SIGS())
- {
- null_line();
- return (NULL_POSITION);
- }
- c = ch_back_get();
- if (c == EOI)
- break;
- if (c == '\n')
- {
- (void) ch_forw_get();
- break;
- }
- --base_pos;
- }
-
- prewind();
- plinenum(base_pos);
- (void) ch_seek(base_pos);
- while (base_pos < curr_pos)
- {
- if (ABORT_SIGS())
- {
- null_line();
- return (NULL_POSITION);
- }
- c = ch_forw_get();
- backchars = pappend(c, base_pos);
- base_pos++;
- if (backchars > 0)
- {
- pshift_all();
- base_pos -= backchars;
- while (--backchars >= 0)
- (void) ch_back_get();
- }
- }
- (void) pflushmbc();
- pshift_all();
-
- c = ch_forw_get();
- if (c == EOI)
- {
- null_line();
- return (NULL_POSITION);
- }
- blankline = (c == '\n' || c == '\r');
-
- for (;;)
- {
- if (ABORT_SIGS())
- {
- null_line();
- return (NULL_POSITION);
- }
- if (c == '\n' || c == EOI)
- {
- /*
- * End of the line.
- */
- backchars = pflushmbc();
- new_pos = ch_tell();
- if (backchars > 0 && !chopline && hshift == 0)
- {
- new_pos -= backchars + 1;
- endline = FALSE;
- } else
- endline = TRUE;
- break;
- }
- if (c != '\r')
- blankline = 0;
-
- /*
- * Append the char to the line and get the next char.
- */
- backchars = pappend(c, ch_tell()-1);
- if (backchars > 0)
- {
- /*
- * The char won't fit in the line; the line
- * is too long to print in the screen width.
- * End the line here.
- */
- if (chopline || hshift > 0)
- {
- do
- {
- c = ch_forw_get();
- } while (c != '\n' && c != EOI);
- new_pos = ch_tell();
- endline = TRUE;
- quit_if_one_screen = FALSE;
- } else
- {
- new_pos = ch_tell() - backchars;
- endline = FALSE;
- }
- break;
- }
- c = ch_forw_get();
- }
- pdone(endline);
-
- if (squeeze && blankline)
- {
- /*
- * This line is blank.
- * Skip down to the last contiguous blank line
- * and pretend it is the one which we are returning.
- */
- while ((c = ch_forw_get()) == '\n' || c == '\r')
- if (ABORT_SIGS())
- {
- null_line();
- return (NULL_POSITION);
- }
- if (c != EOI)
- (void) ch_back_get();
- new_pos = ch_tell();
- }
-
- return (new_pos);
-}
-
-/*
- * Get the previous line.
- * A "current" position is passed and a "new" position is returned.
- * The current position is the position of the first character of
- * a line. The new position is the position of the first character
- * of the PREVIOUS line. The line obtained is the one starting at new_pos.
- */
- public POSITION
-back_line(curr_pos)
- POSITION curr_pos;
-{
- POSITION new_pos, begin_new_pos;
- int c;
- int endline;
- int backchars;
-
- if (curr_pos == NULL_POSITION || curr_pos <= ch_zero())
- {
- null_line();
- return (NULL_POSITION);
- }
-#if HILITE_SEARCH
- if (hilite_search == OPT_ONPLUS || status_col)
- prep_hilite((curr_pos < 3*size_linebuf) ?
- 0 : curr_pos - 3*size_linebuf, curr_pos, -1);
-#endif
- if (ch_seek(curr_pos-1))
- {
- null_line();
- return (NULL_POSITION);
- }
-
- if (squeeze)
- {
- /*
- * Find out if the "current" line was blank.
- */
- (void) ch_forw_get(); /* Skip the newline */
- c = ch_forw_get(); /* First char of "current" line */
- (void) ch_back_get(); /* Restore our position */
- (void) ch_back_get();
-
- if (c == '\n' || c == '\r')
- {
- /*
- * The "current" line was blank.
- * Skip over any preceding blank lines,
- * since we skipped them in forw_line().
- */
- while ((c = ch_back_get()) == '\n' || c == '\r')
- if (ABORT_SIGS())
- {
- null_line();
- return (NULL_POSITION);
- }
- if (c == EOI)
- {
- null_line();
- return (NULL_POSITION);
- }
- (void) ch_forw_get();
- }
- }
-
- /*
- * Scan backwards until we hit the beginning of the line.
- */
- for (;;)
- {
- if (ABORT_SIGS())
- {
- null_line();
- return (NULL_POSITION);
- }
- c = ch_back_get();
- if (c == '\n')
- {
- /*
- * This is the newline ending the previous line.
- * We have hit the beginning of the line.
- */
- new_pos = ch_tell() + 1;
- break;
- }
- if (c == EOI)
- {
- /*
- * We have hit the beginning of the file.
- * This must be the first line in the file.
- * This must, of course, be the beginning of the line.
- */
- new_pos = ch_tell();
- break;
- }
- }
-
- /*
- * Now scan forwards from the beginning of this line.
- * We keep discarding "printable lines" (based on screen width)
- * until we reach the curr_pos.
- *
- * {{ This algorithm is pretty inefficient if the lines
- * are much longer than the screen width,
- * but I don't know of any better way. }}
- */
- if (ch_seek(new_pos))
- {
- null_line();
- return (NULL_POSITION);
- }
- endline = FALSE;
- prewind();
- plinenum(new_pos);
- loop:
- begin_new_pos = new_pos;
- (void) ch_seek(new_pos);
-
- do
- {
- c = ch_forw_get();
- if (c == EOI || ABORT_SIGS())
- {
- null_line();
- return (NULL_POSITION);
- }
- new_pos++;
- if (c == '\n')
- {
- backchars = pflushmbc();
- if (backchars > 0 && !chopline && hshift == 0)
- {
- backchars++;
- goto shift;
- }
- endline = TRUE;
- break;
- }
- backchars = pappend(c, ch_tell()-1);
- if (backchars > 0)
- {
- /*
- * Got a full printable line, but we haven't
- * reached our curr_pos yet. Discard the line
- * and start a new one.
- */
- if (chopline || hshift > 0)
- {
- endline = TRUE;
- quit_if_one_screen = FALSE;
- break;
- }
- shift:
- pshift_all();
- while (backchars-- > 0)
- {
- (void) ch_back_get();
- new_pos--;
- }
- goto loop;
- }
- } while (new_pos < curr_pos);
-
- pdone(endline);
-
- return (begin_new_pos);
-}
-
-/*
- * Set attnpos.
- */
- public void
-set_attnpos(pos)
- POSITION pos;
-{
- int c;
-
- if (pos != NULL_POSITION)
- {
- if (ch_seek(pos))
- return;
- for (;;)
- {
- c = ch_forw_get();
- if (c == EOI)
- return;
- if (c != '\n' && c != '\r')
- break;
- pos++;
- }
- }
- start_attnpos = pos;
- for (;;)
- {
- c = ch_forw_get();
- pos++;
- if (c == EOI || c == '\n' || c == '\r')
- break;
- }
- end_attnpos = pos;
-}
diff --git a/contrib/less/install.sh b/contrib/less/install.sh
deleted file mode 100755
index 0ff4b6a..0000000
--- a/contrib/less/install.sh
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/sh
-
-#
-# install - install a program, script, or datafile
-# This comes from X11R5; it is not part of GNU.
-#
-# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-#
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-
-instcmd="$mvprog"
-chmodcmd=""
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-fi
-
-if [ x"$dst" = x ]
-then
- echo "install: no destination specified"
- exit 1
-fi
-
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
-if [ -d $dst ]
-then
- dst="$dst"/`basename $src`
-fi
-
-# Make a temp file name in the proper directory.
-
-dstdir=`dirname $dst`
-dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
-$doit $instcmd $src $dsttmp
-
-# and set any options; do chmod last to preserve setuid bits
-
-if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi
-if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi
-if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi
-if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi
-
-# Now rename the file to the real destination.
-
-$doit $rmcmd $dst
-$doit $mvcmd $dsttmp $dst
-
-
-exit 0
diff --git a/contrib/less/jump.c b/contrib/less/jump.c
deleted file mode 100644
index 585d9b2..0000000
--- a/contrib/less/jump.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines which jump to a new location in the file.
- */
-
-#include "less.h"
-#include "position.h"
-
-extern int hit_eof;
-extern int jump_sline;
-extern int squished;
-extern int screen_trashed;
-extern int sc_width, sc_height;
-extern int show_attn;
-extern int top_scroll;
-
-/*
- * Jump to the end of the file.
- */
- public void
-jump_forw()
-{
- POSITION pos;
- POSITION end_pos;
-
- if (ch_end_seek())
- {
- error("Cannot seek to end of file", NULL_PARG);
- return;
- }
- /*
- * Position the last line in the file at the last screen line.
- * Go back one line from the end of the file
- * to get to the beginning of the last line.
- */
- pos_clear();
- end_pos = ch_tell();
- pos = back_line(end_pos);
- if (pos == NULL_POSITION)
- jump_loc((POSITION)0, sc_height-1);
- else
- {
- jump_loc(pos, sc_height-1);
- if (position(sc_height-1) != end_pos)
- repaint();
- }
-}
-
-/*
- * Jump to line n in the file.
- */
- public void
-jump_back(linenum)
- LINENUM linenum;
-{
- POSITION pos;
- PARG parg;
-
- /*
- * Find the position of the specified line.
- * If we can seek there, just jump to it.
- * If we can't seek, but we're trying to go to line number 1,
- * use ch_beg_seek() to get as close as we can.
- */
- pos = find_pos(linenum);
- if (pos != NULL_POSITION && ch_seek(pos) == 0)
- {
- if (show_attn)
- set_attnpos(pos);
- jump_loc(pos, jump_sline);
- } else if (linenum <= 1 && ch_beg_seek() == 0)
- {
- jump_loc(ch_tell(), jump_sline);
- error("Cannot seek to beginning of file", NULL_PARG);
- } else
- {
- parg.p_linenum = linenum;
- error("Cannot seek to line number %n", &parg);
- }
-}
-
-/*
- * Repaint the screen.
- */
- public void
-repaint()
-{
- struct scrpos scrpos;
- /*
- * Start at the line currently at the top of the screen
- * and redisplay the screen.
- */
- get_scrpos(&scrpos);
- pos_clear();
- jump_loc(scrpos.pos, scrpos.ln);
-}
-
-/*
- * Jump to a specified percentage into the file.
- */
- public void
-jump_percent(percent, fraction)
- int percent;
- long fraction;
-{
- POSITION pos, len;
-
- /*
- * Determine the position in the file
- * (the specified percentage of the file's length).
- */
- if ((len = ch_length()) == NULL_POSITION)
- {
- ierror("Determining length of file", NULL_PARG);
- ch_end_seek();
- }
- if ((len = ch_length()) == NULL_POSITION)
- {
- error("Don't know length of file", NULL_PARG);
- return;
- }
- pos = percent_pos(len, percent, fraction);
- if (pos >= len)
- pos = len-1;
-
- jump_line_loc(pos, jump_sline);
-}
-
-/*
- * Jump to a specified position in the file.
- * Like jump_loc, but the position need not be
- * the first character in a line.
- */
- public void
-jump_line_loc(pos, sline)
- POSITION pos;
- int sline;
-{
- int c;
-
- if (ch_seek(pos) == 0)
- {
- /*
- * Back up to the beginning of the line.
- */
- while ((c = ch_back_get()) != '\n' && c != EOI)
- ;
- if (c == '\n')
- (void) ch_forw_get();
- pos = ch_tell();
- }
- if (show_attn)
- set_attnpos(pos);
- jump_loc(pos, sline);
-}
-
-/*
- * Jump to a specified position in the file.
- * The position must be the first character in a line.
- * Place the target line on a specified line on the screen.
- */
- public void
-jump_loc(pos, sline)
- POSITION pos;
- int sline;
-{
- register int nline;
- POSITION tpos;
- POSITION bpos;
-
- /*
- * Normalize sline.
- */
- sline = adjsline(sline);
-
- if ((nline = onscreen(pos)) >= 0)
- {
- /*
- * The line is currently displayed.
- * Just scroll there.
- */
- nline -= sline;
- if (nline > 0)
- forw(nline, position(BOTTOM_PLUS_ONE), 1, 0, 0);
- else
- back(-nline, position(TOP), 1, 0);
- if (show_attn)
- repaint_hilite(1);
- return;
- }
-
- /*
- * Line is not on screen.
- * Seek to the desired location.
- */
- if (ch_seek(pos))
- {
- error("Cannot seek to that file position", NULL_PARG);
- return;
- }
-
- /*
- * See if the desired line is before or after
- * the currently displayed screen.
- */
- tpos = position(TOP);
- bpos = position(BOTTOM_PLUS_ONE);
- if (tpos == NULL_POSITION || pos >= tpos)
- {
- /*
- * The desired line is after the current screen.
- * Move back in the file far enough so that we can
- * call forw() and put the desired line at the
- * sline-th line on the screen.
- */
- for (nline = 0; nline < sline; nline++)
- {
- if (bpos != NULL_POSITION && pos <= bpos)
- {
- /*
- * Surprise! The desired line is
- * close enough to the current screen
- * that we can just scroll there after all.
- */
- forw(sc_height-sline+nline-1, bpos, 1, 0, 0);
- if (show_attn)
- repaint_hilite(1);
- return;
- }
- pos = back_line(pos);
- if (pos == NULL_POSITION)
- {
- /*
- * Oops. Ran into the beginning of the file.
- * Exit the loop here and rely on forw()
- * below to draw the required number of
- * blank lines at the top of the screen.
- */
- break;
- }
- }
- lastmark();
- hit_eof = 0;
- squished = 0;
- screen_trashed = 0;
- forw(sc_height-1, pos, 1, 0, sline-nline);
- } else
- {
- /*
- * The desired line is before the current screen.
- * Move forward in the file far enough so that we
- * can call back() and put the desired line at the
- * sline-th line on the screen.
- */
- for (nline = sline; nline < sc_height - 1; nline++)
- {
- pos = forw_line(pos);
- if (pos == NULL_POSITION)
- {
- /*
- * Ran into end of file.
- * This shouldn't normally happen,
- * but may if there is some kind of read error.
- */
- break;
- }
- if (pos >= tpos)
- {
- /*
- * Surprise! The desired line is
- * close enough to the current screen
- * that we can just scroll there after all.
- */
- back(nline+1, tpos, 1, 0);
- if (show_attn)
- repaint_hilite(1);
- return;
- }
- }
- lastmark();
- if (!top_scroll)
- clear();
- else
- home();
- screen_trashed = 0;
- add_back_pos(pos);
- back(sc_height-1, pos, 1, 0);
- }
-}
diff --git a/contrib/less/less.h b/contrib/less/less.h
deleted file mode 100644
index 078ccbb..0000000
--- a/contrib/less/less.h
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-#define NEWBOT 1
-
-/*
- * Standard include file for "less".
- */
-
-/*
- * Defines for MSDOS_COMPILER.
- */
-#define MSOFTC 1 /* Microsoft C */
-#define BORLANDC 2 /* Borland C */
-#define WIN32C 3 /* Windows (Borland C or Microsoft C) */
-#define DJGPPC 4 /* DJGPP C */
-
-/*
- * Include the file of compile-time options.
- * The <> make cc search for it in -I., not srcdir.
- */
-#include <defines.h>
-
-#ifdef _SEQUENT_
-/*
- * Kludge for Sequent Dynix systems that have sigsetmask, but
- * it's not compatible with the way less calls it.
- * {{ Do other systems need this? }}
- */
-#undef HAVE_SIGSETMASK
-#endif
-
-/*
- * Language details.
- */
-#if HAVE_VOID
-#define VOID_POINTER void *
-#else
-#define VOID_POINTER char *
-#define void int
-#endif
-#if HAVE_CONST
-#define constant const
-#else
-#define constant
-#endif
-
-#define public /* PUBLIC FUNCTION */
-
-/* Library function declarations */
-
-#if HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#if HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#if HAVE_WCTYPE_H
-#include <wctype.h>
-#endif
-#if HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#if HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if HAVE_STRING_H
-#include <string.h>
-#endif
-
-/* OS-specific includes */
-#ifdef _OSK
-#include <modes.h>
-#include <strings.h>
-#endif
-
-#ifdef __TANDEM
-#include <floss.h>
-#endif
-
-#if MSDOS_COMPILER==WIN32C || OS2
-#include <io.h>
-#endif
-
-#if MSDOS_COMPILER==DJGPPC
-#include <io.h>
-#include <sys/exceptn.h>
-#include <conio.h>
-#include <pc.h>
-#endif
-
-#if !HAVE_STDLIB_H
-char *getenv();
-off_t lseek();
-VOID_POINTER calloc();
-void free();
-#endif
-
-/*
- * Simple lowercase test which can be used during option processing
- * (before options are parsed which might tell us what charset to use).
- */
-#define ASCII_IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z')
-#define ASCII_IS_LOWER(c) ((c) >= 'a' && (c) <= 'z')
-#define ASCII_TO_UPPER(c) ((c) - 'a' + 'A')
-#define ASCII_TO_LOWER(c) ((c) - 'A' + 'a')
-
-#undef IS_UPPER
-#undef IS_LOWER
-#undef TO_UPPER
-#undef TO_LOWER
-#undef IS_SPACE
-#undef IS_DIGIT
-
-#if HAVE_WCTYPE
-#define IS_UPPER(c) iswupper(c)
-#define IS_LOWER(c) iswlower(c)
-#define TO_UPPER(c) towupper(c)
-#define TO_LOWER(c) towlower(c)
-#else
-#if HAVE_UPPER_LOWER
-#define IS_UPPER(c) isupper((unsigned char) (c))
-#define IS_LOWER(c) islower((unsigned char) (c))
-#define TO_UPPER(c) toupper((unsigned char) (c))
-#define TO_LOWER(c) tolower((unsigned char) (c))
-#else
-#define IS_UPPER(c) ASCII_IS_UPPER(c)
-#define IS_LOWER(c) ASCII_IS_LOWER(c)
-#define TO_UPPER(c) ASCII_TO_UPPER(c)
-#define TO_LOWER(c) ASCII_TO_LOWER(c)
-#endif
-#endif
-
-#ifdef isspace
-#define IS_SPACE(c) isspace((unsigned char)(c))
-#else
-#define IS_SPACE(c) ((c) == ' ' || (c) == '\t' || (c) == '\n' || (c) == '\r' || (c) == '\f')
-#endif
-
-#ifdef isdigit
-#define IS_DIGIT(c) isdigit((unsigned char)(c))
-#else
-#define IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
-#endif
-
-#define IS_CSI_START(c) ((c) == ESC || ((unsigned char)(c)) == CSI)
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#define OPT_OFF 0
-#define OPT_ON 1
-#define OPT_ONPLUS 2
-
-#if !HAVE_MEMCPY
-#ifndef memcpy
-#define memcpy(to,from,len) bcopy((from),(to),(len))
-#endif
-#endif
-
-#if HAVE_SNPRINTF
-#define SNPRINTF1(str, size, fmt, v1) snprintf((str), (size), (fmt), (v1))
-#define SNPRINTF2(str, size, fmt, v1, v2) snprintf((str), (size), (fmt), (v1), (v2))
-#define SNPRINTF3(str, size, fmt, v1, v2, v3) snprintf((str), (size), (fmt), (v1), (v2), (v3))
-#define SNPRINTF4(str, size, fmt, v1, v2, v3, v4) snprintf((str), (size), (fmt), (v1), (v2), (v3), (v4))
-#else
-/* Use unsafe sprintf if we don't have snprintf. */
-#define SNPRINTF1(str, size, fmt, v1) sprintf((str), (fmt), (v1))
-#define SNPRINTF2(str, size, fmt, v1, v2) sprintf((str), (fmt), (v1), (v2))
-#define SNPRINTF3(str, size, fmt, v1, v2, v3) sprintf((str), (fmt), (v1), (v2), (v3))
-#define SNPRINTF4(str, size, fmt, v1, v2, v3, v4) sprintf((str), (fmt), (v1), (v2), (v3), (v4))
-#endif
-
-#define BAD_LSEEK ((off_t)-1)
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif
-#ifndef SEEK_END
-#define SEEK_END 2
-#endif
-
-#ifndef CHAR_BIT
-#define CHAR_BIT 8
-#endif
-
-/*
- * Upper bound on the string length of an integer converted to string.
- * 302 / 1000 is ceil (log10 (2.0)). Subtract 1 for the sign bit;
- * add 1 for integer division truncation; add 1 more for a minus sign.
- */
-#define INT_STRLEN_BOUND(t) ((sizeof(t) * CHAR_BIT - 1) * 302 / 1000 + 1 + 1)
-
-/*
- * Special types and constants.
- */
-typedef unsigned long LWCHAR;
-typedef off_t POSITION;
-typedef off_t LINENUM;
-#define MIN_LINENUM_WIDTH 7 /* Min printing width of a line number */
-#define MAX_UTF_CHAR_LEN 6 /* Max bytes in one UTF-8 char */
-
-#define NULL_POSITION ((POSITION)(-1))
-
-/*
- * Flags for open()
- */
-#if MSDOS_COMPILER || OS2
-#define OPEN_READ (O_RDONLY|O_BINARY)
-#else
-#ifdef _OSK
-#define OPEN_READ (S_IREAD)
-#else
-#ifdef O_RDONLY
-#define OPEN_READ (O_RDONLY)
-#else
-#define OPEN_READ (0)
-#endif
-#endif
-#endif
-
-#if defined(O_WRONLY) && defined(O_APPEND)
-#define OPEN_APPEND (O_APPEND|O_WRONLY)
-#else
-#ifdef _OSK
-#define OPEN_APPEND (S_IWRITE)
-#else
-#define OPEN_APPEND (1)
-#endif
-#endif
-
-/*
- * Set a file descriptor to binary mode.
- */
-#if MSDOS_COMPILER==MSOFTC
-#define SET_BINARY(f) _setmode(f, _O_BINARY);
-#else
-#if MSDOS_COMPILER || OS2
-#define SET_BINARY(f) setmode(f, O_BINARY)
-#else
-#define SET_BINARY(f)
-#endif
-#endif
-
-/*
- * Does the shell treat "?" as a metacharacter?
- */
-#if MSDOS_COMPILER || OS2 || _OSK
-#define SHELL_META_QUEST 0
-#else
-#define SHELL_META_QUEST 1
-#endif
-
-#define SPACES_IN_FILENAMES 1
-
-/*
- * An IFILE represents an input file.
- */
-#define IFILE VOID_POINTER
-#define NULL_IFILE ((IFILE)NULL)
-
-/*
- * The structure used to represent a "screen position".
- * This consists of a file position, and a screen line number.
- * The meaning is that the line starting at the given file
- * position is displayed on the ln-th line of the screen.
- * (Screen lines before ln are empty.)
- */
-struct scrpos
-{
- POSITION pos;
- int ln;
-};
-
-typedef union parg
-{
- char *p_string;
- int p_int;
- LINENUM p_linenum;
-} PARG;
-
-#define NULL_PARG ((PARG *)NULL)
-
-struct textlist
-{
- char *string;
- char *endstring;
-};
-
-#define EOI (-1)
-
-#define READ_INTR (-2)
-
-/* A fraction is represented by an int n; the fraction is n/NUM_FRAC_DENOM */
-#define NUM_FRAC_DENOM 1000000
-#define NUM_LOG_FRAC_DENOM 6
-
-/* How quiet should we be? */
-#define NOT_QUIET 0 /* Ring bell at eof and for errors */
-#define LITTLE_QUIET 1 /* Ring bell only for errors */
-#define VERY_QUIET 2 /* Never ring bell */
-
-/* How should we prompt? */
-#define PR_SHORT 0 /* Prompt with colon */
-#define PR_MEDIUM 1 /* Prompt with message */
-#define PR_LONG 2 /* Prompt with longer message */
-
-/* How should we handle backspaces? */
-#define BS_SPECIAL 0 /* Do special things for underlining and bold */
-#define BS_NORMAL 1 /* \b treated as normal char; actually output */
-#define BS_CONTROL 2 /* \b treated as control char; prints as ^H */
-
-/* How should we search? */
-#define SRCH_FORW (1 << 0) /* Search forward from current position */
-#define SRCH_BACK (1 << 1) /* Search backward from current position */
-#define SRCH_NO_MOVE (1 << 2) /* Highlight, but don't move */
-#define SRCH_FIND_ALL (1 << 4) /* Find and highlight all matches */
-#define SRCH_NO_MATCH (1 << 8) /* Search for non-matching lines */
-#define SRCH_PAST_EOF (1 << 9) /* Search past end-of-file, into next file */
-#define SRCH_FIRST_FILE (1 << 10) /* Search starting at the first file */
-#define SRCH_NO_REGEX (1 << 12) /* Don't use regular expressions */
-
-#define SRCH_REVERSE(t) (((t) & SRCH_FORW) ? \
- (((t) & ~SRCH_FORW) | SRCH_BACK) : \
- (((t) & ~SRCH_BACK) | SRCH_FORW))
-
-/* */
-#define NO_MCA 0
-#define MCA_DONE 1
-#define MCA_MORE 2
-
-#define CC_OK 0 /* Char was accepted & processed */
-#define CC_QUIT 1 /* Char was a request to abort current cmd */
-#define CC_ERROR 2 /* Char could not be accepted due to error */
-#define CC_PASS 3 /* Char was rejected (internal) */
-
-#define CF_QUIT_ON_ERASE 0001 /* Abort cmd if its entirely erased */
-
-/* Special char bit-flags used to tell put_line() to do something special */
-#define AT_NORMAL (0)
-#define AT_UNDERLINE (1 << 0)
-#define AT_BOLD (1 << 1)
-#define AT_BLINK (1 << 2)
-#define AT_STANDOUT (1 << 3)
-#define AT_ANSI (1 << 4) /* Content-supplied "ANSI" escape sequence */
-#define AT_BINARY (1 << 5) /* LESS*BINFMT representation */
-#define AT_HILITE (1 << 6) /* Internal highlights (e.g., for search) */
-
-#if '0' == 240
-#define IS_EBCDIC_HOST 1
-#endif
-
-#if IS_EBCDIC_HOST
-/*
- * Long definition for EBCDIC.
- * Since the argument is usually a constant, this macro normally compiles
- * into a constant.
- */
-#define CONTROL(c) ( \
- (c)=='[' ? '\047' : \
- (c)=='a' ? '\001' : \
- (c)=='b' ? '\002' : \
- (c)=='c' ? '\003' : \
- (c)=='d' ? '\067' : \
- (c)=='e' ? '\055' : \
- (c)=='f' ? '\056' : \
- (c)=='g' ? '\057' : \
- (c)=='h' ? '\026' : \
- (c)=='i' ? '\005' : \
- (c)=='j' ? '\025' : \
- (c)=='k' ? '\013' : \
- (c)=='l' ? '\014' : \
- (c)=='m' ? '\015' : \
- (c)=='n' ? '\016' : \
- (c)=='o' ? '\017' : \
- (c)=='p' ? '\020' : \
- (c)=='q' ? '\021' : \
- (c)=='r' ? '\022' : \
- (c)=='s' ? '\023' : \
- (c)=='t' ? '\074' : \
- (c)=='u' ? '\075' : \
- (c)=='v' ? '\062' : \
- (c)=='w' ? '\046' : \
- (c)=='x' ? '\030' : \
- (c)=='y' ? '\031' : \
- (c)=='z' ? '\077' : \
- (c)=='A' ? '\001' : \
- (c)=='B' ? '\002' : \
- (c)=='C' ? '\003' : \
- (c)=='D' ? '\067' : \
- (c)=='E' ? '\055' : \
- (c)=='F' ? '\056' : \
- (c)=='G' ? '\057' : \
- (c)=='H' ? '\026' : \
- (c)=='I' ? '\005' : \
- (c)=='J' ? '\025' : \
- (c)=='K' ? '\013' : \
- (c)=='L' ? '\014' : \
- (c)=='M' ? '\015' : \
- (c)=='N' ? '\016' : \
- (c)=='O' ? '\017' : \
- (c)=='P' ? '\020' : \
- (c)=='Q' ? '\021' : \
- (c)=='R' ? '\022' : \
- (c)=='S' ? '\023' : \
- (c)=='T' ? '\074' : \
- (c)=='U' ? '\075' : \
- (c)=='V' ? '\062' : \
- (c)=='W' ? '\046' : \
- (c)=='X' ? '\030' : \
- (c)=='Y' ? '\031' : \
- (c)=='Z' ? '\077' : \
- (c)=='|' ? '\031' : \
- (c)=='\\' ? '\034' : \
- (c)=='^' ? '\036' : \
- (c)&077)
-#else
-#define CONTROL(c) ((c)&037)
-#endif /* IS_EBCDIC_HOST */
-
-#define ESC CONTROL('[')
-#define CSI ((unsigned char)'\233')
-
-#if _OSK_MWC32
-#define LSIGNAL(sig,func) os9_signal(sig,func)
-#else
-#define LSIGNAL(sig,func) signal(sig,func)
-#endif
-
-#if HAVE_SIGPROCMASK
-#if HAVE_SIGSET_T
-#else
-#undef HAVE_SIGPROCMASK
-#endif
-#endif
-#if HAVE_SIGPROCMASK
-#if HAVE_SIGEMPTYSET
-#else
-#undef sigemptyset
-#define sigemptyset(mp) *(mp) = 0
-#endif
-#endif
-
-#define S_INTERRUPT 01
-#define S_STOP 02
-#define S_WINCH 04
-#define ABORT_SIGS() (sigs & (S_INTERRUPT|S_STOP))
-
-#define QUIT_OK 0
-#define QUIT_ERROR 1
-#define QUIT_SAVED_STATUS (-1)
-
-#define FOLLOW_DESC 0
-#define FOLLOW_NAME 1
-
-/* filestate flags */
-#define CH_CANSEEK 001
-#define CH_KEEPOPEN 002
-#define CH_POPENED 004
-#define CH_HELPFILE 010
-
-#define ch_zero() ((POSITION)0)
-
-#define FAKE_HELPFILE "@/\\less/\\help/\\file/\\@"
-
-#include "funcs.h"
-
-/* Functions not included in funcs.h */
-void postoa();
-void linenumtoa();
-void inttoa();
diff --git a/contrib/less/less.hlp b/contrib/less/less.hlp
deleted file mode 100644
index 18c9968..0000000
--- a/contrib/less/less.hlp
+++ /dev/null
@@ -1,221 +0,0 @@
-
- SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS
-
- Commands marked with * may be preceded by a number, _N.
- Notes in parentheses indicate the behavior if _N is given.
-
- h H Display this help.
- q :q Q :Q ZZ Exit.
- ---------------------------------------------------------------------------
-
- MMOOVVIINNGG
-
- e ^E j ^N CR * Forward one line (or _N lines).
- y ^Y k ^K ^P * Backward one line (or _N lines).
- f ^F ^V SPACE * Forward one window (or _N lines).
- b ^B ESC-v * Backward one window (or _N lines).
- z * Forward one window (and set window to _N).
- w * Backward one window (and set window to _N).
- ESC-SPACE * Forward one window, but don't stop at end-of-file.
- d ^D * Forward one half-window (and set half-window to _N).
- u ^U * Backward one half-window (and set half-window to _N).
- ESC-) RightArrow * Left one half screen width (or _N positions).
- ESC-( LeftArrow * Right one half screen width (or _N positions).
- F Forward forever; like "tail -f".
- r ^R ^L Repaint screen.
- R Repaint screen, discarding buffered input.
- ---------------------------------------------------
- Default "window" is the screen height.
- Default "half-window" is half of the screen height.
- ---------------------------------------------------------------------------
-
- SSEEAARRCCHHIINNGG
-
- /_p_a_t_t_e_r_n * Search forward for (_N-th) matching line.
- ?_p_a_t_t_e_r_n * Search backward for (_N-th) matching line.
- n * Repeat previous search (for _N-th occurrence).
- N * Repeat previous search in reverse direction.
- ESC-n * Repeat previous search, spanning files.
- ESC-N * Repeat previous search, reverse dir. & spanning files.
- ESC-u Undo (toggle) search highlighting.
- ---------------------------------------------------
- Search patterns may be modified by one or more of:
- ^N or ! Search for NON-matching lines.
- ^E or * Search multiple files (pass thru END OF FILE).
- ^F or @ Start search at FIRST file (for /) or last file (for ?).
- ^K Highlight matches, but don't move (KEEP position).
- ^R Don't use REGULAR EXPRESSIONS.
- ---------------------------------------------------------------------------
-
- JJUUMMPPIINNGG
-
- g < ESC-< * Go to first line in file (or line _N).
- G > ESC-> * Go to last line in file (or line _N).
- p % * Go to beginning of file (or _N percent into file).
- t * Go to the (_N-th) next tag.
- T * Go to the (_N-th) previous tag.
- { ( [ * Find close bracket } ) ].
- } ) ] * Find open bracket { ( [.
- ESC-^F _<_c_1_> _<_c_2_> * Find close bracket _<_c_2_>.
- ESC-^B _<_c_1_> _<_c_2_> * Find open bracket _<_c_1_>
- ---------------------------------------------------
- Each "find close bracket" command goes forward to the close bracket
- matching the (_N-th) open bracket in the top line.
- Each "find open bracket" command goes backward to the open bracket
- matching the (_N-th) close bracket in the bottom line.
-
- m_<_l_e_t_t_e_r_> Mark the current position with <letter>.
- '_<_l_e_t_t_e_r_> Go to a previously marked position.
- '' Go to the previous position.
- ^X^X Same as '.
- ---------------------------------------------------
- A mark is any upper-case or lower-case letter.
- Certain marks are predefined:
- ^ means beginning of the file
- $ means end of the file
- ---------------------------------------------------------------------------
-
- CCHHAANNGGIINNGG FFIILLEESS
-
- :e [_f_i_l_e] Examine a new file.
- ^X^V Same as :e.
- :n * Examine the (_N-th) next file from the command line.
- :p * Examine the (_N-th) previous file from the command line.
- :x * Examine the first (or _N-th) file from the command line.
- :d Delete the current file from the command line list.
- = ^G :f Print current file name.
- ---------------------------------------------------------------------------
-
- MMIISSCCEELLLLAANNEEOOUUSS CCOOMMMMAANNDDSS
-
- -_<_f_l_a_g_> Toggle a command line option [see OPTIONS below].
- --_<_n_a_m_e_> Toggle a command line option, by name.
- __<_f_l_a_g_> Display the setting of a command line option.
- ___<_n_a_m_e_> Display the setting of an option, by name.
- +_c_m_d Execute the less cmd each time a new file is examined.
-
- !_c_o_m_m_a_n_d Execute the shell command with $SHELL.
- |XX_c_o_m_m_a_n_d Pipe file between current pos & mark XX to shell command.
- v Edit the current file with $VISUAL or $EDITOR.
- V Print version number of "less".
- ---------------------------------------------------------------------------
-
- OOPPTTIIOONNSS
-
- Most options may be changed either on the command line,
- or from within less by using the - or -- command.
- Options may be given in one of two forms: either a single
- character preceded by a -, or a name preceeded by --.
-
- -? ........ --help
- Display help (from command line).
- -a ........ --search-skip-screen
- Forward search skips current screen.
- -b [_N] .... --buffers=[_N]
- Number of buffers.
- -B ........ --auto-buffers
- Don't automatically allocate buffers for pipes.
- -c ........ --clear-screen
- Repaint by clearing rather than scrolling.
- -d ........ --dumb
- Dumb terminal.
- -D [_x_n_._n] . --color=_x_n_._n
- Set screen colors. (MS-DOS only)
- -e -E .... --quit-at-eof --QUIT-AT-EOF
- Quit at end of file.
- -f ........ --force
- Force open non-regular files.
- -F ........ --quit-if-one-screen
- Quit if entire file fits on first screen.
- -g ........ --hilite-search
- Highlight only last match for searches.
- -G ........ --HILITE-SEARCH
- Don't highlight any matches for searches.
- -h [_N] .... --max-back-scroll=[_N]
- Backward scroll limit.
- -i ........ --ignore-case
- Ignore case in searches that do not contain uppercase.
- -I ........ --IGNORE-CASE
- Ignore case in all searches.
- -j [_N] .... --jump-target=[_N]
- Screen position of target lines.
- -J ........ --status-column
- Display a status column at left edge of screen.
- -k [_f_i_l_e] . --lesskey-file=[_f_i_l_e]
- Use a lesskey file.
- -L ........ --no-lessopen
- Ignore the LESSOPEN environment variable.
- -m -M .... --long-prompt --LONG-PROMPT
- Set prompt style.
- -n -N .... --line-numbers --LINE-NUMBERS
- Don't use line numbers.
- -o [_f_i_l_e] . --log-file=[_f_i_l_e]
- Copy to log file (standard input only).
- -O [_f_i_l_e] . --LOG-FILE=[_f_i_l_e]
- Copy to log file (unconditionally overwrite).
- -p [_p_a_t_t_e_r_n] --pattern=[_p_a_t_t_e_r_n]
- Start at pattern (from command line).
- -P [_p_r_o_m_p_t] --prompt=[_p_r_o_m_p_t]
- Define new prompt.
- -q -Q .... --quiet --QUIET --silent --SILENT
- Quiet the terminal bell.
- -r -R .... --raw-control-chars --RAW-CONTROL-CHARS
- Output "raw" control characters.
- -s ........ --squeeze-blank-lines
- Squeeze multiple blank lines.
- -S ........ --chop-long-lines
- Chop long lines.
- -t [_t_a_g] .. --tag=[_t_a_g]
- Find a tag.
- -T [_t_a_g_s_f_i_l_e] --tag-file=[_t_a_g_s_f_i_l_e]
- Use an alternate tags file.
- -u -U .... --underline-special --UNDERLINE-SPECIAL
- Change handling of backspaces.
- -V ........ --version
- Display the version number of "less".
- -w ........ --hilite-unread
- Highlight first new line after forward-screen.
- -W ........ --HILITE-UNREAD
- Highlight first new line after any forward movement.
- -x [_N[,...]] --tabs=[_N[,...]]
- Set tab stops.
- -X ........ --no-init
- Don't use termcap init/deinit strings.
- --no-keypad
- Don't use termcap keypad init/deinit strings.
- -y [_N] .... --max-forw-scroll=[_N]
- Forward scroll limit.
- -z [_N] .... --window=[_N]
- Set size of window.
- -" [_c[_c]] . --quotes=[_c[_c]]
- Set shell quote characters.
- -~ ........ --tilde
- Don't display tildes after end of file.
- -# [_N] .... --shift=[_N]
- Horizontal scroll amount (0 = one half screen width)
-
- ---------------------------------------------------------------------------
-
- LLIINNEE EEDDIITTIINNGG
-
- These keys can be used to edit text being entered
- on the "command line" at the bottom of the screen.
-
- RightArrow ESC-l Move cursor right one character.
- LeftArrow ESC-h Move cursor left one character.
- CNTL-RightArrow ESC-RightArrow ESC-w Move cursor right one word.
- CNTL-LeftArrow ESC-LeftArrow ESC-b Move cursor left one word.
- HOME ESC-0 Move cursor to start of line.
- END ESC-$ Move cursor to end of line.
- BACKSPACE Delete char to left of cursor.
- DELETE ESC-x Delete char under cursor.
- CNTL-BACKSPACE ESC-BACKSPACE Delete word to left of cursor.
- CNTL-DELETE ESC-DELETE ESC-X Delete word under cursor.
- CNTL-U ESC (MS-DOS only) Delete entire line.
- UpArrow ESC-k Retrieve previous command line.
- DownArrow ESC-j Retrieve next command line.
- TAB Complete filename & cycle.
- SHIFT-TAB ESC-TAB Complete filename & reverse cycle.
- CNTL-L Complete filename, list all.
-
-
diff --git a/contrib/less/less.man b/contrib/less/less.man
deleted file mode 100644
index af19a47..0000000
--- a/contrib/less/less.man
+++ /dev/null
@@ -1,1559 +0,0 @@
-LESS(1) LESS(1)
-
-
-
-NAME
- less - opposite of more
-
-SYNOPSIS
- less -?
- less --help
- less -V
- less --version
- less [-[+]aBcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
- [-b space] [-h lines] [-j line] [-k keyfile]
- [-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
- [-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
- [-# shift] [+[+]cmd] [--] [filename]...
- (See the OPTIONS section for alternate option syntax with long option
- names.)
-
-
-DESCRIPTION
- Less is a program similar to more (1), but which allows backward move-
- ment in the file as well as forward movement. Also, less does not have
- to read the entire input file before starting, so with large input
- files it starts up faster than text editors like vi (1). Less uses
- termcap (or terminfo on some systems), so it can run on a variety of
- terminals. There is even limited support for hardcopy terminals. (On
- a hardcopy terminal, lines which should be printed at the top of the
- screen are prefixed with a caret.)
-
- Commands are based on both more and vi. Commands may be preceded by a
- decimal number, called N in the descriptions below. The number is used
- by some commands, as indicated.
-
-
-COMMANDS
- In the following descriptions, ^X means control-X. ESC stands for the
- ESCAPE key; for example ESC-v means the two character sequence
- "ESCAPE", then "v".
-
- h or H Help: display a summary of these commands. If you forget all
- the other commands, remember this one.
-
- SPACE or ^V or f or ^F
- Scroll forward N lines, default one window (see option -z
- below). If N is more than the screen size, only the final
- screenful is displayed. Warning: some systems use ^V as a spe-
- cial literalization character.
-
- z Like SPACE, but if N is specified, it becomes the new window
- size.
-
- ESC-SPACE
- Like SPACE, but scrolls a full screenful, even if it reaches
- end-of-file in the process.
-
- RETURN or ^N or e or ^E or j or ^J
- Scroll forward N lines, default 1. The entire N lines are dis-
- played, even if N is more than the screen size.
-
- d or ^D
- Scroll forward N lines, default one half of the screen size. If
- N is specified, it becomes the new default for subsequent d and
- u commands.
-
- b or ^B or ESC-v
- Scroll backward N lines, default one window (see option -z
- below). If N is more than the screen size, only the final
- screenful is displayed.
-
- w Like ESC-v, but if N is specified, it becomes the new window
- size.
-
- y or ^Y or ^P or k or ^K
- Scroll backward N lines, default 1. The entire N lines are dis-
- played, even if N is more than the screen size. Warning: some
- systems use ^Y as a special job control character.
-
- u or ^U
- Scroll backward N lines, default one half of the screen size.
- If N is specified, it becomes the new default for subsequent d
- and u commands.
-
- ESC-) or RIGHTARROW
- Scroll horizontally right N characters, default half the screen
- width (see the -# option). If a number N is specified, it
- becomes the default for future RIGHTARROW and LEFTARROW com-
- mands. While the text is scrolled, it acts as though the -S
- option (chop lines) were in effect.
-
- ESC-( or LEFTARROW
- Scroll horizontally left N characters, default half the screen
- width (see the -# option). If a number N is specified, it
- becomes the default for future RIGHTARROW and LEFTARROW com-
- mands.
-
- r or ^R or ^L
- Repaint the screen.
-
- R Repaint the screen, discarding any buffered input. Useful if
- the file is changing while it is being viewed.
-
- F Scroll forward, and keep trying to read when the end of file is
- reached. Normally this command would be used when already at
- the end of the file. It is a way to monitor the tail of a file
- which is growing while it is being viewed. (The behavior is
- similar to the "tail -f" command.)
-
- g or < or ESC-<
- Go to line N in the file, default 1 (beginning of file). (Warn-
- ing: this may be slow if N is large.)
-
- G or > or ESC->
- Go to line N in the file, default the end of the file. (Warn-
- ing: this may be slow if N is large, or if N is not specified
- and standard input, rather than a file, is being read.)
-
- p or % Go to a position N percent into the file. N should be between 0
- and 100, and may contain a decimal point.
-
- P Go to the line containing byte offset N in the file.
-
- { If a left curly bracket appears in the top line displayed on the
- screen, the { command will go to the matching right curly
- bracket. The matching right curly bracket is positioned on the
- bottom line of the screen. If there is more than one left curly
- bracket on the top line, a number N may be used to specify the
- N-th bracket on the line.
-
- } If a right curly bracket appears in the bottom line displayed on
- the screen, the } command will go to the matching left curly
- bracket. The matching left curly bracket is positioned on the
- top line of the screen. If there is more than one right curly
- bracket on the top line, a number N may be used to specify the
- N-th bracket on the line.
-
- ( Like {, but applies to parentheses rather than curly brackets.
-
- ) Like }, but applies to parentheses rather than curly brackets.
-
- [ Like {, but applies to square brackets rather than curly brack-
- ets.
-
- ] Like }, but applies to square brackets rather than curly brack-
- ets.
-
- ESC-^F Followed by two characters, acts like {, but uses the two char-
- acters as open and close brackets, respectively. For example,
- "ESC ^F < >" could be used to go forward to the > which matches
- the < in the top displayed line.
-
- ESC-^B Followed by two characters, acts like }, but uses the two char-
- acters as open and close brackets, respectively. For example,
- "ESC ^B < >" could be used to go backward to the < which matches
- the > in the bottom displayed line.
-
- m Followed by any lowercase letter, marks the current position
- with that letter.
-
- ' (Single quote.) Followed by any lowercase letter, returns to
- the position which was previously marked with that letter. Fol-
- lowed by another single quote, returns to the position at which
- the last "large" movement command was executed. Followed by a ^
- or $, jumps to the beginning or end of the file respectively.
- Marks are preserved when a new file is examined, so the ' com-
- mand can be used to switch between input files.
-
- ^X^X Same as single quote.
-
- /pattern
- Search forward in the file for the N-th line containing the pat-
- tern. N defaults to 1. The pattern is a regular expression, as
- recognized by the regular expression library supplied by your
- system. The search starts at the second line displayed (but see
- the -a and -j options, which change this).
-
- Certain characters are special if entered at the beginning of
- the pattern; they modify the type of search rather than become
- part of the pattern:
-
- ^N or !
- Search for lines which do NOT match the pattern.
-
- ^E or *
- Search multiple files. That is, if the search reaches
- the END of the current file without finding a match, the
- search continues in the next file in the command line
- list.
-
- ^F or @
- Begin the search at the first line of the FIRST file in
- the command line list, regardless of what is currently
- displayed on the screen or the settings of the -a or -j
- options.
-
- ^K Highlight any text which matches the pattern on the cur-
- rent screen, but don't move to the first match (KEEP
- current position).
-
- ^R Don't interpret regular expression metacharacters; that
- is, do a simple textual comparison.
-
- ?pattern
- Search backward in the file for the N-th line containing the
- pattern. The search starts at the line immediately before the
- top line displayed.
-
- Certain characters are special as in the / command:
-
- ^N or !
- Search for lines which do NOT match the pattern.
-
- ^E or *
- Search multiple files. That is, if the search reaches
- the beginning of the current file without finding a
- match, the search continues in the previous file in the
- command line list.
-
- ^F or @
- Begin the search at the last line of the last file in the
- command line list, regardless of what is currently dis-
- played on the screen or the settings of the -a or -j
- options.
-
- ^K As in forward searches.
-
- ^R As in forward searches.
-
- ESC-/pattern
- Same as "/*".
-
- ESC-?pattern
- Same as "?*".
-
- n Repeat previous search, for N-th line containing the last pat-
- tern. If the previous search was modified by ^N, the search is
- made for the N-th line NOT containing the pattern. If the pre-
- vious search was modified by ^E, the search continues in the
- next (or previous) file if not satisfied in the current file.
- If the previous search was modified by ^R, the search is done
- without using regular expressions. There is no effect if the
- previous search was modified by ^F or ^K.
-
- N Repeat previous search, but in the reverse direction.
-
- ESC-n Repeat previous search, but crossing file boundaries. The
- effect is as if the previous search were modified by *.
-
- ESC-N Repeat previous search, but in the reverse direction and cross-
- ing file boundaries.
-
- ESC-u Undo search highlighting. Turn off highlighting of strings
- matching the current search pattern. If highlighting is already
- off because of a previous ESC-u command, turn highlighting back
- on. Any search command will also turn highlighting back on.
- (Highlighting can also be disabled by toggling the -G option; in
- that case search commands do not turn highlighting back on.)
-
- :e [filename]
- Examine a new file. If the filename is missing, the "current"
- file (see the :n and :p commands below) from the list of files
- in the command line is re-examined. A percent sign (%) in the
- filename is replaced by the name of the current file. A pound
- sign (#) is replaced by the name of the previously examined
- file. However, two consecutive percent signs are simply
- replaced with a single percent sign. This allows you to enter a
- filename that contains a percent sign in the name. Similarly,
- two consecutive pound signs are replaced with a single pound
- sign. The filename is inserted into the command line list of
- files so that it can be seen by subsequent :n and :p commands.
- If the filename consists of several files, they are all inserted
- into the list of files and the first one is examined. If the
- filename contains one or more spaces, the entire filename should
- be enclosed in double quotes (also see the -" option).
-
- ^X^V or E
- Same as :e. Warning: some systems use ^V as a special literal-
- ization character. On such systems, you may not be able to use
- ^V.
-
- :n Examine the next file (from the list of files given in the com-
- mand line). If a number N is specified, the N-th next file is
- examined.
-
- :p Examine the previous file in the command line list. If a number
- N is specified, the N-th previous file is examined.
-
- :x Examine the first file in the command line list. If a number N
- is specified, the N-th file in the list is examined.
-
- :d Remove the current file from the list of files.
-
- t Go to the next tag, if there were more than one matches for the
- current tag. See the -t option for more details about tags.
-
- T Go to the previous tag, if there were more than one matches for
- the current tag.
-
- = or ^G or :f
- Prints some information about the file being viewed, including
- its name and the line number and byte offset of the bottom line
- being displayed. If possible, it also prints the length of the
- file, the number of lines in the file and the percent of the
- file above the last displayed line.
-
- - Followed by one of the command line option letters (see OPTIONS
- below), this will change the setting of that option and print a
- message describing the new setting. If a ^P (CONTROL-P) is
- entered immediately after the dash, the setting of the option is
- changed but no message is printed. If the option letter has a
- numeric value (such as -b or -h), or a string value (such as -P
- or -t), a new value may be entered after the option letter. If
- no new value is entered, a message describing the current set-
- ting is printed and nothing is changed.
-
- -- Like the - command, but takes a long option name (see OPTIONS
- below) rather than a single option letter. You must press
- RETURN after typing the option name. A ^P immediately after the
- second dash suppresses printing of a message describing the new
- setting, as in the - command.
-
- -+ Followed by one of the command line option letters this will
- reset the option to its default setting and print a message
- describing the new setting. (The "-+X" command does the same
- thing as "-+X" on the command line.) This does not work for
- string-valued options.
-
- --+ Like the -+ command, but takes a long option name rather than a
- single option letter.
-
- -! Followed by one of the command line option letters, this will
- reset the option to the "opposite" of its default setting and
- print a message describing the new setting. This does not work
- for numeric or string-valued options.
-
- --! Like the -! command, but takes a long option name rather than a
- single option letter.
-
- _ (Underscore.) Followed by one of the command line option let-
- ters, this will print a message describing the current setting
- of that option. The setting of the option is not changed.
-
- __ (Double underscore.) Like the _ (underscore) command, but takes
- a long option name rather than a single option letter. You must
- press RETURN after typing the option name.
-
- +cmd Causes the specified cmd to be executed each time a new file is
- examined. For example, +G causes less to initially display each
- file starting at the end rather than the beginning.
-
- V Prints the version number of less being run.
-
- q or Q or :q or :Q or ZZ
- Exits less.
-
- The following four commands may or may not be valid, depending on your
- particular installation.
-
-
- v Invokes an editor to edit the current file being viewed. The
- editor is taken from the environment variable VISUAL if defined,
- or EDITOR if VISUAL is not defined, or defaults to "vi" if nei-
- ther VISUAL nor EDITOR is defined. See also the discussion of
- LESSEDIT under the section on PROMPTS below.
-
- ! shell-command
- Invokes a shell to run the shell-command given. A percent sign
- (%) in the command is replaced by the name of the current file.
- A pound sign (#) is replaced by the name of the previously exam-
- ined file. "!!" repeats the last shell command. "!" with no
- shell command simply invokes a shell. On Unix systems, the
- shell is taken from the environment variable SHELL, or defaults
- to "sh". On MS-DOS and OS/2 systems, the shell is the normal
- command processor.
-
- | <m> shell-command
- <m> represents any mark letter. Pipes a section of the input
- file to the given shell command. The section of the file to be
- piped is between the first line on the current screen and the
- position marked by the letter. <m> may also be ^ or $ to indi-
- cate beginning or end of file respectively. If <m> is . or new-
- line, the current screen is piped.
-
- s filename
- Save the input to a file. This only works if the input is a
- pipe, not an ordinary file.
-
-
-OPTIONS
- Command line options are described below. Most options may be changed
- while less is running, via the "-" command.
-
- Most options may be given in one of two forms: either a dash followed
- by a single letter, or two dashes followed by a long option name. A
- long option name may be abbreviated as long as the abbreviation is
- unambiguous. For example, --quit-at-eof may be abbreviated --quit, but
- not --qui, since both --quit-at-eof and --quiet begin with --qui. Some
- long option names are in uppercase, such as --QUIT-AT-EOF, as distinct
- from --quit-at-eof. Such option names need only have their first let-
- ter capitalized; the remainder of the name may be in either case. For
- example, --Quit-at-eof is equivalent to --QUIT-AT-EOF.
-
- Options are also taken from the environment variable "LESS". For exam-
- ple, to avoid typing "less -options ..." each time less is invoked, you
- might tell csh:
-
- setenv LESS "-options"
-
- or if you use sh:
-
- LESS="-options"; export LESS
-
- On MS-DOS, you don't need the quotes, but you should replace any per-
- cent signs in the options string by double percent signs.
-
- The environment variable is parsed before the command line, so command
- line options override the LESS environment variable. If an option
- appears in the LESS variable, it can be reset to its default value on
- the command line by beginning the command line option with "-+".
-
- For options like -P or -D which take a following string, a dollar sign
- ($) must be used to signal the end of the string. For example, to set
- two -D options on MS-DOS, you must have a dollar sign between them,
- like this:
-
- LESS="-Dn9.1$-Ds4.1"
-
-
- -? or --help
- This option displays a summary of the commands accepted by less
- (the same as the h command). (Depending on how your shell
- interprets the question mark, it may be necessary to quote the
- question mark, thus: "-\?".)
-
- -a or --search-skip-screen
- Causes searches to start after the last line displayed on the
- screen, thus skipping all lines displayed on the screen. By
- default, searches start at the second line on the screen (or
- after the last found line; see the -j option).
-
- -bn or --buffers=n
- Specifies the amount of buffer space less will use for each
- file, in units of kilobytes (1024 bytes). By default 64K of
- buffer space is used for each file (unless the file is a pipe;
- see the -B option). The -b option specifies instead that n
- kilobytes of buffer space should be used for each file. If n is
- -1, buffer space is unlimited; that is, the entire file can be
- read into memory.
-
- -B or --auto-buffers
- By default, when data is read from a pipe, buffers are allocated
- automatically as needed. If a large amount of data is read from
- the pipe, this can cause a large amount of memory to be allo-
- cated. The -B option disables this automatic allocation of
- buffers for pipes, so that only 64K (or the amount of space
- specified by the -b option) is used for the pipe. Warning: use
- of -B can result in erroneous display, since only the most
- recently viewed part of the piped data is kept in memory; any
- earlier data is lost.
-
- -c or --clear-screen
- Causes full screen repaints to be painted from the top line
- down. By default, full screen repaints are done by scrolling
- from the bottom of the screen.
-
- -C or --CLEAR-SCREEN
- Same as -c, for compatibility with older versions of less.
-
- -d or --dumb
- The -d option suppresses the error message normally displayed if
- the terminal is dumb; that is, lacks some important capability,
- such as the ability to clear the screen or scroll backward. The
- -d option does not otherwise change the behavior of less on a
- dumb terminal.
-
- -Dxcolor or --color=xcolor
- [MS-DOS only] Sets the color of the text displayed. x is a sin-
- gle character which selects the type of text whose color is
- being set: n=normal, s=standout, d=bold, u=underlined, k=blink.
- color is a pair of numbers separated by a period. The first
- number selects the foreground color and the second selects the
- background color of the text. A single number N is the same as
- N.0.
-
- -e or --quit-at-eof
- Causes less to automatically exit the second time it reaches
- end-of-file. By default, the only way to exit less is via the
- "q" command.
-
- -E or --QUIT-AT-EOF
- Causes less to automatically exit the first time it reaches end-
- of-file.
-
- -f or --force
- Forces non-regular files to be opened. (A non-regular file is a
- directory or a device special file.) Also suppresses the warn-
- ing message when a binary file is opened. By default, less will
- refuse to open non-regular files. Note that some operating sys-
- tems will not allow directories to be read, even if -f is set.
-
- -F or --quit-if-one-screen
- Causes less to automatically exit if the entire file can be dis-
- played on the first screen.
-
- -g or --hilite-search
- Normally, less will highlight ALL strings which match the last
- search command. The -g option changes this behavior to high-
- light only the particular string which was found by the last
- search command. This can cause less to run somewhat faster than
- the default.
-
- -G or --HILITE-SEARCH
- The -G option suppresses all highlighting of strings found by
- search commands.
-
- -hn or --max-back-scroll=n
- Specifies a maximum number of lines to scroll backward. If it
- is necessary to scroll backward more than n lines, the screen is
- repainted in a forward direction instead. (If the terminal does
- not have the ability to scroll backward, -h0 is implied.)
-
- -i or --ignore-case
- Causes searches to ignore case; that is, uppercase and lowercase
- are considered identical. This option is ignored if any upper-
- case letters appear in the search pattern; in other words, if a
- pattern contains uppercase letters, then that search does not
- ignore case.
-
- -I or --IGNORE-CASE
- Like -i, but searches ignore case even if the pattern contains
- uppercase letters.
-
- -jn or --jump-target=n
- Specifies a line on the screen where the "target" line is to be
- positioned. The target line is the line specified by any com-
- mand to search for a pattern, jump to a line number, jump to a
- file percentage or jump to a tag. The screen line may be speci-
- fied by a number: the top line on the screen is 1, the next is
- 2, and so on. The number may be negative to specify a line rel-
- ative to the bottom of the screen: the bottom line on the screen
- is -1, the second to the bottom is -2, and so on. Alternately,
- the screen line may be specified as a fraction of the height of
- the screen, starting with a decimal point: .5 is in the middle
- of the screen, .3 is three tenths down from the first line, and
- so on. If the line is specified as a fraction, the actual line
- number is recalculated if the terminal window is resized, so
- that the target line remains at the specified fraction of the
- screen height. If any form of the -j option is used, forward
- searches begin at the line immediately after the target line,
- and backward searches begin at the target line. For example, if
- "-j4" is used, the target line is the fourth line on the screen,
- so forward searches begin at the fifth line on the screen.
-
- -J or --status-column
- Displays a status column at the left edge of the screen. The
- status column shows the lines that matched the current search.
- The status column is also used if the -w or -W option is in
- effect.
-
- -kfilename or --lesskey-file=filename
- Causes less to open and interpret the named file as a lesskey
- (1) file. Multiple -k options may be specified. If the LESSKEY
- or LESSKEY_SYSTEM environment variable is set, or if a lesskey
- file is found in a standard place (see KEY BINDINGS), it is also
- used as a lesskey file.
-
- -K or --quit-on-intr
- Causes less to exit immediately when an interrupt character
- (usually ^C) is typed. Normally, an interrupt character causes
- less to stop whatever it is doing and return to its command
- prompt. Note that use of this option makes it impossible to
- return to the command prompt from the "F" command.
-
- -L or --no-lessopen
- Ignore the LESSOPEN environment variable (see the INPUT PREPRO-
- CESSOR section below). This option can be set from within less,
- but it will apply only to files opened subsequently, not to the
- file which is currently open.
-
- -m or --long-prompt
- Causes less to prompt verbosely (like more), with the percent
- into the file. By default, less prompts with a colon.
-
- -M or --LONG-PROMPT
- Causes less to prompt even more verbosely than more.
-
- -n or --line-numbers
- Suppresses line numbers. The default (to use line numbers) may
- cause less to run more slowly in some cases, especially with a
- very large input file. Suppressing line numbers with the -n
- option will avoid this problem. Using line numbers means: the
- line number will be displayed in the verbose prompt and in the =
- command, and the v command will pass the current line number to
- the editor (see also the discussion of LESSEDIT in PROMPTS
- below).
-
- -N or --LINE-NUMBERS
- Causes a line number to be displayed at the beginning of each
- line in the display.
-
- -ofilename or --log-file=filename
- Causes less to copy its input to the named file as it is being
- viewed. This applies only when the input file is a pipe, not an
- ordinary file. If the file already exists, less will ask for
- confirmation before overwriting it.
-
- -Ofilename or --LOG-FILE=filename
- The -O option is like -o, but it will overwrite an existing file
- without asking for confirmation.
-
- If no log file has been specified, the -o and -O options can be
- used from within less to specify a log file. Without a file
- name, they will simply report the name of the log file. The "s"
- command is equivalent to specifying -o from within less.
-
- -ppattern or --pattern=pattern
- The -p option on the command line is equivalent to specifying
- +/pattern; that is, it tells less to start at the first occur-
- rence of pattern in the file.
-
- -Pprompt or --prompt=prompt
- Provides a way to tailor the three prompt styles to your own
- preference. This option would normally be put in the LESS envi-
- ronment variable, rather than being typed in with each less com-
- mand. Such an option must either be the last option in the LESS
- variable, or be terminated by a dollar sign. -Ps followed by a
- string changes the default (short) prompt to that string. -Pm
- changes the medium (-m) prompt. -PM changes the long (-M)
- prompt. -Ph changes the prompt for the help screen. -P=
- changes the message printed by the = command. -Pw changes the
- message printed while waiting for data (in the F command). All
- prompt strings consist of a sequence of letters and special
- escape sequences. See the section on PROMPTS for more details.
-
- -q or --quiet or --silent
- Causes moderately "quiet" operation: the terminal bell is not
- rung if an attempt is made to scroll past the end of the file or
- before the beginning of the file. If the terminal has a "visual
- bell", it is used instead. The bell will be rung on certain
- other errors, such as typing an invalid character. The default
- is to ring the terminal bell in all such cases.
-
- -Q or --QUIET or --SILENT
- Causes totally "quiet" operation: the terminal bell is never
- rung.
-
- -r or --raw-control-chars
- Causes "raw" control characters to be displayed. The default is
- to display control characters using the caret notation; for
- example, a control-A (octal 001) is displayed as "^A". Warning:
- when the -r option is used, less cannot keep track of the actual
- appearance of the screen (since this depends on how the screen
- responds to each type of control character). Thus, various dis-
- play problems may result, such as long lines being split in the
- wrong place.
-
- -R or --RAW-CONTROL-CHARS
- Like -r, but only ANSI "color" escape sequences are output in
- "raw" form. Unlike -r, the screen appearance is maintained cor-
- rectly in most cases. ANSI "color" escape sequences are
- sequences of the form:
-
- ESC [ ... m
-
- where the "..." is zero or more color specification characters
- For the purpose of keeping track of screen appearance, ANSI
- color escape sequences are assumed to not move the cursor. You
- can make less think that characters other than "m" can end ANSI
- color escape sequences by setting the environment variable
- LESSANSIENDCHARS to the list of characters which can end a color
- escape sequence. And you can make less think that characters
- other than the standard ones may appear between the ESC and the
- m by setting the environment variable LESSANSIMIDCHARS to the
- list of characters which can appear.
-
- -s or --squeeze-blank-lines
- Causes consecutive blank lines to be squeezed into a single
- blank line. This is useful when viewing nroff output.
-
- -S or --chop-long-lines
- Causes lines longer than the screen width to be chopped rather
- than folded. That is, the portion of a long line that does not
- fit in the screen width is not shown. The default is to fold
- long lines; that is, display the remainder on the next line.
-
- -ttag or --tag=tag
- The -t option, followed immediately by a TAG, will edit the file
- containing that tag. For this to work, tag information must be
- available; for example, there may be a file in the current
- directory called "tags", which was previously built by ctags (1)
- or an equivalent command. If the environment variable LESSGLOB-
- ALTAGS is set, it is taken to be the name of a command compati-
- ble with global (1), and that command is executed to find the
- tag. (See http://www.gnu.org/software/global/global.html). The
- -t option may also be specified from within less (using the -
- command) as a way of examining a new file. The command ":t" is
- equivalent to specifying -t from within less.
-
- -Ttagsfile or --tag-file=tagsfile
- Specifies a tags file to be used instead of "tags".
-
- -u or --underline-special
- Causes backspaces and carriage returns to be treated as print-
- able characters; that is, they are sent to the terminal when
- they appear in the input.
-
- -U or --UNDERLINE-SPECIAL
- Causes backspaces, tabs and carriage returns to be treated as
- control characters; that is, they are handled as specified by
- the -r option.
-
- By default, if neither -u nor -U is given, backspaces which
- appear adjacent to an underscore character are treated spe-
- cially: the underlined text is displayed using the terminal's
- hardware underlining capability. Also, backspaces which appear
- between two identical characters are treated specially: the
- overstruck text is printed using the terminal's hardware bold-
- face capability. Other backspaces are deleted, along with the
- preceding character. Carriage returns immediately followed by a
- newline are deleted. other carriage returns are handled as
- specified by the -r option. Text which is overstruck or under-
- lined can be searched for if neither -u nor -U is in effect.
-
- -V or --version
- Displays the version number of less.
-
- -w or --hilite-unread
- Temporarily highlights the first "new" line after a forward
- movement of a full page. The first "new" line is the line imme-
- diately following the line previously at the bottom of the
- screen. Also highlights the target line after a g or p command.
- The highlight is removed at the next command which causes move-
- ment. The entire line is highlighted, unless the -J option is
- in effect, in which case only the status column is highlighted.
-
- -W or --HILITE-UNREAD
- Like -w, but temporarily highlights the first new line after any
- forward movement command larger than one line.
-
- -xn,... or --tabs=n,...
- Sets tab stops. If only one n is specified, tab stops are set
- at multiples of n. If multiple values separated by commas are
- specified, tab stops are set at those positions, and then con-
- tinue with the same spacing as the last two. For example,
- -x9,17 will set tabs at positions 9, 17, 25, 33, etc. The
- default for n is 8.
-
- -X or --no-init
- Disables sending the termcap initialization and deinitialization
- strings to the terminal. This is sometimes desirable if the
- deinitialization string does something unnecessary, like clear-
- ing the screen.
-
- -yn or --max-forw-scroll=n
- Specifies a maximum number of lines to scroll forward. If it is
- necessary to scroll forward more than n lines, the screen is
- repainted instead. The -c or -C option may be used to repaint
- from the top of the screen if desired. By default, any forward
- movement causes scrolling.
-
- -[z]n or --window=n
- Changes the default scrolling window size to n lines. The
- default is one screenful. The z and w commands can also be used
- to change the window size. The "z" may be omitted for compati-
- bility with some versions of more. If the number n is negative,
- it indicates n lines less than the current screen size. For
- example, if the screen is 24 lines, -z-4 sets the scrolling win-
- dow to 20 lines. If the screen is resized to 40 lines, the
- scrolling window automatically changes to 36 lines.
-
- -"cc or --quotes=cc
- Changes the filename quoting character. This may be necessary
- if you are trying to name a file which contains both spaces and
- quote characters. Followed by a single character, this changes
- the quote character to that character. Filenames containing a
- space should then be surrounded by that character rather than by
- double quotes. Followed by two characters, changes the open
- quote to the first character, and the close quote to the second
- character. Filenames containing a space should then be preceded
- by the open quote character and followed by the close quote
- character. Note that even after the quote characters are
- changed, this option remains -" (a dash followed by a double
- quote).
-
- -~ or --tilde
- Normally lines after end of file are displayed as a single tilde
- (~). This option causes lines after end of file to be displayed
- as blank lines.
-
- -# or --shift
- Specifies the default number of positions to scroll horizontally
- in the RIGHTARROW and LEFTARROW commands. If the number speci-
- fied is zero, it sets the default number of positions to one
- half of the screen width.
-
- --no-keypad
- Disables sending the keypad initialization and deinitialization
- strings to the terminal. This is sometimes useful if the keypad
- strings make the numeric keypad behave in an undesirable manner.
-
- --follow-name
- Normally, if the input file is renamed while an F command is
- executing, less will continue to display the contents of the
- original file despite its name change. If --follow-name is
- specified, during an F command less will periodically attempt to
- reopen the file by name. If the reopen succeeds and the file is
- a different file from the original (which means that a new file
- has been created with the same name as the original (now
- renamed) file), less will display the contents of that new file.
-
- -- A command line argument of "--" marks the end of option argu-
- ments. Any arguments following this are interpreted as file-
- names. This can be useful when viewing a file whose name begins
- with a "-" or "+".
-
- + If a command line option begins with +, the remainder of that
- option is taken to be an initial command to less. For example,
- +G tells less to start at the end of the file rather than the
- beginning, and +/xyz tells it to start at the first occurrence
- of "xyz" in the file. As a special case, +<number> acts like
- +<number>g; that is, it starts the display at the specified line
- number (however, see the caveat under the "g" command above).
- If the option starts with ++, the initial command applies to
- every file being viewed, not just the first one. The + command
- described previously may also be used to set (or change) an ini-
- tial command for every file.
-
-
-LINE EDITING
- When entering command line at the bottom of the screen (for example, a
- filename for the :e command, or the pattern for a search command), cer-
- tain keys can be used to manipulate the command line. Most commands
- have an alternate form in [ brackets ] which can be used if a key does
- not exist on a particular keyboard. (The bracketed forms do not work
- in the MS-DOS version.) Any of these special keys may be entered lit-
- erally by preceding it with the "literal" character, either ^V or ^A.
- A backslash itself may also be entered literally by entering two back-
- slashes.
-
- LEFTARROW [ ESC-h ]
- Move the cursor one space to the left.
-
- RIGHTARROW [ ESC-l ]
- Move the cursor one space to the right.
-
- ^LEFTARROW [ ESC-b or ESC-LEFTARROW ]
- (That is, CONTROL and LEFTARROW simultaneously.) Move the cur-
- sor one word to the left.
-
- ^RIGHTARROW [ ESC-w or ESC-RIGHTARROW ]
- (That is, CONTROL and RIGHTARROW simultaneously.) Move the cur-
- sor one word to the right.
-
- HOME [ ESC-0 ]
- Move the cursor to the beginning of the line.
-
- END [ ESC-$ ]
- Move the cursor to the end of the line.
-
- BACKSPACE
- Delete the character to the left of the cursor, or cancel the
- command if the command line is empty.
-
- DELETE or [ ESC-x ]
- Delete the character under the cursor.
-
- ^BACKSPACE [ ESC-BACKSPACE ]
- (That is, CONTROL and BACKSPACE simultaneously.) Delete the
- word to the left of the cursor.
-
- ^DELETE [ ESC-X or ESC-DELETE ]
- (That is, CONTROL and DELETE simultaneously.) Delete the word
- under the cursor.
-
- UPARROW [ ESC-k ]
- Retrieve the previous command line.
-
- DOWNARROW [ ESC-j ]
- Retrieve the next command line.
-
- TAB Complete the partial filename to the left of the cursor. If it
- matches more than one filename, the first match is entered into
- the command line. Repeated TABs will cycle thru the other
- matching filenames. If the completed filename is a directory, a
- "/" is appended to the filename. (On MS-DOS systems, a "\" is
- appended.) The environment variable LESSSEPARATOR can be used
- to specify a different character to append to a directory name.
-
- BACKTAB [ ESC-TAB ]
- Like, TAB, but cycles in the reverse direction thru the matching
- filenames.
-
- ^L Complete the partial filename to the left of the cursor. If it
- matches more than one filename, all matches are entered into the
- command line (if they fit).
-
- ^U (Unix and OS/2) or ESC (MS-DOS)
- Delete the entire command line, or cancel the command if the
- command line is empty. If you have changed your line-kill char-
- acter in Unix to something other than ^U, that character is used
- instead of ^U.
-
-
-KEY BINDINGS
- You may define your own less commands by using the program lesskey (1)
- to create a lesskey file. This file specifies a set of command keys
- and an action associated with each key. You may also use lesskey to
- change the line-editing keys (see LINE EDITING), and to set environment
- variables. If the environment variable LESSKEY is set, less uses that
- as the name of the lesskey file. Otherwise, less looks in a standard
- place for the lesskey file: On Unix systems, less looks for a lesskey
- file called "$HOME/.less". On MS-DOS and Windows systems, less looks
- for a lesskey file called "$HOME/_less", and if it is not found there,
- then looks for a lesskey file called "_less" in any directory specified
- in the PATH environment variable. On OS/2 systems, less looks for a
- lesskey file called "$HOME/less.ini", and if it is not found, then
- looks for a lesskey file called "less.ini" in any directory specified
- in the INIT environment variable, and if it not found there, then looks
- for a lesskey file called "less.ini" in any directory specified in the
- PATH environment variable. See the lesskey manual page for more
- details.
-
- A system-wide lesskey file may also be set up to provide key bindings.
- If a key is defined in both a local lesskey file and in the system-wide
- file, key bindings in the local file take precedence over those in the
- system-wide file. If the environment variable LESSKEY_SYSTEM is set,
- less uses that as the name of the system-wide lesskey file. Otherwise,
- less looks in a standard place for the system-wide lesskey file: On
- Unix systems, the system-wide lesskey file is /usr/local/etc/sysless.
- (However, if less was built with a different sysconf directory than
- /usr/local/etc, that directory is where the sysless file is found.) On
- MS-DOS and Windows systems, the system-wide lesskey file is c:\_sys-
- less. On OS/2 systems, the system-wide lesskey file is c:\sysless.ini.
-
-
-INPUT PREPROCESSOR
- You may define an "input preprocessor" for less. Before less opens a
- file, it first gives your input preprocessor a chance to modify the way
- the contents of the file are displayed. An input preprocessor is sim-
- ply an executable program (or shell script), which writes the contents
- of the file to a different file, called the replacement file. The con-
- tents of the replacement file are then displayed in place of the con-
- tents of the original file. However, it will appear to the user as if
- the original file is opened; that is, less will display the original
- filename as the name of the current file.
-
- An input preprocessor receives one command line argument, the original
- filename, as entered by the user. It should create the replacement
- file, and when finished, print the name of the replacement file to its
- standard output. If the input preprocessor does not output a replace-
- ment filename, less uses the original file, as normal. The input pre-
- processor is not called when viewing standard input. To set up an
- input preprocessor, set the LESSOPEN environment variable to a command
- line which will invoke your input preprocessor. This command line
- should include one occurrence of the string "%s", which will be
- replaced by the filename when the input preprocessor command is
- invoked.
-
- When less closes a file opened in such a way, it will call another pro-
- gram, called the input postprocessor, which may perform any desired
- clean-up action (such as deleting the replacement file created by
- LESSOPEN). This program receives two command line arguments, the orig-
- inal filename as entered by the user, and the name of the replacement
- file. To set up an input postprocessor, set the LESSCLOSE environment
- variable to a command line which will invoke your input postprocessor.
- It may include two occurrences of the string "%s"; the first is
- replaced with the original name of the file and the second with the
- name of the replacement file, which was output by LESSOPEN.
-
- For example, on many Unix systems, these two scripts will allow you to
- keep files in compressed format, but still let less view them directly:
-
- lessopen.sh:
- #! /bin/sh
- case "$1" in
- *.Z) uncompress -
- if [ -s /tmp/less.$$ ]; then
- echo /tmp/less.$$
- else
- rm -f /tmp/less.$$
- fi
- ;;
- esac
-
- lessclose.sh:
- #! /bin/sh
- rm $2
-
- To use these scripts, put them both where they can be executed and set
- LESSOPEN="lessopen.sh %s", and LESSCLOSE="lessclose.sh %s %s". More
- complex LESSOPEN and LESSCLOSE scripts may be written to accept other
- types of compressed files, and so on.
-
- It is also possible to set up an input preprocessor to pipe the file
- data directly to less, rather than putting the data into a replacement
- file. This avoids the need to decompress the entire file before start-
- ing to view it. An input preprocessor that works this way is called an
- input pipe. An input pipe, instead of writing the name of a replace-
- ment file on its standard output, writes the entire contents of the
- replacement file on its standard output. If the input pipe does not
- write any characters on its standard output, then there is no replace-
- ment file and less uses the original file, as normal. To use an input
- pipe, make the first character in the LESSOPEN environment variable a
- vertical bar (|) to signify that the input preprocessor is an input
- pipe.
-
- For example, on many Unix systems, this script will work like the pre-
- vious example scripts:
-
- lesspipe.sh:
- #! /bin/sh
- case "$1" in
- *.Z) uncompress -c $1 2>/dev/null
- ;;
- esac
-
- To use this script, put it where it can be executed and set
- LESSOPEN="|lesspipe.sh %s". When an input pipe is used, a LESSCLOSE
- postprocessor can be used, but it is usually not necessary since there
- is no replacement file to clean up. In this case, the replacement file
- name passed to the LESSCLOSE postprocessor is "-".
-
-
-NATIONAL CHARACTER SETS
- There are three types of characters in the input file:
-
- normal characters
- can be displayed directly to the screen.
-
- control characters
- should not be displayed directly, but are expected to be found
- in ordinary text files (such as backspace and tab).
-
- binary characters
- should not be displayed directly and are not expected to be
- found in text files.
-
- A "character set" is simply a description of which characters are to be
- considered normal, control, and binary. The LESSCHARSET environment
- variable may be used to select a character set. Possible values for
- LESSCHARSET are:
-
- ascii BS, TAB, NL, CR, and formfeed are control characters, all chars
- with values between 32 and 126 are normal, and all others are
- binary.
-
- iso8859
- Selects an ISO 8859 character set. This is the same as ASCII,
- except characters between 160 and 255 are treated as normal
- characters.
-
- latin1 Same as iso8859.
-
- latin9 Same as iso8859.
-
- dos Selects a character set appropriate for MS-DOS.
-
- ebcdic Selects an EBCDIC character set.
-
- IBM-1047
- Selects an EBCDIC character set used by OS/390 Unix Services.
- This is the EBCDIC analogue of latin1. You get similar results
- by setting either LESSCHARSET=IBM-1047 or LC_CTYPE=en_US in your
- environment.
-
- koi8-r Selects a Russian character set.
-
- next Selects a character set appropriate for NeXT computers.
-
- utf-8 Selects the UTF-8 encoding of the ISO 10646 character set.
- UTF-8 is special in that it supports multi-byte characters in
- the input file. It is the only character set that supports
- multi-byte characters.
-
- windows
- Selects a character set appropriate for Microsoft Windows (cp
- 1251).
-
- In special cases, it may be desired to tailor less to use a character
- set other than the ones definable by LESSCHARSET. In this case, the
- environment variable LESSCHARDEF can be used to define a character set.
- It should be set to a string where each character in the string repre-
- sents one character in the character set. The character "." is used
- for a normal character, "c" for control, and "b" for binary. A decimal
- number may be used for repetition. For example, "bccc4b." would mean
- character 0 is binary, 1, 2 and 3 are control, 4, 5, 6 and 7 are
- binary, and 8 is normal. All characters after the last are taken to be
- the same as the last, so characters 9 through 255 would be normal.
- (This is an example, and does not necessarily represent any real char-
- acter set.)
-
- This table shows the value of LESSCHARDEF which is equivalent to each
- of the possible values for LESSCHARSET:
-
- ascii 8bcccbcc18b95.b
- dos 8bcccbcc12bc5b95.b.
- ebcdic 5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b
- 9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b.
- IBM-1047 4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc
- 191.b
- iso8859 8bcccbcc18b95.33b.
- koi8-r 8bcccbcc18b95.b128.
- latin1 8bcccbcc18b95.33b.
- next 8bcccbcc18b95.bb125.bb
-
- If neither LESSCHARSET nor LESSCHARDEF is set, but any of the strings
- "UTF-8", "UTF8", "utf-8" or "utf8" is found in the LC_ALL, LC_TYPE or
- LANG environment variables, then the default character set is utf-8.
-
- If that string is not found, but your system supports the setlocale
- interface, less will use setlocale to determine the character set.
- setlocale is controlled by setting the LANG or LC_CTYPE environment
- variables.
-
- Finally, if the setlocale interface is also not available, the default
- character set is latin1.
-
- Control and binary characters are displayed in standout (reverse
- video). Each such character is displayed in caret notation if possible
- (e.g. ^A for control-A). Caret notation is used only if inverting the
- 0100 bit results in a normal printable character. Otherwise, the char-
- acter is displayed as a hex number in angle brackets. This format can
- be changed by setting the LESSBINFMT environment variable. LESSBINFMT
- may begin with a "*" and one character to select the display attribute:
- "*k" is blinking, "*d" is bold, "*u" is underlined, "*s" is standout,
- and "*n" is normal. If LESSBINFMT does not begin with a "*", normal
- attribute is assumed. The remainder of LESSBINFMT is a string which
- may include one printf-style escape sequence (a % followed by x, X, o,
- d, etc.). For example, if LESSBINFMT is "*u[%x]", binary characters
- are displayed in underlined hexadecimal surrounded by brackets. The
- default if no LESSBINFMT is specified is "*s<%X>". The default if no
- LESSBINFMT is specified is "*s<%02X>". Warning: the result of expand-
- ing the character via LESSBINFMT must be less than 31 characters.
-
- When the character set is utf-8, the LESSUTFBINFMT environment variable
- acts similarly to LESSBINFMT but it applies to Unicode code points that
- were successfully decoded but are unsuitable for display (e.g., unas-
- signed code points). Its default value is "<U+%04lX>". Note that
- LESSUTFBINFMT and LESSBINFMT share their display attribute setting
- ("*x") so specifying one will affect both; LESSUTFBINFMT is read after
- LESSBINFMT so its setting, if any, will have priority. Problematic
- octets in a UTF-8 file (octets of a truncated sequence, octets of a
- complete but non-shortest form sequence, illegal octets, and stray
- trailing octets) are displayed individually using LESSBINFMT so as to
- facilitate diagnostic of how the UTF-8 file is ill-formed.
-
-
-PROMPTS
- The -P option allows you to tailor the prompt to your preference. The
- string given to the -P option replaces the specified prompt string.
- Certain characters in the string are interpreted specially. The prompt
- mechanism is rather complicated to provide flexibility, but the ordi-
- nary user need not understand the details of constructing personalized
- prompt strings.
-
- A percent sign followed by a single character is expanded according to
- what the following character is:
-
- %bX Replaced by the byte offset into the current input file. The b
- is followed by a single character (shown as X above) which spec-
- ifies the line whose byte offset is to be used. If the charac-
- ter is a "t", the byte offset of the top line in the display is
- used, an "m" means use the middle line, a "b" means use the bot-
- tom line, a "B" means use the line just after the bottom line,
- and a "j" means use the "target" line, as specified by the -j
- option.
-
- %B Replaced by the size of the current input file.
-
- %c Replaced by the column number of the text appearing in the first
- column of the screen.
-
- %dX Replaced by the page number of a line in the input file. The
- line to be used is determined by the X, as with the %b option.
-
- %D Replaced by the number of pages in the input file, or equiva-
- lently, the page number of the last line in the input file.
-
- %E Replaced by the name of the editor (from the VISUAL environment
- variable, or the EDITOR environment variable if VISUAL is not
- defined). See the discussion of the LESSEDIT feature below.
-
- %f Replaced by the name of the current input file.
-
- %i Replaced by the index of the current file in the list of input
- files.
-
- %lX Replaced by the line number of a line in the input file. The
- line to be used is determined by the X, as with the %b option.
-
- %L Replaced by the line number of the last line in the input file.
-
- %m Replaced by the total number of input files.
-
- %pX Replaced by the percent into the current input file, based on
- byte offsets. The line used is determined by the X as with the
- %b option.
-
- %PX Replaced by the percent into the current input file, based on
- line numbers. The line used is determined by the X as with the
- %b option.
-
- %s Same as %B.
-
- %t Causes any trailing spaces to be removed. Usually used at the
- end of the string, but may appear anywhere.
-
- %x Replaced by the name of the next input file in the list.
-
- If any item is unknown (for example, the file size if input is a pipe),
- a question mark is printed instead.
-
- The format of the prompt string can be changed depending on certain
- conditions. A question mark followed by a single character acts like
- an "IF": depending on the following character, a condition is evalu-
- ated. If the condition is true, any characters following the question
- mark and condition character, up to a period, are included in the
- prompt. If the condition is false, such characters are not included.
- A colon appearing between the question mark and the period can be used
- to establish an "ELSE": any characters between the colon and the period
- are included in the string if and only if the IF condition is false.
- Condition characters (which follow a question mark) may be:
-
- ?a True if any characters have been included in the prompt so far.
-
- ?bX True if the byte offset of the specified line is known.
-
- ?B True if the size of current input file is known.
-
- ?c True if the text is horizontally shifted (%c is not zero).
-
- ?dX True if the page number of the specified line is known.
-
- ?e True if at end-of-file.
-
- ?f True if there is an input filename (that is, if input is not a
- pipe).
-
- ?lX True if the line number of the specified line is known.
-
- ?L True if the line number of the last line in the file is known.
-
- ?m True if there is more than one input file.
-
- ?n True if this is the first prompt in a new input file.
-
- ?pX True if the percent into the current input file, based on byte
- offsets, of the specified line is known.
-
- ?PX True if the percent into the current input file, based on line
- numbers, of the specified line is known.
-
- ?s Same as "?B".
-
- ?x True if there is a next input file (that is, if the current
- input file is not the last one).
-
- Any characters other than the special ones (question mark, colon,
- period, percent, and backslash) become literally part of the prompt.
- Any of the special characters may be included in the prompt literally
- by preceding it with a backslash.
-
- Some examples:
-
- ?f%f:Standard input.
-
- This prompt prints the filename, if known; otherwise the string "Stan-
- dard input".
-
- ?f%f .?ltLine %lt:?pt%pt\%:?btByte %bt:-...
-
- This prompt would print the filename, if known. The filename is fol-
- lowed by the line number, if known, otherwise the percent if known,
- otherwise the byte offset if known. Otherwise, a dash is printed.
- Notice how each question mark has a matching period, and how the %
- after the %pt is included literally by escaping it with a backslash.
-
- ?n?f%f .?m(file %i of %m) ..?e(END) ?x- Next\: %x..%t
-
- This prints the filename if this is the first prompt in a file, fol-
- lowed by the "file N of N" message if there is more than one input
- file. Then, if we are at end-of-file, the string "(END)" is printed
- followed by the name of the next file, if there is one. Finally, any
- trailing spaces are truncated. This is the default prompt. For refer-
- ence, here are the defaults for the other two prompts (-m and -M
- respectively). Each is broken into two lines here for readability
- only.
-
- ?n?f%f .?m(file %i of %m) ..?e(END) ?x- Next\: %x.:
- ?pB%pB\%:byte %bB?s/%s...%t
-
- ?f%f .?n?m(file %i of %m) ..?ltlines %lt-%lb?L/%L. :
- byte %bB?s/%s. .?e(END) ?x- Next\: %x.:?pB%pB\%..%t
-
- And here is the default message produced by the = command:
-
- ?f%f .?m(file %i of %m) .?ltlines %lt-%lb?L/%L. .
- byte %bB?s/%s. ?e(END) :?pB%pB\%..%t
-
- The prompt expansion features are also used for another purpose: if an
- environment variable LESSEDIT is defined, it is used as the command to
- be executed when the v command is invoked. The LESSEDIT string is
- expanded in the same way as the prompt strings. The default value for
- LESSEDIT is:
-
- %E ?lm+%lm. %f
-
- Note that this expands to the editor name, followed by a + and the line
- number, followed by the file name. If your editor does not accept the
- "+linenumber" syntax, or has other differences in invocation syntax,
- the LESSEDIT variable can be changed to modify this default.
-
-
-SECURITY
- When the environment variable LESSSECURE is set to 1, less runs in a
- "secure" mode. This means these features are disabled:
-
- ! the shell command
-
- | the pipe command
-
- :e the examine command.
-
- v the editing command
-
- s -o log files
-
- -k use of lesskey files
-
- -t use of tags files
-
- metacharacters in filenames, such as *
-
- filename completion (TAB, ^L)
-
- Less can also be compiled to be permanently in "secure" mode.
-
-
-COMPATIBILITY WITH MORE
- If the environment variable LESS_IS_MORE is set to 1, or if the program
- is invoked via a file link named "more", less behaves (mostly) in con-
- formance with the POSIX "more" command specification. In this mode,
- less behaves differently in these ways:
-
- The -e option works differently. If the -e option is not set, less
- behaves as if the -E option were set. If the -e option is set, less
- behaves as if the -e and -F options were set.
-
- The -m option works differently. If the -m option is not set, the
- medium prompt is used, and it is prefixed with the string "--More--".
- If the -m option is set, the short prompt is used.
-
- The -n option acts like the -z option. The normal behavior of the -n
- option is unavailable in this mode.
-
- The parameter to the -p option is taken to be a less command rather
- than a search pattern.
-
- The LESS environment variable is ignored, and the MORE environment
- variable is used in its place.
-
-
-ENVIRONMENT VARIABLES
- Environment variables may be specified either in the system environment
- as usual, or in a lesskey (1) file. If environment variables are
- defined in more than one place, variables defined in a local lesskey
- file take precedence over variables defined in the system environment,
- which take precedence over variables defined in the system-wide lesskey
- file.
-
- COLUMNS
- Sets the number of columns on the screen. Takes precedence over
- the number of columns specified by the TERM variable. (But if
- you have a windowing system which supports TIOCGWINSZ or
- WIOCGETD, the window system's idea of the screen size takes
- precedence over the LINES and COLUMNS environment variables.)
-
- EDITOR The name of the editor (used for the v command).
-
- HOME Name of the user's home directory (used to find a lesskey file
- on Unix and OS/2 systems).
-
- HOMEDRIVE, HOMEPATH
- Concatenation of the HOMEDRIVE and HOMEPATH environment vari-
- ables is the name of the user's home directory if the HOME vari-
- able is not set (only in the Windows version).
-
- INIT Name of the user's init directory (used to find a lesskey file
- on OS/2 systems).
-
- LANG Language for determining the character set.
-
- LC_CTYPE
- Language for determining the character set.
-
- LESS Options which are passed to less automatically.
-
- LESSANSIENDCHARS
- Characters which may end an ANSI color escape sequence (default
- "m").
-
- LESSANSIMIDCHARS
- Characters which may appear between the ESC character and the
- end character in an ANSI color escape sequence (default
- "0123456789;[?!"'#%()*+ ".
-
- LESSBINFMT
- Format for displaying non-printable, non-control characters.
-
- LESSCHARDEF
- Defines a character set.
-
- LESSCHARSET
- Selects a predefined character set.
-
- LESSCLOSE
- Command line to invoke the (optional) input-postprocessor.
-
- LESSECHO
- Name of the lessecho program (default "lessecho"). The lessecho
- program is needed to expand metacharacters, such as * and ?, in
- filenames on Unix systems.
-
- LESSEDIT
- Editor prototype string (used for the v command). See discus-
- sion under PROMPTS.
-
- LESSGLOBALTAGS
- Name of the command used by the -t option to find global tags.
- Normally should be set to "global" if your system has the global
- (1) command. If not set, global tags are not used.
-
- LESSHISTFILE
- Name of the history file used to remember search commands and
- shell commands between invocations of less. If set to "-" or
- "/dev/null", a history file is not used. The default is
- "$HOME/.lesshst" on Unix systems, "$HOME/_lesshst" on DOS and
- Windows systems, or "$HOME/lesshst.ini" or "$INIT/lesshst.ini"
- on OS/2 systems.
-
- LESSHISTSIZE
- The maximum number of commands to save in the history file. The
- default is 100.
-
- LESSKEY
- Name of the default lesskey(1) file.
-
- LESSKEY_SYSTEM
- Name of the default system-wide lesskey(1) file.
-
- LESSMETACHARS
- List of characters which are considered "metacharacters" by the
- shell.
-
- LESSMETAESCAPE
- Prefix which less will add before each metacharacter in a com-
- mand sent to the shell. If LESSMETAESCAPE is an empty string,
- commands containing metacharacters will not be passed to the
- shell.
-
- LESSOPEN
- Command line to invoke the (optional) input-preprocessor.
-
- LESSSECURE
- Runs less in "secure" mode. See discussion under SECURITY.
-
- LESSSEPARATOR
- String to be appended to a directory name in filename comple-
- tion.
-
- LESSUTFBINFMT
- Format for displaying non-printable Unicode code points.
-
- LESS_IS_MORE
- Emulate the more (1) command.
-
- LINES Sets the number of lines on the screen. Takes precedence over
- the number of lines specified by the TERM variable. (But if you
- have a windowing system which supports TIOCGWINSZ or WIOCGETD,
- the window system's idea of the screen size takes precedence
- over the LINES and COLUMNS environment variables.)
-
- PATH User's search path (used to find a lesskey file on MS-DOS and
- OS/2 systems).
-
- SHELL The shell used to execute the ! command, as well as to expand
- filenames.
-
- TERM The type of terminal on which less is being run.
-
- VISUAL The name of the editor (used for the v command).
-
-
-SEE ALSO
- lesskey(1)
-
-
-WARNINGS
- The = command and prompts (unless changed by -P) report the line num-
- bers of the lines at the top and bottom of the screen, but the byte and
- percent of the line after the one at the bottom of the screen.
-
- On certain older terminals (the so-called "magic cookie" terminals),
- search highlighting will cause an erroneous display. On such termi-
- nals, search highlighting is disabled by default to avoid possible
- problems.
-
- When searching in a binary file, text which follows a null byte may not
- be found. This problem does not occur when searching with regular
- expressions turned off via ^R, and also does not occur when less is
- compiled to use the PCRE regular expression library.
-
- In certain cases, when search highlighting is enabled and a search pat-
- tern begins with a ^, more text than the matching string may be high-
- lighted. (This problem does not occur when less is compiled to use the
- POSIX regular expression package.)
-
- On some systems, setlocale claims that ASCII characters 0 thru 31 are
- control characters rather than binary characters. This causes less to
- treat some binary files as ordinary, non-binary files. To workaround
- this problem, set the environment variable LESSCHARSET to "ascii" (or
- whatever character set is appropriate).
-
- This manual is too long.
-
- See http://www.greenwoodsoftware.com/less for the latest list of known
- bugs in less.
-
-
-COPYRIGHT
- Copyright (C) 1984-2007 Mark Nudelman
-
- less is part of the GNU project and is free software. You can redis-
- tribute it and/or modify it under the terms of either (1) the GNU Gen-
- eral Public License as published by the Free Software Foundation; or
- (2) the Less License. See the file README in the less distribution for
- more details regarding redistribution. You should have received a copy
- of the GNU General Public License along with the source for less; see
- the file COPYING. If not, write to the Free Software Foundation, 59
- Temple Place, Suite 330, Boston, MA 02111-1307, USA. You should also
- have received a copy of the Less License; see the file LICENSE.
-
- less is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FIT-
- NESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- more details.
-
-
-AUTHOR
- Mark Nudelman <markn@greenwoodsoftware.com>
- Send bug reports or comments to the above address or to
- bug-less@gnu.org.
- For more information, see the less homepage at
- http://www.greenwoodsoftware.com/less.
-
-
-
- Version 416: 22 Nov 2007 LESS(1)
diff --git a/contrib/less/less.nro b/contrib/less/less.nro
deleted file mode 100644
index d5dfb05..0000000
--- a/contrib/less/less.nro
+++ /dev/null
@@ -1,1692 +0,0 @@
-.TH LESS 1 "Version 416: 22 Nov 2007"
-.SH NAME
-less \- opposite of more
-.SH SYNOPSIS
-.B "less \-?"
-.br
-.B "less \-\-help"
-.br
-.B "less \-V"
-.br
-.B "less \-\-version"
-.br
-.B "less [\-[+]aBcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]"
-.br
-.B " [\-b \fIspace\fP] [\-h \fIlines\fP] [\-j \fIline\fP] [\-k \fIkeyfile\fP]"
-.br
-.B " [\-{oO} \fIlogfile\fP] [\-p \fIpattern\fP] [\-P \fIprompt\fP] [\-t \fItag\fP]"
-.br
-.B " [\-T \fItagsfile\fP] [\-x \fItab\fP,...] [\-y \fIlines\fP] [\-[z] \fIlines\fP]"
-.br
-.B " [\-# \fIshift\fP] [+[+]\fIcmd\fP] [\-\-] [\fIfilename\fP]..."
-.br
-(See the OPTIONS section for alternate option syntax with long option names.)
-
-.SH DESCRIPTION
-.I Less
-is a program similar to
-.I more
-(1), but which allows backward movement
-in the file as well as forward movement.
-Also,
-.I less
-does not have to read the entire input file before starting,
-so with large input files it starts up faster than text editors like
-.I vi
-(1).
-.I Less
-uses termcap (or terminfo on some systems),
-so it can run on a variety of terminals.
-There is even limited support for hardcopy terminals.
-(On a hardcopy terminal, lines which should be printed at the top
-of the screen are prefixed with a caret.)
-.PP
-Commands are based on both
-.I more
-and
-.I vi.
-Commands may be preceded by a decimal number,
-called N in the descriptions below.
-The number is used by some commands, as indicated.
-
-.SH COMMANDS
-In the following descriptions, ^X means control-X.
-ESC stands for the ESCAPE key; for example ESC-v means the
-two character sequence "ESCAPE", then "v".
-.IP "h or H"
-Help: display a summary of these commands.
-If you forget all the other commands, remember this one.
-.IP "SPACE or ^V or f or ^F"
-Scroll forward N lines, default one window (see option \-z below).
-If N is more than the screen size, only the final screenful is displayed.
-Warning: some systems use ^V as a special literalization character.
-.IP "z"
-Like SPACE, but if N is specified, it becomes the new window size.
-.IP "ESC-SPACE"
-Like SPACE, but scrolls a full screenful, even if it reaches
-end-of-file in the process.
-.IP "RETURN or ^N or e or ^E or j or ^J"
-Scroll forward N lines, default 1.
-The entire N lines are displayed, even if N is more than the screen size.
-.IP "d or ^D"
-Scroll forward N lines, default one half of the screen size.
-If N is specified, it becomes the new default for
-subsequent d and u commands.
-.IP "b or ^B or ESC-v"
-Scroll backward N lines, default one window (see option \-z below).
-If N is more than the screen size, only the final screenful is displayed.
-.IP "w"
-Like ESC-v, but if N is specified, it becomes the new window size.
-.IP "y or ^Y or ^P or k or ^K"
-Scroll backward N lines, default 1.
-The entire N lines are displayed, even if N is more than the screen size.
-Warning: some systems use ^Y as a special job control character.
-.IP "u or ^U"
-Scroll backward N lines, default one half of the screen size.
-If N is specified, it becomes the new default for
-subsequent d and u commands.
-.IP "ESC-) or RIGHTARROW"
-Scroll horizontally right N characters, default half the screen width
-(see the \-# option).
-If a number N is specified, it becomes the default for future RIGHTARROW
-and LEFTARROW commands.
-While the text is scrolled, it acts as though the \-S option
-(chop lines) were in effect.
-.IP "ESC-( or LEFTARROW"
-Scroll horizontally left N characters, default half the screen width
-(see the \-# option).
-If a number N is specified, it becomes the default for future RIGHTARROW
-and LEFTARROW commands.
-.IP "r or ^R or ^L"
-Repaint the screen.
-.IP R
-Repaint the screen, discarding any buffered input.
-Useful if the file is changing while it is being viewed.
-.IP "F"
-Scroll forward, and keep trying to read when the
-end of file is reached.
-Normally this command would be used when already at the end of the file.
-It is a way to monitor the tail of a file which is growing
-while it is being viewed.
-(The behavior is similar to the "tail \-f" command.)
-.IP "g or < or ESC-<"
-Go to line N in the file, default 1 (beginning of file).
-(Warning: this may be slow if N is large.)
-.IP "G or > or ESC->"
-Go to line N in the file, default the end of the file.
-(Warning: this may be slow if N is large,
-or if N is not specified and
-standard input, rather than a file, is being read.)
-.IP "p or %"
-Go to a position N percent into the file.
-N should be between 0 and 100, and may contain a decimal point.
-.IP "P"
-Go to the line containing byte offset N in the file.
-.IP "{"
-If a left curly bracket appears in the top line displayed
-on the screen,
-the { command will go to the matching right curly bracket.
-The matching right curly bracket is positioned on the bottom
-line of the screen.
-If there is more than one left curly bracket on the top line,
-a number N may be used to specify the N-th bracket on the line.
-.IP "}"
-If a right curly bracket appears in the bottom line displayed
-on the screen,
-the } command will go to the matching left curly bracket.
-The matching left curly bracket is positioned on the top
-line of the screen.
-If there is more than one right curly bracket on the top line,
-a number N may be used to specify the N-th bracket on the line.
-.IP "("
-Like {, but applies to parentheses rather than curly brackets.
-.IP ")"
-Like }, but applies to parentheses rather than curly brackets.
-.IP "["
-Like {, but applies to square brackets rather than curly brackets.
-.IP "]"
-Like }, but applies to square brackets rather than curly brackets.
-.IP "ESC-^F"
-Followed by two characters,
-acts like {, but uses the two characters as open and close brackets,
-respectively.
-For example, "ESC ^F < >" could be used to
-go forward to the > which matches the < in the top displayed line.
-.IP "ESC-^B"
-Followed by two characters,
-acts like }, but uses the two characters as open and close brackets,
-respectively.
-For example, "ESC ^B < >" could be used to
-go backward to the < which matches the > in the bottom displayed line.
-.IP m
-Followed by any lowercase letter,
-marks the current position with that letter.
-.IP "'"
-(Single quote.)
-Followed by any lowercase letter, returns to the position which
-was previously marked with that letter.
-Followed by another single quote, returns to the position at
-which the last "large" movement command was executed.
-Followed by a ^ or $, jumps to the beginning or end of the
-file respectively.
-Marks are preserved when a new file is examined,
-so the ' command can be used to switch between input files.
-.IP "^X^X"
-Same as single quote.
-.IP /pattern
-Search forward in the file for the N-th line containing the pattern.
-N defaults to 1.
-The pattern is a regular expression, as recognized by
-the regular expression library supplied by your system.
-The search starts at the second line displayed
-(but see the \-a and \-j options, which change this).
-.sp
-Certain characters are special
-if entered at the beginning of the pattern;
-they modify the type of search rather than become part of the pattern:
-.RS
-.IP "^N or !"
-Search for lines which do NOT match the pattern.
-.IP "^E or *"
-Search multiple files.
-That is, if the search reaches the END of the current file
-without finding a match,
-the search continues in the next file in the command line list.
-.IP "^F or @"
-Begin the search at the first line of the FIRST file
-in the command line list,
-regardless of what is currently displayed on the screen
-or the settings of the \-a or \-j options.
-.IP "^K"
-Highlight any text which matches the pattern on the current screen,
-but don't move to the first match (KEEP current position).
-.IP "^R"
-Don't interpret regular expression metacharacters;
-that is, do a simple textual comparison.
-.RE
-.IP ?pattern
-Search backward in the file for the N-th line containing the pattern.
-The search starts at the line immediately before the top line displayed.
-.sp
-Certain characters are special as in the / command:
-.RS
-.IP "^N or !"
-Search for lines which do NOT match the pattern.
-.IP "^E or *"
-Search multiple files.
-That is, if the search reaches the beginning of the current file
-without finding a match,
-the search continues in the previous file in the command line list.
-.IP "^F or @"
-Begin the search at the last line of the last file
-in the command line list,
-regardless of what is currently displayed on the screen
-or the settings of the \-a or \-j options.
-.IP "^K"
-As in forward searches.
-.IP "^R"
-As in forward searches.
-.RE
-.IP "ESC-/pattern"
-Same as "/*".
-.IP "ESC-?pattern"
-Same as "?*".
-.IP n
-Repeat previous search, for N-th line containing the last pattern.
-If the previous search was modified by ^N, the search is made for the
-N-th line NOT containing the pattern.
-If the previous search was modified by ^E, the search continues
-in the next (or previous) file if not satisfied in the current file.
-If the previous search was modified by ^R, the search is done
-without using regular expressions.
-There is no effect if the previous search was modified by ^F or ^K.
-.IP N
-Repeat previous search, but in the reverse direction.
-.IP "ESC-n"
-Repeat previous search, but crossing file boundaries.
-The effect is as if the previous search were modified by *.
-.IP "ESC-N"
-Repeat previous search, but in the reverse direction
-and crossing file boundaries.
-.IP "ESC-u"
-Undo search highlighting.
-Turn off highlighting of strings matching the current search pattern.
-If highlighting is already off because of a previous ESC-u command,
-turn highlighting back on.
-Any search command will also turn highlighting back on.
-(Highlighting can also be disabled by toggling the \-G option;
-in that case search commands do not turn highlighting back on.)
-.IP ":e [filename]"
-Examine a new file.
-If the filename is missing, the "current" file (see the :n and :p commands
-below) from the list of files in the command line is re-examined.
-A percent sign (%) in the filename is replaced by the name of the
-current file.
-A pound sign (#) is replaced by the name of the previously examined file.
-However, two consecutive percent signs are simply
-replaced with a single percent sign.
-This allows you to enter a filename that contains a percent sign
-in the name.
-Similarly, two consecutive pound signs are replaced with a single pound sign.
-The filename is inserted into the command line list of files
-so that it can be seen by subsequent :n and :p commands.
-If the filename consists of several files, they are all inserted into
-the list of files and the first one is examined.
-If the filename contains one or more spaces,
-the entire filename should be enclosed in double quotes
-(also see the \-" option).
-.IP "^X^V or E"
-Same as :e.
-Warning: some systems use ^V as a special literalization character.
-On such systems, you may not be able to use ^V.
-.IP ":n"
-Examine the next file (from the list of files given in the command line).
-If a number N is specified, the N-th next file is examined.
-.IP ":p"
-Examine the previous file in the command line list.
-If a number N is specified, the N-th previous file is examined.
-.IP ":x"
-Examine the first file in the command line list.
-If a number N is specified, the N-th file in the list is examined.
-.IP ":d"
-Remove the current file from the list of files.
-.IP "t"
-Go to the next tag, if there were more than one matches for the current tag.
-See the \-t option for more details about tags.
-.IP "T"
-Go to the previous tag, if there were more than one matches for the current tag.
-.IP "= or ^G or :f"
-Prints some information about the file being viewed,
-including its name
-and the line number and byte offset of the bottom line being displayed.
-If possible, it also prints the length of the file,
-the number of lines in the file
-and the percent of the file above the last displayed line.
-.IP \-
-Followed by one of the command line option letters (see OPTIONS below),
-this will change the setting of that option
-and print a message describing the new setting.
-If a ^P (CONTROL-P) is entered immediately after the dash,
-the setting of the option is changed but no message is printed.
-If the option letter has a numeric value (such as \-b or \-h),
-or a string value (such as \-P or \-t),
-a new value may be entered after the option letter.
-If no new value is entered, a message describing
-the current setting is printed and nothing is changed.
-.IP \-\-
-Like the \- command, but takes a long option name (see OPTIONS below)
-rather than a single option letter.
-You must press RETURN after typing the option name.
-A ^P immediately after the second dash suppresses printing of a
-message describing the new setting, as in the \- command.
-.IP \-+
-Followed by one of the command line option letters
-this will reset the option to its default setting
-and print a message describing the new setting.
-(The "\-+\fIX\fP" command does the same thing
-as "\-+\fIX\fP" on the command line.)
-This does not work for string-valued options.
-.IP \-\-+
-Like the \-+ command, but takes a long option name
-rather than a single option letter.
-.IP \-!
-Followed by one of the command line option letters,
-this will reset the option to the "opposite" of its default setting
-and print a message describing the new setting.
-This does not work for numeric or string-valued options.
-.IP \-\-!
-Like the \-! command, but takes a long option name
-rather than a single option letter.
-.IP _
-(Underscore.)
-Followed by one of the command line option letters,
-this will print a message describing the current setting of that option.
-The setting of the option is not changed.
-.IP __
-(Double underscore.)
-Like the _ (underscore) command, but takes a long option name
-rather than a single option letter.
-You must press RETURN after typing the option name.
-.IP +cmd
-Causes the specified cmd to be executed each time a new file is examined.
-For example, +G causes
-.I less
-to initially display each file starting at the end
-rather than the beginning.
-.IP V
-Prints the version number of
-.I less
-being run.
-.IP "q or Q or :q or :Q or ZZ"
-Exits
-.I less.
-.PP
-The following
-four
-commands may or may not be valid, depending on your particular installation.
-.PP
-.IP v
-Invokes an editor to edit the current file being viewed.
-The editor is taken from the environment variable VISUAL if defined,
-or EDITOR if VISUAL is not defined,
-or defaults to "vi" if neither VISUAL nor EDITOR is defined.
-See also the discussion of LESSEDIT under the section on PROMPTS below.
-.IP "! shell-command"
-Invokes a shell to run the shell-command given.
-A percent sign (%) in the command is replaced by the name of the
-current file.
-A pound sign (#) is replaced by the name of the previously examined file.
-"!!" repeats the last shell command.
-"!" with no shell command simply invokes a shell.
-On Unix systems, the shell is taken from the environment variable SHELL,
-or defaults to "sh".
-On MS-DOS and OS/2 systems, the shell is the normal command processor.
-.IP "| <m> shell-command"
-<m> represents any mark letter.
-Pipes a section of the input file to the given shell command.
-The section of the file to be piped is between the first line on
-the current screen and the position marked by the letter.
-<m> may also be ^ or $ to indicate beginning or end of file respectively.
-If <m> is . or newline, the current screen is piped.
-.IP "s filename"
-Save the input to a file.
-This only works if the input is a pipe, not an ordinary file.
-.PP
-.SH OPTIONS
-Command line options are described below.
-Most options may be changed while
-.I less
-is running, via the "\-" command.
-.PP
-Most options may be given in one of two forms:
-either a dash followed by a single letter,
-or two dashes followed by a long option name.
-A long option name may be abbreviated as long as
-the abbreviation is unambiguous.
-For example, \-\-quit-at-eof may be abbreviated \-\-quit, but not
---qui, since both \-\-quit-at-eof and \-\-quiet begin with \-\-qui.
-Some long option names are in uppercase, such as \-\-QUIT-AT-EOF, as
-distinct from \-\-quit-at-eof.
-Such option names need only have their first letter capitalized;
-the remainder of the name may be in either case.
-For example, \-\-Quit-at-eof is equivalent to \-\-QUIT-AT-EOF.
-.PP
-Options are also taken from the environment variable "LESS".
-For example,
-to avoid typing "less \-options ..." each time
-.I less
-is invoked, you might tell
-.I csh:
-.sp
-setenv LESS "-options"
-.sp
-or if you use
-.I sh:
-.sp
-LESS="-options"; export LESS
-.sp
-On MS-DOS, you don't need the quotes, but you should replace any
-percent signs in the options string by double percent signs.
-.sp
-The environment variable is parsed before the command line,
-so command line options override the LESS environment variable.
-If an option appears in the LESS variable, it can be reset
-to its default value on the command line by beginning the command
-line option with "\-+".
-.sp
-For options like \-P or \-D which take a following string,
-a dollar sign ($) must be used to signal the end of the string.
-For example, to set two \-D options on MS-DOS, you must have
-a dollar sign between them, like this:
-.sp
-LESS="-Dn9.1$-Ds4.1"
-.sp
-.IP "\-? or \-\-help"
-This option displays a summary of the commands accepted by
-.I less
-(the same as the h command).
-(Depending on how your shell interprets the question mark,
-it may be necessary to quote the question mark, thus: "\-\e?".)
-.IP "\-a or \-\-search-skip-screen"
-Causes searches to start after the last line
-displayed on the screen,
-thus skipping all lines displayed on the screen.
-By default, searches start at the second line on the screen
-(or after the last found line; see the \-j option).
-.IP "\-b\fIn\fP or \-\-buffers=\fIn\fP"
-Specifies the amount of buffer space
-.I less
-will use for each file, in units of kilobytes (1024 bytes).
-By default 64K of buffer space is used for each file
-(unless the file is a pipe; see the \-B option).
-The \-b option specifies instead that \fIn\fP kilobytes of
-buffer space should be used for each file.
-If \fIn\fP is \-1, buffer space is unlimited; that is,
-the entire file can be read into memory.
-.IP "\-B or \-\-auto-buffers"
-By default, when data is read from a pipe,
-buffers are allocated automatically as needed.
-If a large amount of data is read from the pipe, this can cause
-a large amount of memory to be allocated.
-The \-B option disables this automatic allocation of buffers for pipes,
-so that only 64K
-(or the amount of space specified by the \-b option)
-is used for the pipe.
-Warning: use of \-B can result in erroneous display, since only the
-most recently viewed part of the piped data is kept in memory;
-any earlier data is lost.
-.IP "\-c or \-\-clear-screen"
-Causes full screen repaints to be painted from the top line down.
-By default,
-full screen repaints are done by scrolling from the bottom of the screen.
-.IP "\-C or \-\-CLEAR-SCREEN"
-Same as \-c, for compatibility with older versions of
-.I less.
-.IP "\-d or \-\-dumb"
-The \-d option suppresses the error message
-normally displayed if the terminal is dumb;
-that is, lacks some important capability,
-such as the ability to clear the screen or scroll backward.
-The \-d option does not otherwise change the behavior of
-.I less
-on a dumb terminal.
-.IP "\-D\fBx\fP\fIcolor\fP or \-\-color=\fBx\fP\fIcolor\fP"
-[MS-DOS only]
-Sets the color of the text displayed.
-\fBx\fP is a single character which selects the type of text whose color is
-being set: n=normal, s=standout, d=bold, u=underlined, k=blink.
-\fIcolor\fP is a pair of numbers separated by a period.
-The first number selects the foreground color and the second selects
-the background color of the text.
-A single number \fIN\fP is the same as \fIN.0\fP.
-.IP "\-e or \-\-quit-at-eof"
-Causes
-.I less
-to automatically exit
-the second time it reaches end-of-file.
-By default, the only way to exit
-.I less
-is via the "q" command.
-.IP "\-E or \-\-QUIT-AT-EOF"
-Causes
-.I less
-to automatically exit the first time it reaches end-of-file.
-.IP "\-f or \-\-force"
-Forces non-regular files to be opened.
-(A non-regular file is a directory or a device special file.)
-Also suppresses the warning message when a binary file is opened.
-By default,
-.I less
-will refuse to open non-regular files.
-Note that some operating systems will not allow directories
-to be read, even if \-f is set.
-.IP "\-F or \-\-quit-if-one-screen"
-Causes
-.I less
-to automatically exit
-if the entire file can be displayed on the first screen.
-.IP "\-g or \-\-hilite-search"
-Normally,
-.I less
-will highlight ALL strings which match the last search command.
-The \-g option changes this behavior to highlight only the particular string
-which was found by the last search command.
-This can cause
-.I less
-to run somewhat faster than the default.
-.IP "\-G or \-\-HILITE-SEARCH"
-The \-G option suppresses all highlighting of strings found by search commands.
-.IP "\-h\fIn\fP or \-\-max-back-scroll=\fIn\fP"
-Specifies a maximum number of lines to scroll backward.
-If it is necessary to scroll backward more than \fIn\fP lines,
-the screen is repainted in a forward direction instead.
-(If the terminal does not have the ability to scroll
-backward, \-h0 is implied.)
-.IP "\-i or \-\-ignore-case"
-Causes searches to ignore case; that is,
-uppercase and lowercase are considered identical.
-This option is ignored if any uppercase letters
-appear in the search pattern;
-in other words,
-if a pattern contains uppercase letters, then that search does not ignore case.
-.IP "\-I or \-\-IGNORE-CASE"
-Like \-i, but searches ignore case even if
-the pattern contains uppercase letters.
-.IP "\-j\fIn\fP or \-\-jump-target=\fIn\fP"
-Specifies a line on the screen where the "target" line
-is to be positioned.
-The target line is the line specified by any command to
-search for a pattern, jump to a line number,
-jump to a file percentage or jump to a tag.
-The screen line may be specified by a number: the top line on the screen
-is 1, the next is 2, and so on.
-The number may be negative to specify a line relative to the bottom
-of the screen: the bottom line on the screen is \-1, the second
-to the bottom is \-2, and so on.
-Alternately, the screen line may be specified as a fraction of the height
-of the screen, starting with a decimal point: .5 is in the middle of the
-screen, .3 is three tenths down from the first line, and so on.
-If the line is specified as a fraction, the actual line number
-is recalculated if the terminal window is resized, so that the
-target line remains at the specified fraction of the screen height.
-If any form of the \-j option is used,
-forward searches begin at the line immediately after the target line,
-and backward searches begin at the target line.
-For example, if "\-j4" is used, the target line is the
-fourth line on the screen, so forward searches begin at the fifth line
-on the screen.
-.IP "\-J or \-\-status-column"
-Displays a status column at the left edge of the screen.
-The status column shows the lines that matched the current search.
-The status column is also used if the \-w or \-W option is in effect.
-.IP "\-k\fIfilename\fP or \-\-lesskey-file=\fIfilename\fP"
-Causes
-.I less
-to open and interpret the named file as a
-.I lesskey
-(1) file.
-Multiple \-k options may be specified.
-If the LESSKEY or LESSKEY_SYSTEM environment variable is set, or
-if a lesskey file is found in a standard place (see KEY BINDINGS),
-it is also used as a
-.I lesskey
-file.
-.IP "\-K or \-\-quit-on-intr"
-Causes
-.I less
-to exit immediately when an interrupt character (usually ^C) is typed.
-Normally, an interrupt character causes
-.I less
-to stop whatever it is doing and return to its command prompt.
-Note that use of this option makes it impossible to return to the
-command prompt from the "F" command.
-.IP "\-L or \-\-no-lessopen"
-Ignore the LESSOPEN environment variable
-(see the INPUT PREPROCESSOR section below).
-This option can be set from within \fIless\fP,
-but it will apply only to files opened subsequently, not to the
-file which is currently open.
-.IP "\-m or \-\-long-prompt"
-Causes
-.I less
-to prompt verbosely (like \fImore\fP),
-with the percent into the file.
-By default,
-.I less
-prompts with a colon.
-.IP "\-M or \-\-LONG-PROMPT"
-Causes
-.I less
-to prompt even more verbosely than
-.I more.
-.IP "\-n or \-\-line-numbers"
-Suppresses line numbers.
-The default (to use line numbers) may cause
-.I less
-to run more slowly in some cases, especially with a very large input file.
-Suppressing line numbers with the \-n option will avoid this problem.
-Using line numbers means: the line number will be displayed in the verbose
-prompt and in the = command,
-and the v command will pass the current line number to the editor
-(see also the discussion of LESSEDIT in PROMPTS below).
-.IP "\-N or \-\-LINE-NUMBERS"
-Causes a line number to be displayed at the beginning of
-each line in the display.
-.IP "\-o\fIfilename\fP or \-\-log-file=\fIfilename\fP"
-Causes
-.I less
-to copy its input to the named file as it is being viewed.
-This applies only when the input file is a pipe,
-not an ordinary file.
-If the file already exists,
-.I less
-will ask for confirmation before overwriting it.
-.IP "\-O\fIfilename\fP or \-\-LOG-FILE=\fIfilename\fP"
-The \-O option is like \-o, but it will overwrite an existing
-file without asking for confirmation.
-.sp
-If no log file has been specified,
-the \-o and \-O options can be used from within
-.I less
-to specify a log file.
-Without a file name, they will simply report the name of the log file.
-The "s" command is equivalent to specifying \-o from within
-.I less.
-.IP "\-p\fIpattern\fP or \-\-pattern=\fIpattern\fP"
-The \-p option on the command line is equivalent to
-specifying +/\fIpattern\fP;
-that is, it tells
-.I less
-to start at the first occurrence of \fIpattern\fP in the file.
-.IP "\-P\fIprompt\fP or \-\-prompt=\fIprompt\fP"
-Provides a way to tailor the three prompt
-styles to your own preference.
-This option would normally be put in the LESS environment
-variable, rather than being typed in with each
-.I less
-command.
-Such an option must either be the last option in the LESS variable,
-or be terminated by a dollar sign.
--Ps followed by a string changes the default (short) prompt
-to that string.
--Pm changes the medium (\-m) prompt.
--PM changes the long (\-M) prompt.
--Ph changes the prompt for the help screen.
--P= changes the message printed by the = command.
--Pw changes the message printed while waiting for data (in the F command).
-All prompt strings consist of a sequence of
-letters and special escape sequences.
-See the section on PROMPTS for more details.
-.IP "\-q or \-\-quiet or \-\-silent"
-Causes moderately "quiet" operation:
-the terminal bell is not rung
-if an attempt is made to scroll past the end of the file
-or before the beginning of the file.
-If the terminal has a "visual bell", it is used instead.
-The bell will be rung on certain other errors,
-such as typing an invalid character.
-The default is to ring the terminal bell in all such cases.
-.IP "\-Q or \-\-QUIET or \-\-SILENT"
-Causes totally "quiet" operation:
-the terminal bell is never rung.
-.IP "\-r or \-\-raw-control-chars"
-Causes "raw" control characters to be displayed.
-The default is to display control characters using the caret notation;
-for example, a control-A (octal 001) is displayed as "^A".
-Warning: when the \-r option is used,
-.I less
-cannot keep track of the actual appearance of the screen
-(since this depends on how the screen responds to
-each type of control character).
-Thus, various display problems may result,
-such as long lines being split in the wrong place.
-.IP "\-R or \-\-RAW-CONTROL-CHARS"
-Like \-r, but only ANSI "color" escape sequences are output in "raw" form.
-Unlike \-r, the screen appearance is maintained correctly in most cases.
-ANSI "color" escape sequences are sequences of the form:
-.sp
- ESC [ ... m
-.sp
-where the "..." is zero or more color specification characters
-For the purpose of keeping track of screen appearance,
-ANSI color escape sequences are assumed to not move the cursor.
-You can make
-.I less
-think that characters other than "m" can end ANSI color escape sequences
-by setting the environment variable LESSANSIENDCHARS to the list of
-characters which can end a color escape sequence.
-And you can make
-.I less
-think that characters other than the standard ones may appear between
-the ESC and the m by setting the environment variable LESSANSIMIDCHARS
-to the list of characters which can appear.
-.IP "\-s or \-\-squeeze-blank-lines"
-Causes consecutive blank lines to be squeezed into a single blank line.
-This is useful when viewing
-.I nroff
-output.
-.IP "\-S or \-\-chop-long-lines"
-Causes lines longer than the screen width to be
-chopped rather than folded.
-That is, the portion of a long line that does not fit in
-the screen width is not shown.
-The default is to fold long lines; that is, display the remainder
-on the next line.
-.IP "\-t\fItag\fP or \-\-tag=\fItag\fP"
-The \-t option, followed immediately by a TAG,
-will edit the file containing that tag.
-For this to work, tag information must be available;
-for example, there may be a file in the current directory called "tags",
-which was previously built by
-.I ctags
-(1) or an equivalent command.
-If the environment variable LESSGLOBALTAGS is set, it is taken to be
-the name of a command compatible with
-.I global
-(1), and that command is executed to find the tag.
-(See http://www.gnu.org/software/global/global.html).
-The \-t option may also be specified from within
-.I less
-(using the \- command) as a way of examining a new file.
-The command ":t" is equivalent to specifying \-t from within
-.I less.
-.IP "\-T\fItagsfile\fP or \-\-tag-file=\fItagsfile\fP"
-Specifies a tags file to be used instead of "tags".
-.IP "\-u or \-\-underline-special"
-Causes backspaces and carriage returns to be treated as printable characters;
-that is, they are sent to the terminal when they appear in the input.
-.IP "\-U or \-\-UNDERLINE-SPECIAL"
-Causes backspaces, tabs and carriage returns to be
-treated as control characters;
-that is, they are handled as specified by the \-r option.
-.sp
-By default, if neither \-u nor \-U is given,
-backspaces which appear adjacent to an underscore character
-are treated specially:
-the underlined text is displayed
-using the terminal's hardware underlining capability.
-Also, backspaces which appear between two identical characters
-are treated specially:
-the overstruck text is printed
-using the terminal's hardware boldface capability.
-Other backspaces are deleted, along with the preceding character.
-Carriage returns immediately followed by a newline are deleted.
-other carriage returns are handled as specified by the \-r option.
-Text which is overstruck or underlined can be searched for
-if neither \-u nor \-U is in effect.
-.IP "\-V or \-\-version"
-Displays the version number of
-.I less.
-.IP "\-w or \-\-hilite-unread"
-Temporarily highlights the first "new" line after a forward movement
-of a full page.
-The first "new" line is the line immediately following the line previously
-at the bottom of the screen.
-Also highlights the target line after a g or p command.
-The highlight is removed at the next command which causes movement.
-The entire line is highlighted, unless the \-J option is in effect,
-in which case only the status column is highlighted.
-.IP "\-W or \-\-HILITE-UNREAD"
-Like \-w, but temporarily highlights the first new line after any
-forward movement command larger than one line.
-.IP "\-x\fIn\fP,... or \-\-tabs=\fIn\fP,..."
-Sets tab stops.
-If only one \fIn\fP is specified, tab stops are set at multiples of \fIn\fP.
-If multiple values separated by commas are specified, tab stops
-are set at those positions, and then continue with the same spacing as the
-last two.
-For example, \fI-x9,17\fP will set tabs at positions 9, 17, 25, 33, etc.
-The default for \fIn\fP is 8.
-.IP "\-X or \-\-no-init"
-Disables sending the termcap initialization and deinitialization strings
-to the terminal.
-This is sometimes desirable if the deinitialization string does
-something unnecessary, like clearing the screen.
-.IP "\-y\fIn\fP or \-\-max-forw-scroll=\fIn\fP"
-Specifies a maximum number of lines to scroll forward.
-If it is necessary to scroll forward more than \fIn\fP lines,
-the screen is repainted instead.
-The \-c or \-C option may be used to repaint from the top of
-the screen if desired.
-By default, any forward movement causes scrolling.
-.IP "\-[z]\fIn\fP or \-\-window=\fIn\fP"
-Changes the default scrolling window size to \fIn\fP lines.
-The default is one screenful.
-The z and w commands can also be used to change the window size.
-The "z" may be omitted for compatibility with some versions of
-.I more.
-If the number
-.I n
-is negative, it indicates
-.I n
-lines less than the current screen size.
-For example, if the screen is 24 lines, \fI\-z-4\fP sets the
-scrolling window to 20 lines. If the screen is resized to 40 lines,
-the scrolling window automatically changes to 36 lines.
-.IP "\-\fI\(dqcc\fP\ or\ \-\-quotes=\fIcc\fP"
-Changes the filename quoting character.
-This may be necessary if you are trying to name a file
-which contains both spaces and quote characters.
-Followed by a single character, this changes the quote character to that
-character.
-Filenames containing a space should then be surrounded by that character
-rather than by double quotes.
-Followed by two characters, changes the open quote to the first character,
-and the close quote to the second character.
-Filenames containing a space should then be preceded by the open quote
-character and followed by the close quote character.
-Note that even after the quote characters are changed, this option
-remains \-" (a dash followed by a double quote).
-.IP "\-~ or \-\-tilde"
-Normally lines after end of file are displayed as a single tilde (~).
-This option causes lines after end of file to be displayed as blank lines.
-.IP "\-# or \-\-shift"
-Specifies the default number of positions to scroll horizontally
-in the RIGHTARROW and LEFTARROW commands.
-If the number specified is zero, it sets the default number of
-positions to one half of the screen width.
-.IP "\-\-no-keypad"
-Disables sending the keypad initialization and deinitialization strings
-to the terminal.
-This is sometimes useful if the keypad strings make the numeric
-keypad behave in an undesirable manner.
-.IP "\-\-follow-name"
-Normally, if the input file is renamed while an F command is executing,
-.I less
-will continue to display the contents of the original file despite
-its name change.
-If \-\-follow-name is specified, during an F command
-.I less
-will periodically attempt to reopen the file by name.
-If the reopen succeeds and the file is a different file from the original
-(which means that a new file has been created
-with the same name as the original (now renamed) file),
-.I less
-will display the contents of that new file.
-.IP \-\-
-A command line argument of "\-\-" marks the end of option arguments.
-Any arguments following this are interpreted as filenames.
-This can be useful when viewing a file whose name begins with a "\-" or "+".
-.IP +
-If a command line option begins with \fB+\fP,
-the remainder of that option is taken to be an initial command to
-.I less.
-For example, +G tells
-.I less
-to start at the end of the file rather than the beginning,
-and +/xyz tells it to start at the first occurrence of "xyz" in the file.
-As a special case, +<number> acts like +<number>g;
-that is, it starts the display at the specified line number
-(however, see the caveat under the "g" command above).
-If the option starts with ++, the initial command applies to
-every file being viewed, not just the first one.
-The + command described previously
-may also be used to set (or change) an initial command for every file.
-
-.SH "LINE EDITING"
-When entering command line at the bottom of the screen
-(for example, a filename for the :e command,
-or the pattern for a search command),
-certain keys can be used to manipulate the command line.
-Most commands have an alternate form in [ brackets ] which can be used if
-a key does not exist on a particular keyboard.
-(The bracketed forms do not work in the MS-DOS version.)
-Any of these special keys may be entered literally by preceding
-it with the "literal" character, either ^V or ^A.
-A backslash itself may also be entered literally by entering two backslashes.
-.IP "LEFTARROW [ ESC-h ]"
-Move the cursor one space to the left.
-.IP "RIGHTARROW [ ESC-l ]"
-Move the cursor one space to the right.
-.IP "^LEFTARROW [ ESC-b or ESC-LEFTARROW ]"
-(That is, CONTROL and LEFTARROW simultaneously.)
-Move the cursor one word to the left.
-.IP "^RIGHTARROW [ ESC-w or ESC-RIGHTARROW ]"
-(That is, CONTROL and RIGHTARROW simultaneously.)
-Move the cursor one word to the right.
-.IP "HOME [ ESC-0 ]"
-Move the cursor to the beginning of the line.
-.IP "END [ ESC-$ ]"
-Move the cursor to the end of the line.
-.IP "BACKSPACE"
-Delete the character to the left of the cursor,
-or cancel the command if the command line is empty.
-.IP "DELETE or [ ESC-x ]"
-Delete the character under the cursor.
-.IP "^BACKSPACE [ ESC-BACKSPACE ]"
-(That is, CONTROL and BACKSPACE simultaneously.)
-Delete the word to the left of the cursor.
-.IP "^DELETE [ ESC-X or ESC-DELETE ]"
-(That is, CONTROL and DELETE simultaneously.)
-Delete the word under the cursor.
-.IP "UPARROW [ ESC-k ]"
-Retrieve the previous command line.
-.IP "DOWNARROW [ ESC-j ]"
-Retrieve the next command line.
-.IP "TAB"
-Complete the partial filename to the left of the cursor.
-If it matches more than one filename, the first match
-is entered into the command line.
-Repeated TABs will cycle thru the other matching filenames.
-If the completed filename is a directory, a "/" is appended to the filename.
-(On MS-DOS systems, a "\e" is appended.)
-The environment variable LESSSEPARATOR can be used to specify a
-different character to append to a directory name.
-.IP "BACKTAB [ ESC-TAB ]"
-Like, TAB, but cycles in the reverse direction thru the matching filenames.
-.IP "^L"
-Complete the partial filename to the left of the cursor.
-If it matches more than one filename, all matches are entered into
-the command line (if they fit).
-.IP "^U (Unix and OS/2) or ESC (MS-DOS)"
-Delete the entire command line,
-or cancel the command if the command line is empty.
-If you have changed your line-kill character in Unix to something
-other than ^U, that character is used instead of ^U.
-
-.SH "KEY BINDINGS"
-You may define your own
-.I less
-commands by using the program
-.I lesskey
-(1)
-to create a lesskey file.
-This file specifies a set of command keys and an action
-associated with each key.
-You may also use
-.I lesskey
-to change the line-editing keys (see LINE EDITING),
-and to set environment variables.
-If the environment variable LESSKEY is set,
-.I less
-uses that as the name of the lesskey file.
-Otherwise,
-.I less
-looks in a standard place for the lesskey file:
-On Unix systems,
-.I less
-looks for a lesskey file called "$HOME/.less".
-On MS-DOS and Windows systems,
-.I less
-looks for a lesskey file called "$HOME/_less", and if it is not found there,
-then looks for a lesskey file called "_less" in any directory specified
-in the PATH environment variable.
-On OS/2 systems,
-.I less
-looks for a lesskey file called "$HOME/less.ini", and if it is not found,
-then looks for a lesskey file called "less.ini" in any directory specified
-in the INIT environment variable, and if it not found there,
-then looks for a lesskey file called "less.ini" in any directory specified
-in the PATH environment variable.
-See the
-.I lesskey
-manual page for more details.
-.P
-A system-wide lesskey file may also be set up to provide key bindings.
-If a key is defined in both a local lesskey file and in the
-system-wide file, key bindings in the local file take precedence over
-those in the system-wide file.
-If the environment variable LESSKEY_SYSTEM is set,
-.I less
-uses that as the name of the system-wide lesskey file.
-Otherwise,
-.I less
-looks in a standard place for the system-wide lesskey file:
-On Unix systems, the system-wide lesskey file is /usr/local/etc/sysless.
-(However, if
-.I less
-was built with a different sysconf directory than /usr/local/etc,
-that directory is where the sysless file is found.)
-On MS-DOS and Windows systems, the system-wide lesskey file is c:\e_sysless.
-On OS/2 systems, the system-wide lesskey file is c:\esysless.ini.
-
-.SH "INPUT PREPROCESSOR"
-You may define an "input preprocessor" for
-.I less.
-Before
-.I less
-opens a file, it first gives your input preprocessor a chance to modify the
-way the contents of the file are displayed.
-An input preprocessor is simply an executable program (or shell script),
-which writes the contents of the file to a different file,
-called the replacement file.
-The contents of the replacement file are then displayed
-in place of the contents of the original file.
-However, it will appear to the user as if the original file is opened;
-that is,
-.I less
-will display the original filename as the name of the current file.
-.PP
-An input preprocessor receives one command line argument, the original filename,
-as entered by the user.
-It should create the replacement file, and when finished,
-print the name of the replacement file to its standard output.
-If the input preprocessor does not output a replacement filename,
-.I less
-uses the original file, as normal.
-The input preprocessor is not called when viewing standard input.
-To set up an input preprocessor, set the LESSOPEN environment variable
-to a command line which will invoke your input preprocessor.
-This command line should include one occurrence of the string "%s",
-which will be replaced by the filename
-when the input preprocessor command is invoked.
-.PP
-When
-.I less
-closes a file opened in such a way, it will call another program,
-called the input postprocessor,
-which may perform any desired clean-up action (such as deleting the
-replacement file created by LESSOPEN).
-This program receives two command line arguments, the original filename
-as entered by the user, and the name of the replacement file.
-To set up an input postprocessor, set the LESSCLOSE environment variable
-to a command line which will invoke your input postprocessor.
-It may include two occurrences of the string "%s";
-the first is replaced with the original name of the file and
-the second with the name of the replacement file,
-which was output by LESSOPEN.
-.PP
-For example, on many Unix systems, these two scripts will allow you
-to keep files in compressed format, but still let
-.I less
-view them directly:
-.PP
-lessopen.sh:
-.br
- #! /bin/sh
-.br
- case "$1" in
-.br
- *.Z) uncompress -\c $1 >/tmp/less.$$ 2>/dev/null
-.br
- if [ \-s /tmp/less.$$ ]; then
-.br
- echo /tmp/less.$$
-.br
- else
-.br
- rm \-f /tmp/less.$$
-.br
- fi
-.br
- ;;
-.br
- esac
-.PP
-lessclose.sh:
-.br
- #! /bin/sh
-.br
- rm $2
-.PP
-To use these scripts, put them both where they can be executed and
-set LESSOPEN="lessopen.sh\ %s", and
-LESSCLOSE="lessclose.sh\ %s\ %s".
-More complex LESSOPEN and LESSCLOSE scripts may be written
-to accept other types of compressed files, and so on.
-.PP
-It is also possible to set up an input preprocessor to
-pipe the file data directly to
-.I less,
-rather than putting the data into a replacement file.
-This avoids the need to decompress the entire file before
-starting to view it.
-An input preprocessor that works this way is called an input pipe.
-An input pipe, instead of writing the name of a replacement file on
-its standard output,
-writes the entire contents of the replacement file on its standard output.
-If the input pipe does not write any characters on its standard output,
-then there is no replacement file and
-.I less
-uses the original file, as normal.
-To use an input pipe,
-make the first character in the LESSOPEN environment variable a
-vertical bar (|) to signify that the input preprocessor is an input pipe.
-.PP
-For example, on many Unix systems, this script will work like the
-previous example scripts:
-.PP
-lesspipe.sh:
-.br
- #! /bin/sh
-.br
- case "$1" in
-.br
- *.Z) uncompress \-c $1 2>/dev/null
-.br
- ;;
-.br
- esac
-.br
-.PP
-To use this script, put it where it can be executed and set
-LESSOPEN="|lesspipe.sh %s".
-When an input pipe is used, a LESSCLOSE postprocessor can be used,
-but it is usually not necessary since there is no replacement file
-to clean up.
-In this case, the replacement file name passed to the LESSCLOSE
-postprocessor is "\-".
-
-.SH "NATIONAL CHARACTER SETS"
-There are three types of characters in the input file:
-.IP "normal characters"
-can be displayed directly to the screen.
-.IP "control characters"
-should not be displayed directly, but are expected to be found
-in ordinary text files (such as backspace and tab).
-.IP "binary characters"
-should not be displayed directly and are not expected to be found
-in text files.
-.PP
-A "character set" is simply a description of which characters are to
-be considered normal, control, and binary.
-The LESSCHARSET environment variable may be used to select a character set.
-Possible values for LESSCHARSET are:
-.IP ascii
-BS, TAB, NL, CR, and formfeed are control characters,
-all chars with values between 32 and 126 are normal,
-and all others are binary.
-.IP iso8859
-Selects an ISO 8859 character set.
-This is the same as ASCII, except characters between 160 and 255 are
-treated as normal characters.
-.IP latin1
-Same as iso8859.
-.IP latin9
-Same as iso8859.
-.IP dos
-Selects a character set appropriate for MS-DOS.
-.IP ebcdic
-Selects an EBCDIC character set.
-.IP IBM-1047
-Selects an EBCDIC character set used by OS/390 Unix Services.
-This is the EBCDIC analogue of latin1. You get similar results
-by setting either LESSCHARSET=IBM-1047 or LC_CTYPE=en_US
-in your environment.
-.IP koi8-r
-Selects a Russian character set.
-.IP next
-Selects a character set appropriate for NeXT computers.
-.IP utf-8
-Selects the UTF-8 encoding of the ISO 10646 character set.
-UTF-8 is special in that it supports multi-byte characters in the input file.
-It is the only character set that supports multi-byte characters.
-.IP windows
-Selects a character set appropriate for Microsoft Windows (cp 1251).
-.PP
-In special cases, it may be desired to tailor
-.I less
-to use a character set other than the ones definable by LESSCHARSET.
-In this case, the environment variable LESSCHARDEF can be used
-to define a character set.
-It should be set to a string where each character in the string represents
-one character in the character set.
-The character "." is used for a normal character, "c" for control,
-and "b" for binary.
-A decimal number may be used for repetition.
-For example, "bccc4b." would mean character 0 is binary,
-1, 2 and 3 are control, 4, 5, 6 and 7 are binary, and 8 is normal.
-All characters after the last are taken to be the same as the last,
-so characters 9 through 255 would be normal.
-(This is an example, and does not necessarily
-represent any real character set.)
-.PP
-This table shows the value of LESSCHARDEF which is equivalent
-to each of the possible values for LESSCHARSET:
-.sp
- ascii\ 8bcccbcc18b95.b
-.br
- dos\ \ \ 8bcccbcc12bc5b95.b.
-.br
- ebcdic 5bc6bcc7bcc41b.9b7.9b5.b..8b6.10b6.b9.7b
-.br
- \ \ \ \ \ \ 9.8b8.17b3.3b9.7b9.8b8.6b10.b.b.b.
-.br
- IBM-1047 4cbcbc3b9cbccbccbb4c6bcc5b3cbbc4bc4bccbc
-.br
- \ \ \ \ \ \ 191.b
-.br
- iso8859 8bcccbcc18b95.33b.
-.br
- koi8-r 8bcccbcc18b95.b128.
-.br
- latin1 8bcccbcc18b95.33b.
-.br
- next\ \ 8bcccbcc18b95.bb125.bb
-.PP
-If neither LESSCHARSET nor LESSCHARDEF is set,
-but any of the strings "UTF-8", "UTF8", "utf-8" or "utf8"
-is found in the LC_ALL, LC_TYPE or LANG
-environment variables, then the default character set is utf-8.
-.PP
-If that string is not found, but your system supports the
-.I setlocale
-interface,
-.I less
-will use setlocale to determine the character set.
-setlocale is controlled by setting the LANG or LC_CTYPE environment
-variables.
-.PP
-Finally, if the
-.I setlocale
-interface is also not available, the default character set is latin1.
-.PP
-Control and binary characters are displayed in standout (reverse video).
-Each such character is displayed in caret notation if possible
-(e.g. ^A for control-A). Caret notation is used only if
-inverting the 0100 bit results in a normal printable character.
-Otherwise, the character is displayed as a hex number in angle brackets.
-This format can be changed by
-setting the LESSBINFMT environment variable.
-LESSBINFMT may begin with a "*" and one character to select
-the display attribute:
-"*k" is blinking, "*d" is bold, "*u" is underlined, "*s" is standout,
-and "*n" is normal.
-If LESSBINFMT does not begin with a "*", normal attribute is assumed.
-The remainder of LESSBINFMT is a string which may include one
-printf-style escape sequence (a % followed by x, X, o, d, etc.).
-For example, if LESSBINFMT is "*u[%x]", binary characters
-are displayed in underlined hexadecimal surrounded by brackets.
-The default if no LESSBINFMT is specified is "*s<%X>".
-The default if no LESSBINFMT is specified is "*s<%02X>".
-Warning: the result of expanding the character via LESSBINFMT must
-be less than 31 characters.
-.PP
-When the character set is utf-8, the LESSUTFBINFMT environment variable
-acts similarly to LESSBINFMT but it applies to Unicode code points
-that were successfully decoded but are unsuitable for display (e.g.,
-unassigned code points).
-Its default value is "<U+%04lX>".
-Note that LESSUTFBINFMT and LESSBINFMT share their display attribute
-setting ("*x") so specifying one will affect both;
-LESSUTFBINFMT is read after LESSBINFMT so its setting, if any,
-will have priority.
-Problematic octets in a UTF-8 file (octets of a truncated sequence,
-octets of a complete but non-shortest form sequence, illegal octets,
-and stray trailing octets)
-are displayed individually using LESSBINFMT so as to facilitate diagnostic
-of how the UTF-8 file is ill-formed.
-
-.SH "PROMPTS"
-The \-P option allows you to tailor the prompt to your preference.
-The string given to the \-P option replaces the specified prompt string.
-Certain characters in the string are interpreted specially.
-The prompt mechanism is rather complicated to provide flexibility,
-but the ordinary user need not understand the details of constructing
-personalized prompt strings.
-.sp
-A percent sign followed by a single character is expanded
-according to what the following character is:
-.IP "%b\fIX\fP"
-Replaced by the byte offset into the current input file.
-The b is followed by a single character (shown as \fIX\fP above)
-which specifies the line whose byte offset is to be used.
-If the character is a "t", the byte offset of the top line in the
-display is used,
-an "m" means use the middle line,
-a "b" means use the bottom line,
-a "B" means use the line just after the bottom line,
-and a "j" means use the "target" line, as specified by the \-j option.
-.IP "%B"
-Replaced by the size of the current input file.
-.IP "%c"
-Replaced by the column number of the text appearing in the first
-column of the screen.
-.IP "%d\fIX\fP"
-Replaced by the page number of a line in the input file.
-The line to be used is determined by the \fIX\fP, as with the %b option.
-.IP "%D"
-Replaced by the number of pages in the input file,
-or equivalently, the page number of the last line in the input file.
-.IP "%E"
-Replaced by the name of the editor (from the VISUAL environment variable,
-or the EDITOR environment variable if VISUAL is not defined).
-See the discussion of the LESSEDIT feature below.
-.IP "%f"
-Replaced by the name of the current input file.
-.IP "%i"
-Replaced by the index of the current file in the list of
-input files.
-.IP "%l\fIX\fP"
-Replaced by the line number of a line in the input file.
-The line to be used is determined by the \fIX\fP, as with the %b option.
-.IP "%L"
-Replaced by the line number of the last line in the input file.
-.IP "%m"
-Replaced by the total number of input files.
-.IP "%p\fIX\fP"
-Replaced by the percent into the current input file, based on byte offsets.
-The line used is determined by the \fIX\fP as with the %b option.
-.IP "%P\fIX\fP"
-Replaced by the percent into the current input file, based on line numbers.
-The line used is determined by the \fIX\fP as with the %b option.
-.IP "%s"
-Same as %B.
-.IP "%t"
-Causes any trailing spaces to be removed.
-Usually used at the end of the string, but may appear anywhere.
-.IP "%x"
-Replaced by the name of the next input file in the list.
-.PP
-If any item is unknown (for example, the file size if input
-is a pipe), a question mark is printed instead.
-.PP
-The format of the prompt string can be changed
-depending on certain conditions.
-A question mark followed by a single character acts like an "IF":
-depending on the following character, a condition is evaluated.
-If the condition is true, any characters following the question mark
-and condition character, up to a period, are included in the prompt.
-If the condition is false, such characters are not included.
-A colon appearing between the question mark and the
-period can be used to establish an "ELSE": any characters between
-the colon and the period are included in the string if and only if
-the IF condition is false.
-Condition characters (which follow a question mark) may be:
-.IP "?a"
-True if any characters have been included in the prompt so far.
-.IP "?b\fIX\fP"
-True if the byte offset of the specified line is known.
-.IP "?B"
-True if the size of current input file is known.
-.IP "?c"
-True if the text is horizontally shifted (%c is not zero).
-.IP "?d\fIX\fP"
-True if the page number of the specified line is known.
-.IP "?e"
-True if at end-of-file.
-.IP "?f"
-True if there is an input filename
-(that is, if input is not a pipe).
-.IP "?l\fIX\fP"
-True if the line number of the specified line is known.
-.IP "?L"
-True if the line number of the last line in the file is known.
-.IP "?m"
-True if there is more than one input file.
-.IP "?n"
-True if this is the first prompt in a new input file.
-.IP "?p\fIX\fP"
-True if the percent into the current input file, based on byte offsets,
-of the specified line is known.
-.IP "?P\fIX\fP"
-True if the percent into the current input file, based on line numbers,
-of the specified line is known.
-.IP "?s"
-Same as "?B".
-.IP "?x"
-True if there is a next input file
-(that is, if the current input file is not the last one).
-.PP
-Any characters other than the special ones
-(question mark, colon, period, percent, and backslash)
-become literally part of the prompt.
-Any of the special characters may be included in the prompt literally
-by preceding it with a backslash.
-.PP
-Some examples:
-.sp
-?f%f:Standard input.
-.sp
-This prompt prints the filename, if known;
-otherwise the string "Standard input".
-.sp
-?f%f .?ltLine %lt:?pt%pt\e%:?btByte %bt:-...
-.sp
-This prompt would print the filename, if known.
-The filename is followed by the line number, if known,
-otherwise the percent if known, otherwise the byte offset if known.
-Otherwise, a dash is printed.
-Notice how each question mark has a matching period,
-and how the % after the %pt
-is included literally by escaping it with a backslash.
-.sp
-?n?f%f\ .?m(file\ %i\ of\ %m)\ ..?e(END)\ ?x-\ Next\e:\ %x..%t
-.sp
-This prints the filename if this is the first prompt in a file,
-followed by the "file N of N" message if there is more
-than one input file.
-Then, if we are at end-of-file, the string "(END)" is printed
-followed by the name of the next file, if there is one.
-Finally, any trailing spaces are truncated.
-This is the default prompt.
-For reference, here are the defaults for
-the other two prompts (\-m and \-M respectively).
-Each is broken into two lines here for readability only.
-.nf
-.sp
-?n?f%f\ .?m(file\ %i\ of\ %m)\ ..?e(END)\ ?x-\ Next\e:\ %x.:
- ?pB%pB\e%:byte\ %bB?s/%s...%t
-.sp
-?f%f\ .?n?m(file\ %i\ of\ %m)\ ..?ltlines\ %lt-%lb?L/%L.\ :
- byte\ %bB?s/%s.\ .?e(END)\ ?x-\ Next\e:\ %x.:?pB%pB\e%..%t
-.sp
-.fi
-And here is the default message produced by the = command:
-.nf
-.sp
-?f%f\ .?m(file\ %i\ of\ %m)\ .?ltlines\ %lt-%lb?L/%L.\ .
- byte\ %bB?s/%s.\ ?e(END)\ :?pB%pB\e%..%t
-.fi
-.PP
-The prompt expansion features are also used for another purpose:
-if an environment variable LESSEDIT is defined, it is used
-as the command to be executed when the v command is invoked.
-The LESSEDIT string is expanded in the same way as the prompt strings.
-The default value for LESSEDIT is:
-.nf
-.sp
- %E\ ?lm+%lm.\ %f
-.sp
-.fi
-Note that this expands to the editor name, followed by a + and the
-line number, followed by the file name.
-If your editor does not accept the "+linenumber" syntax, or has other
-differences in invocation syntax, the LESSEDIT variable can be
-changed to modify this default.
-
-.SH SECURITY
-When the environment variable LESSSECURE is set to 1,
-.I less
-runs in a "secure" mode.
-This means these features are disabled:
-.RS
-.IP "!"
-the shell command
-.IP "|"
-the pipe command
-.IP ":e"
-the examine command.
-.IP "v"
-the editing command
-.IP "s \-o"
-log files
-.IP "\-k"
-use of lesskey files
-.IP "\-t"
-use of tags files
-.IP " "
-metacharacters in filenames, such as *
-.IP " "
-filename completion (TAB, ^L)
-.RE
-.PP
-Less can also be compiled to be permanently in "secure" mode.
-
-.SH "COMPATIBILITY WITH MORE"
-If the environment variable LESS_IS_MORE is set to 1,
-or if the program is invoked via a file link named "more",
-.I less
-behaves (mostly) in conformance with the POSIX "more" command specification.
-In this mode, less behaves differently in these ways:
-.PP
-The \-e option works differently.
-If the \-e option is not set,
-.I less
-behaves as if the \-E option were set.
-If the \-e option is set,
-.I less
-behaves as if the \-e and \-F options were set.
-.PP
-The \-m option works differently.
-If the \-m option is not set, the medium prompt is used,
-and it is prefixed with the string "--More--".
-If the \-m option is set, the short prompt is used.
-.PP
-The \-n option acts like the \-z option.
-The normal behavior of the \-n option is unavailable in this mode.
-.PP
-The parameter to the \-p option is taken to be a
-.I less
-command rather than a search pattern.
-.PP
-The LESS environment variable is ignored,
-and the MORE environment variable is used in its place.
-
-.SH "ENVIRONMENT VARIABLES"
-Environment variables may be specified either in the system environment
-as usual, or in a
-.I lesskey
-(1) file.
-If environment variables are defined in more than one place,
-variables defined in a local lesskey file take precedence over
-variables defined in the system environment, which take precedence
-over variables defined in the system-wide lesskey file.
-.IP COLUMNS
-Sets the number of columns on the screen.
-Takes precedence over the number of columns specified by the TERM variable.
-(But if you have a windowing system which supports TIOCGWINSZ or WIOCGETD,
-the window system's idea of the screen size takes precedence over the
-LINES and COLUMNS environment variables.)
-.IP EDITOR
-The name of the editor (used for the v command).
-.IP HOME
-Name of the user's home directory
-(used to find a lesskey file on Unix and OS/2 systems).
-.IP "HOMEDRIVE, HOMEPATH"
-Concatenation of the HOMEDRIVE and HOMEPATH environment variables is
-the name of the user's home directory if the HOME variable is not set
-(only in the Windows version).
-.IP INIT
-Name of the user's init directory (used to find a lesskey file on OS/2 systems).
-.IP LANG
-Language for determining the character set.
-.IP LC_CTYPE
-Language for determining the character set.
-.IP LESS
-Options which are passed to
-.I less
-automatically.
-.IP LESSANSIENDCHARS
-Characters which may end an ANSI color escape sequence
-(default "m").
-.IP LESSANSIMIDCHARS
-Characters which may appear between the ESC character and the
-end character in an ANSI color escape sequence
-(default "0123456789;[?!"'#%()*+\ ".
-.IP LESSBINFMT
-Format for displaying non-printable, non-control characters.
-.IP LESSCHARDEF
-Defines a character set.
-.IP LESSCHARSET
-Selects a predefined character set.
-.IP LESSCLOSE
-Command line to invoke the (optional) input-postprocessor.
-.IP LESSECHO
-Name of the lessecho program (default "lessecho").
-The lessecho program is needed to expand metacharacters, such as * and ?,
-in filenames on Unix systems.
-.IP LESSEDIT
-Editor prototype string (used for the v command).
-See discussion under PROMPTS.
-.IP LESSGLOBALTAGS
-Name of the command used by the \-t option to find global tags.
-Normally should be set to "global" if your system has the
-.I global
-(1) command. If not set, global tags are not used.
-.IP LESSHISTFILE
-Name of the history file used to remember search commands and
-shell commands between invocations of
-.I less.
-If set to "\-" or "/dev/null", a history file is not used.
-The default is "$HOME/.lesshst" on Unix systems, "$HOME/_lesshst" on
-DOS and Windows systems, or "$HOME/lesshst.ini" or "$INIT/lesshst.ini"
-on OS/2 systems.
-.IP LESSHISTSIZE
-The maximum number of commands to save in the history file.
-The default is 100.
-.IP LESSKEY
-Name of the default lesskey(1) file.
-.IP LESSKEY_SYSTEM
-Name of the default system-wide lesskey(1) file.
-.IP LESSMETACHARS
-List of characters which are considered "metacharacters" by the shell.
-.IP LESSMETAESCAPE
-Prefix which less will add before each metacharacter in a
-command sent to the shell.
-If LESSMETAESCAPE is an empty string, commands containing
-metacharacters will not be passed to the shell.
-.IP LESSOPEN
-Command line to invoke the (optional) input-preprocessor.
-.IP LESSSECURE
-Runs less in "secure" mode.
-See discussion under SECURITY.
-.IP LESSSEPARATOR
-String to be appended to a directory name in filename completion.
-.IP LESSUTFBINFMT
-Format for displaying non-printable Unicode code points.
-.IP LESS_IS_MORE
-Emulate the
-.I more
-(1) command.
-.IP LINES
-Sets the number of lines on the screen.
-Takes precedence over the number of lines specified by the TERM variable.
-(But if you have a windowing system which supports TIOCGWINSZ or WIOCGETD,
-the window system's idea of the screen size takes precedence over the
-LINES and COLUMNS environment variables.)
-.IP PATH
-User's search path (used to find a lesskey file
-on MS-DOS and OS/2 systems).
-.IP SHELL
-The shell used to execute the ! command, as well as to expand filenames.
-.IP TERM
-The type of terminal on which
-.I less
-is being run.
-.IP VISUAL
-The name of the editor (used for the v command).
-
-.SH "SEE ALSO"
-lesskey(1)
-
-.SH WARNINGS
-The = command and prompts (unless changed by \-P)
-report the line numbers of the lines at the top and bottom of the screen,
-but the byte and percent of the line after the one at the bottom of the screen.
-.PP
-On certain older terminals (the so-called "magic cookie" terminals),
-search highlighting will cause an erroneous display.
-On such terminals, search highlighting is disabled by default
-to avoid possible problems.
-.PP
-When searching in a binary file, text which follows a null byte
-may not be found.
-This problem does not occur when searching with regular expressions turned
-off via ^R, and also does not occur when
-.I less
-is compiled to use the PCRE regular expression library.
-.PP
-In certain cases, when search highlighting is enabled and
-a search pattern begins with a ^,
-more text than the matching string may be highlighted.
-(This problem does not occur when less is compiled to use the POSIX
-regular expression package.)
-.PP
-On some systems,
-.I setlocale
-claims that ASCII characters 0 thru 31 are control characters
-rather than binary characters.
-This causes
-.I less
-to treat some binary files as ordinary, non-binary files.
-To workaround this problem, set the environment variable
-LESSCHARSET to "ascii" (or whatever character set is appropriate).
-.PP
-This manual is too long.
-.PP
-See http://www.greenwoodsoftware.com/less for the latest list of known bugs in less.
-
-.SH COPYRIGHT
-Copyright (C) 1984-2007 Mark Nudelman
-.PP
-less is part of the GNU project and is free software.
-You can redistribute it and/or modify it
-under the terms of either
-(1) the GNU General Public License as published by
-the Free Software Foundation; or (2) the Less License.
-See the file README in the less distribution for more details
-regarding redistribution.
-You should have received a copy of the GNU General Public License
-along with the source for less; see the file COPYING.
-If not, write to the Free Software Foundation, 59 Temple Place,
-Suite 330, Boston, MA 02111-1307, USA.
-You should also have received a copy of the Less License;
-see the file LICENSE.
-.PP
-less 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.
-
-.SH AUTHOR
-.PP
-Mark Nudelman <markn@greenwoodsoftware.com>
-.br
-Send bug reports or comments to the above address or to
-.br
-bug-less@gnu.org.
-.br
-For more information, see the less homepage at
-.br
-http://www.greenwoodsoftware.com/less.
diff --git a/contrib/less/lessecho.c b/contrib/less/lessecho.c
deleted file mode 100644
index ac42c06..0000000
--- a/contrib/less/lessecho.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * lessecho [-ox] [-cx] [-pn] [-dn] [-a] file ...
- * Simply echos its filename arguments on standard output.
- * But any argument containing spaces is enclosed in quotes.
- *
- * -ox Specifies "x" to be the open quote character.
- * -cx Specifies "x" to be the close quote character.
- * -pn Specifies "n" to be the open quote character, as an integer.
- * -dn Specifies "n" to be the close quote character, as an integer.
- * -mx Specifies "x" to be a metachar.
- * -nn Specifies "n" to be a metachar, as an integer.
- * -ex Specifies "x" to be the escape char for metachars.
- * -fn Specifies "x" to be the escape char for metachars, as an integer.
- * -a Specifies that all arguments are to be quoted.
- * The default is that only arguments containing spaces are quoted.
- */
-
-#include "less.h"
-
-static char *version = "$Revision: 1.11 $";
-
-static int quote_all = 0;
-static char openquote = '"';
-static char closequote = '"';
-static char *meta_escape = "\\";
-static char meta_escape_buf[2];
-static char metachars[64] = "";
-static int num_metachars = 0;
-
- static void
-pr_usage()
-{
- fprintf(stderr,
- "usage: lessecho [-ox] [-cx] [-pn] [-dn] [-mx] [-nn] [-ex] [-fn] [-a] file ...\n");
-}
-
- static void
-pr_version()
-{
- char *p;
- char buf[10];
- char *pbuf = buf;
-
- for (p = version; *p != ' '; p++)
- if (*p == '\0')
- return;
- for (p++; *p != '$' && *p != ' ' && *p != '\0'; p++)
- *pbuf++ = *p;
- *pbuf = '\0';
- printf("%s\n", buf);
-}
-
- static void
-pr_error(s)
- char *s;
-{
- fprintf(stderr, "%s\n", s);
- exit(1);
-}
-
- static long
-lstrtol(s, radix, pend)
- char *s;
- int radix;
- char **pend;
-{
- int v;
- int neg = 0;
- long n = 0;
-
- /* Skip leading white space. */
- while (*s == ' ' || *s == '\t')
- s++;
-
- /* Check for a leading + or -. */
- if (*s == '-')
- {
- neg = 1;
- s++;
- } else if (*s == '+')
- {
- s++;
- }
-
- /* Determine radix if caller does not specify. */
- if (radix == 0)
- {
- radix = 10;
- if (*s == '0')
- {
- switch (*++s)
- {
- case 'x':
- radix = 16;
- s++;
- break;
- default:
- radix = 8;
- break;
- }
- }
- }
-
- /* Parse the digits of the number. */
- for (;;)
- {
- if (*s >= '0' && *s <= '9')
- v = *s - '0';
- else if (*s >= 'a' && *s <= 'f')
- v = *s - 'a' + 10;
- else if (*s >= 'A' && *s <= 'F')
- v = *s - 'A' + 10;
- else
- break;
- if (v >= radix)
- break;
- n = n * radix + v;
- s++;
- }
-
- if (pend != NULL)
- {
- /* Skip trailing white space. */
- while (*s == ' ' || *s == '\t')
- s++;
- *pend = s;
- }
- if (neg)
- return (-n);
- return (n);
-}
-
-
-#if !HAVE_STRCHR
- char *
-strchr(s, c)
- char *s;
- int c;
-{
- for ( ; *s != '\0'; s++)
- if (*s == c)
- return (s);
- if (c == '\0')
- return (s);
- return (NULL);
-}
-#endif
-
- int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- char *arg;
- char *s;
- int no_more_options;
-
- no_more_options = 0;
- while (--argc > 0)
- {
- arg = *++argv;
- if (*arg != '-' || no_more_options)
- break;
- switch (*++arg)
- {
- case 'a':
- quote_all = 1;
- break;
- case 'c':
- closequote = *++arg;
- break;
- case 'd':
- closequote = lstrtol(++arg, 0, &s);
- if (s == arg)
- pr_error("Missing number after -d");
- break;
- case 'e':
- if (strcmp(++arg, "-") == 0)
- meta_escape = "";
- else
- meta_escape = arg;
- break;
- case 'f':
- meta_escape_buf[0] = lstrtol(++arg, 0, &s);
- meta_escape = meta_escape_buf;
- if (s == arg)
- pr_error("Missing number after -f");
- break;
- case 'o':
- openquote = *++arg;
- break;
- case 'p':
- openquote = lstrtol(++arg, 0, &s);
- if (s == arg)
- pr_error("Missing number after -p");
- break;
- case 'm':
- metachars[num_metachars++] = *++arg;
- metachars[num_metachars] = '\0';
- break;
- case 'n':
- metachars[num_metachars++] = lstrtol(++arg, 0, &s);
- if (s == arg)
- pr_error("Missing number after -n");
- metachars[num_metachars] = '\0';
- break;
- case '?':
- pr_usage();
- return (0);
- case '-':
- if (*++arg == '\0')
- {
- no_more_options = 1;
- break;
- }
- if (strcmp(arg, "version") == 0)
- {
- pr_version();
- return (0);
- }
- if (strcmp(arg, "help") == 0)
- {
- pr_usage();
- return (0);
- }
- pr_error("Invalid option after --");
- default:
- pr_error("Invalid option letter");
- }
- }
-
- while (argc-- > 0)
- {
- int has_meta = 0;
- arg = *argv++;
- for (s = arg; *s != '\0'; s++)
- {
- if (strchr(metachars, *s) != NULL)
- {
- has_meta = 1;
- break;
- }
- }
- if (quote_all || (has_meta && strlen(meta_escape) == 0))
- printf("%c%s%c", openquote, arg, closequote);
- else
- {
- for (s = arg; *s != '\0'; s++)
- {
- if (strchr(metachars, *s) != NULL)
- printf("%s", meta_escape);
- printf("%c", *s);
- }
- }
- if (argc > 0)
- printf(" ");
- else
- printf("\n");
- }
- return (0);
-}
diff --git a/contrib/less/lessecho.man b/contrib/less/lessecho.man
deleted file mode 100644
index 98f0591..0000000
--- a/contrib/less/lessecho.man
+++ /dev/null
@@ -1,49 +0,0 @@
-LESSECHO(1) LESSECHO(1)
-
-
-
-NAME
- lessecho - expand metacharacters
-
-SYNOPSIS
- lessecho [-ox] [-cx] [-pn] [-dn] [-mx] [-nn] [-ex] [-a] file ...
-
-DESCRIPTION
- lessecho is a program that simply echos its arguments on standard out-
- put. But any argument containing spaces is enclosed in quotes.
-
-OPTIONS
- A summary of options is included below.
-
- -ox Specifies "x" to be the open quote character.
-
- -cx Specifies "x" to be the close quote character.
-
- -pn Specifies "n" to be the open quote character, as an integer.
-
- -dn Specifies "n" to be the close quote character, as an integer.
-
- -mx Specifies "x" to be a metachar.
-
- -nn Specifies "n" to be a metachar, as an integer.
-
- -ex Specifies "x" to be the escape char for metachars.
-
- -fn Specifies "n" to be the escape char for metachars, as an inte-
- ger.
-
- -a Specifies that all arguments are to be quoted. The default is
- that only arguments containing spaces are quoted.
-
-SEE ALSO
- less(1)
-
-AUTHOR
- This manual page was written by Thomas Schoepf <schoepf@debian.org>,
- for the Debian GNU/Linux system (but may be used by others).
-
- Send bug reports or comments to bug-less@gnu.org.
-
-
-
- Version 416: 22 Nov 2007 LESSECHO(1)
diff --git a/contrib/less/lessecho.nro b/contrib/less/lessecho.nro
deleted file mode 100644
index 05542f7..0000000
--- a/contrib/less/lessecho.nro
+++ /dev/null
@@ -1,47 +0,0 @@
-.TH LESSECHO 1 "Version 416: 22 Nov 2007"
-.SH NAME
-lessecho \- expand metacharacters
-.SH SYNOPSIS
-.B lessecho
-.I "[-ox] [-cx] [-pn] [-dn] [-mx] [-nn] [-ex] [-a] file ..."
-.SH "DESCRIPTION"
-.I lessecho
-is a program that simply echos its arguments on standard output.
-But any argument containing spaces is enclosed in quotes.
-.SH OPTIONS
-A summary of options is included below.
-.TP
-.B \-ox
-Specifies "x" to be the open quote character.
-.TP
-.B \-cx
-Specifies "x" to be the close quote character.
-.TP
-.B \-pn
-Specifies "n" to be the open quote character, as an integer.
-.TP
-.B \-dn
-Specifies "n" to be the close quote character, as an integer.
-.TP
-.B \-mx
-Specifies "x" to be a metachar.
-.TP
-.B \-nn
-Specifies "n" to be a metachar, as an integer.
-.TP
-.B \-ex
-Specifies "x" to be the escape char for metachars.
-.TP
-.B \-fn
-Specifies "n" to be the escape char for metachars, as an integer.
-.TP
-.B \-a
-Specifies that all arguments are to be quoted.
-The default is that only arguments containing spaces are quoted.
-.SH "SEE ALSO"
-less(1)
-.SH AUTHOR
-This manual page was written by Thomas Schoepf <schoepf@debian.org>,
-for the Debian GNU/Linux system (but may be used by others).
-.PP
-Send bug reports or comments to bug-less@gnu.org.
diff --git a/contrib/less/lesskey.c b/contrib/less/lesskey.c
deleted file mode 100644
index 2e95c20..0000000
--- a/contrib/less/lesskey.c
+++ /dev/null
@@ -1,871 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * lesskey [-o output] [input]
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *
- * Make a .less file.
- * If no input file is specified, standard input is used.
- * If no output file is specified, $HOME/.less is used.
- *
- * The .less file is used to specify (to "less") user-defined
- * key bindings. Basically any sequence of 1 to MAX_CMDLEN
- * keystrokes may be bound to an existing less function.
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *
- * The input file is an ascii file consisting of a
- * sequence of lines of the form:
- * string <whitespace> action [chars] <newline>
- *
- * "string" is a sequence of command characters which form
- * the new user-defined command. The command
- * characters may be:
- * 1. The actual character itself.
- * 2. A character preceded by ^ to specify a
- * control character (e.g. ^X means control-X).
- * 3. A backslash followed by one to three octal digits
- * to specify a character by its octal value.
- * 4. A backslash followed by b, e, n, r or t
- * to specify \b, ESC, \n, \r or \t, respectively.
- * 5. Any character (other than those mentioned above) preceded
- * by a \ to specify the character itself (characters which
- * must be preceded by \ include ^, \, and whitespace.
- * "action" is the name of a "less" action, from the table below.
- * "chars" is an optional sequence of characters which is treated
- * as keyboard input after the command is executed.
- *
- * Blank lines and lines which start with # are ignored,
- * except for the special control lines:
- * #command Signals the beginning of the command
- * keys section.
- * #line-edit Signals the beginning of the line-editing
- * keys section.
- * #env Signals the beginning of the environment
- * variable section.
- * #stop Stops command parsing in less;
- * causes all default keys to be disabled.
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *
- * The output file is a non-ascii file, consisting of a header,
- * one or more sections, and a trailer.
- * Each section begins with a section header, a section length word
- * and the section data. Normally there are three sections:
- * CMD_SECTION Definition of command keys.
- * EDIT_SECTION Definition of editing keys.
- * END_SECTION A special section header, with no
- * length word or section data.
- *
- * Section data consists of zero or more byte sequences of the form:
- * string <0> <action>
- * or
- * string <0> <action|A_EXTRA> chars <0>
- *
- * "string" is the command string.
- * "<0>" is one null byte.
- * "<action>" is one byte containing the action code (the A_xxx value).
- * If action is ORed with A_EXTRA, the action byte is followed
- * by the null-terminated "chars" string.
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- */
-
-#include "less.h"
-#include "lesskey.h"
-#include "cmd.h"
-
-struct cmdname
-{
- char *cn_name;
- int cn_action;
-};
-
-struct cmdname cmdnames[] =
-{
- { "back-bracket", A_B_BRACKET },
- { "back-line", A_B_LINE },
- { "back-line-force", A_BF_LINE },
- { "back-screen", A_B_SCREEN },
- { "back-scroll", A_B_SCROLL },
- { "back-search", A_B_SEARCH },
- { "back-window", A_B_WINDOW },
- { "debug", A_DEBUG },
- { "digit", A_DIGIT },
- { "display-flag", A_DISP_OPTION },
- { "display-option", A_DISP_OPTION },
- { "end", A_GOEND },
- { "examine", A_EXAMINE },
- { "first-cmd", A_FIRSTCMD },
- { "firstcmd", A_FIRSTCMD },
- { "flush-repaint", A_FREPAINT },
- { "forw-bracket", A_F_BRACKET },
- { "forw-forever", A_F_FOREVER },
- { "forw-line", A_F_LINE },
- { "forw-line-force", A_FF_LINE },
- { "forw-screen", A_F_SCREEN },
- { "forw-screen-force", A_FF_SCREEN },
- { "forw-scroll", A_F_SCROLL },
- { "forw-search", A_F_SEARCH },
- { "forw-window", A_F_WINDOW },
- { "goto-end", A_GOEND },
- { "goto-line", A_GOLINE },
- { "goto-mark", A_GOMARK },
- { "help", A_HELP },
- { "index-file", A_INDEX_FILE },
- { "invalid", A_UINVALID },
- { "left-scroll", A_LSHIFT },
- { "next-file", A_NEXT_FILE },
- { "next-tag", A_NEXT_TAG },
- { "noaction", A_NOACTION },
- { "percent", A_PERCENT },
- { "pipe", A_PIPE },
- { "prev-file", A_PREV_FILE },
- { "prev-tag", A_PREV_TAG },
- { "quit", A_QUIT },
- { "remove-file", A_REMOVE_FILE },
- { "repaint", A_REPAINT },
- { "repaint-flush", A_FREPAINT },
- { "repeat-search", A_AGAIN_SEARCH },
- { "repeat-search-all", A_T_AGAIN_SEARCH },
- { "reverse-search", A_REVERSE_SEARCH },
- { "reverse-search-all", A_T_REVERSE_SEARCH },
- { "right-scroll", A_RSHIFT },
- { "set-mark", A_SETMARK },
- { "shell", A_SHELL },
- { "status", A_STAT },
- { "toggle-flag", A_OPT_TOGGLE },
- { "toggle-option", A_OPT_TOGGLE },
- { "undo-hilite", A_UNDO_SEARCH },
- { "version", A_VERSION },
- { "visual", A_VISUAL },
- { NULL, 0 }
-};
-
-struct cmdname editnames[] =
-{
- { "back-complete", EC_B_COMPLETE },
- { "backspace", EC_BACKSPACE },
- { "delete", EC_DELETE },
- { "down", EC_DOWN },
- { "end", EC_END },
- { "expand", EC_EXPAND },
- { "forw-complete", EC_F_COMPLETE },
- { "home", EC_HOME },
- { "insert", EC_INSERT },
- { "invalid", EC_UINVALID },
- { "kill-line", EC_LINEKILL },
- { "left", EC_LEFT },
- { "literal", EC_LITERAL },
- { "right", EC_RIGHT },
- { "up", EC_UP },
- { "word-backspace", EC_W_BACKSPACE },
- { "word-delete", EC_W_DELETE },
- { "word-left", EC_W_LEFT },
- { "word-right", EC_W_RIGHT },
- { NULL, 0 }
-};
-
-struct table
-{
- struct cmdname *names;
- char *pbuffer;
- char buffer[MAX_USERCMD];
-};
-
-struct table cmdtable;
-struct table edittable;
-struct table vartable;
-struct table *currtable = &cmdtable;
-
-char fileheader[] = {
- C0_LESSKEY_MAGIC,
- C1_LESSKEY_MAGIC,
- C2_LESSKEY_MAGIC,
- C3_LESSKEY_MAGIC
-};
-char filetrailer[] = {
- C0_END_LESSKEY_MAGIC,
- C1_END_LESSKEY_MAGIC,
- C2_END_LESSKEY_MAGIC
-};
-char cmdsection[1] = { CMD_SECTION };
-char editsection[1] = { EDIT_SECTION };
-char varsection[1] = { VAR_SECTION };
-char endsection[1] = { END_SECTION };
-
-char *infile = NULL;
-char *outfile = NULL ;
-
-int linenum;
-int errors;
-
-extern char version[];
-
- void
-usage()
-{
- fprintf(stderr, "usage: lesskey [-o output] [input]\n");
- exit(1);
-}
-
- char *
-mkpathname(dirname, filename)
- char *dirname;
- char *filename;
-{
- char *pathname;
-
- pathname = calloc(strlen(dirname) + strlen(filename) + 2, sizeof(char));
- strcpy(pathname, dirname);
- strcat(pathname, PATHNAME_SEP);
- strcat(pathname, filename);
- return (pathname);
-}
-
-/*
- * Figure out the name of a default file (in the user's HOME directory).
- */
- char *
-homefile(filename)
- char *filename;
-{
- char *p;
- char *pathname;
-
- if ((p = getenv("HOME")) != NULL && *p != '\0')
- pathname = mkpathname(p, filename);
-#if OS2
- else if ((p = getenv("INIT")) != NULL && *p != '\0')
- pathname = mkpathname(p, filename);
-#endif
- else
- {
- fprintf(stderr, "cannot find $HOME - using current directory\n");
- pathname = mkpathname(".", filename);
- }
- return (pathname);
-}
-
-/*
- * Parse command line arguments.
- */
- void
-parse_args(argc, argv)
- int argc;
- char **argv;
-{
- char *arg;
-
- outfile = NULL;
- while (--argc > 0)
- {
- arg = *++argv;
- if (arg[0] != '-')
- /* Arg does not start with "-"; it's not an option. */
- break;
- if (arg[1] == '\0')
- /* "-" means standard input. */
- break;
- if (arg[1] == '-' && arg[2] == '\0')
- {
- /* "--" means end of options. */
- argc--;
- argv++;
- break;
- }
- switch (arg[1])
- {
- case '-':
- if (strncmp(arg, "--output", 8) == 0)
- {
- if (arg[8] == '\0')
- outfile = &arg[8];
- else if (arg[8] == '=')
- outfile = &arg[9];
- else
- usage();
- goto opt_o;
- }
- if (strcmp(arg, "--version") == 0)
- {
- goto opt_V;
- }
- usage();
- break;
- case 'o':
- outfile = &argv[0][2];
- opt_o:
- if (*outfile == '\0')
- {
- if (--argc <= 0)
- usage();
- outfile = *(++argv);
- }
- break;
- case 'V':
- opt_V:
- printf("lesskey version %s\n", version);
- exit(0);
- default:
- usage();
- }
- }
- if (argc > 1)
- usage();
- /*
- * Open the input file, or use DEF_LESSKEYINFILE if none specified.
- */
- if (argc > 0)
- infile = *argv;
- else
- infile = homefile(DEF_LESSKEYINFILE);
-}
-
-/*
- * Initialize data structures.
- */
- void
-init_tables()
-{
- cmdtable.names = cmdnames;
- cmdtable.pbuffer = cmdtable.buffer;
-
- edittable.names = editnames;
- edittable.pbuffer = edittable.buffer;
-
- vartable.names = NULL;
- vartable.pbuffer = vartable.buffer;
-}
-
-/*
- * Parse one character of a string.
- */
- char *
-tstr(pp, xlate)
- char **pp;
- int xlate;
-{
- register char *p;
- register char ch;
- register int i;
- static char buf[10];
- static char tstr_control_k[] =
- { SK_SPECIAL_KEY, SK_CONTROL_K, 6, 1, 1, 1, '\0' };
-
- p = *pp;
- switch (*p)
- {
- case '\\':
- ++p;
- switch (*p)
- {
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- /*
- * Parse an octal number.
- */
- ch = 0;
- i = 0;
- do
- ch = 8*ch + (*p - '0');
- while (*++p >= '0' && *p <= '7' && ++i < 3);
- *pp = p;
- if (xlate && ch == CONTROL('K'))
- return tstr_control_k;
- buf[0] = ch;
- buf[1] = '\0';
- return (buf);
- case 'b':
- *pp = p+1;
- return ("\b");
- case 'e':
- *pp = p+1;
- buf[0] = ESC;
- buf[1] = '\0';
- return (buf);
- case 'n':
- *pp = p+1;
- return ("\n");
- case 'r':
- *pp = p+1;
- return ("\r");
- case 't':
- *pp = p+1;
- return ("\t");
- case 'k':
- if (xlate)
- {
- switch (*++p)
- {
- case 'u': ch = SK_UP_ARROW; break;
- case 'd': ch = SK_DOWN_ARROW; break;
- case 'r': ch = SK_RIGHT_ARROW; break;
- case 'l': ch = SK_LEFT_ARROW; break;
- case 'U': ch = SK_PAGE_UP; break;
- case 'D': ch = SK_PAGE_DOWN; break;
- case 'h': ch = SK_HOME; break;
- case 'e': ch = SK_END; break;
- case 'x': ch = SK_DELETE; break;
- default:
- error("illegal char after \\k");
- *pp = p+1;
- return ("");
- }
- *pp = p+1;
- buf[0] = SK_SPECIAL_KEY;
- buf[1] = ch;
- buf[2] = 6;
- buf[3] = 1;
- buf[4] = 1;
- buf[5] = 1;
- buf[6] = '\0';
- return (buf);
- }
- /* FALLTHRU */
- default:
- /*
- * Backslash followed by any other char
- * just means that char.
- */
- *pp = p+1;
- buf[0] = *p;
- buf[1] = '\0';
- if (xlate && buf[0] == CONTROL('K'))
- return tstr_control_k;
- return (buf);
- }
- case '^':
- /*
- * Carat means CONTROL.
- */
- *pp = p+2;
- buf[0] = CONTROL(p[1]);
- buf[1] = '\0';
- if (buf[0] == CONTROL('K'))
- return tstr_control_k;
- return (buf);
- }
- *pp = p+1;
- buf[0] = *p;
- buf[1] = '\0';
- if (xlate && buf[0] == CONTROL('K'))
- return tstr_control_k;
- return (buf);
-}
-
-/*
- * Skip leading spaces in a string.
- */
- public char *
-skipsp(s)
- register char *s;
-{
- while (*s == ' ' || *s == '\t')
- s++;
- return (s);
-}
-
-/*
- * Skip non-space characters in a string.
- */
- public char *
-skipnsp(s)
- register char *s;
-{
- while (*s != '\0' && *s != ' ' && *s != '\t')
- s++;
- return (s);
-}
-
-/*
- * Clean up an input line:
- * strip off the trailing newline & any trailing # comment.
- */
- char *
-clean_line(s)
- char *s;
-{
- register int i;
-
- s = skipsp(s);
- for (i = 0; s[i] != '\n' && s[i] != '\r' && s[i] != '\0'; i++)
- if (s[i] == '#' && (i == 0 || s[i-1] != '\\'))
- break;
- s[i] = '\0';
- return (s);
-}
-
-/*
- * Add a byte to the output command table.
- */
- void
-add_cmd_char(c)
- int c;
-{
- if (currtable->pbuffer >= currtable->buffer + MAX_USERCMD)
- {
- error("too many commands");
- exit(1);
- }
- *(currtable->pbuffer)++ = c;
-}
-
-/*
- * Add a string to the output command table.
- */
- void
-add_cmd_str(s)
- char *s;
-{
- for ( ; *s != '\0'; s++)
- add_cmd_char(*s);
-}
-
-/*
- * See if we have a special "control" line.
- */
- int
-control_line(s)
- char *s;
-{
-#define PREFIX(str,pat) (strncmp(str,pat,strlen(pat)-1) == 0)
-
- if (PREFIX(s, "#line-edit"))
- {
- currtable = &edittable;
- return (1);
- }
- if (PREFIX(s, "#command"))
- {
- currtable = &cmdtable;
- return (1);
- }
- if (PREFIX(s, "#env"))
- {
- currtable = &vartable;
- return (1);
- }
- if (PREFIX(s, "#stop"))
- {
- add_cmd_char('\0');
- add_cmd_char(A_END_LIST);
- return (1);
- }
- return (0);
-}
-
-/*
- * Output some bytes.
- */
- void
-fputbytes(fd, buf, len)
- FILE *fd;
- char *buf;
- int len;
-{
- while (len-- > 0)
- {
- fwrite(buf, sizeof(char), 1, fd);
- buf++;
- }
-}
-
-/*
- * Output an integer, in special KRADIX form.
- */
- void
-fputint(fd, val)
- FILE *fd;
- unsigned int val;
-{
- char c;
-
- if (val >= KRADIX*KRADIX)
- {
- fprintf(stderr, "error: integer too big (%d > %d)\n",
- val, KRADIX*KRADIX);
- exit(1);
- }
- c = val % KRADIX;
- fwrite(&c, sizeof(char), 1, fd);
- c = val / KRADIX;
- fwrite(&c, sizeof(char), 1, fd);
-}
-
-/*
- * Find an action, given the name of the action.
- */
- int
-findaction(actname)
- char *actname;
-{
- int i;
-
- for (i = 0; currtable->names[i].cn_name != NULL; i++)
- if (strcmp(currtable->names[i].cn_name, actname) == 0)
- return (currtable->names[i].cn_action);
- error("unknown action");
- return (A_INVALID);
-}
-
- void
-error(s)
- char *s;
-{
- fprintf(stderr, "line %d: %s\n", linenum, s);
- errors++;
-}
-
-
- void
-parse_cmdline(p)
- char *p;
-{
- int cmdlen;
- char *actname;
- int action;
- char *s;
- char c;
-
- /*
- * Parse the command string and store it in the current table.
- */
- cmdlen = 0;
- do
- {
- s = tstr(&p, 1);
- cmdlen += strlen(s);
- if (cmdlen > MAX_CMDLEN)
- error("command too long");
- else
- add_cmd_str(s);
- } while (*p != ' ' && *p != '\t' && *p != '\0');
- /*
- * Terminate the command string with a null byte.
- */
- add_cmd_char('\0');
-
- /*
- * Skip white space between the command string
- * and the action name.
- * Terminate the action name with a null byte.
- */
- p = skipsp(p);
- if (*p == '\0')
- {
- error("missing action");
- return;
- }
- actname = p;
- p = skipnsp(p);
- c = *p;
- *p = '\0';
-
- /*
- * Parse the action name and store it in the current table.
- */
- action = findaction(actname);
-
- /*
- * See if an extra string follows the action name.
- */
- *p = c;
- p = skipsp(p);
- if (*p == '\0')
- {
- add_cmd_char(action);
- } else
- {
- /*
- * OR the special value A_EXTRA into the action byte.
- * Put the extra string after the action byte.
- */
- add_cmd_char(action | A_EXTRA);
- while (*p != '\0')
- add_cmd_str(tstr(&p, 0));
- add_cmd_char('\0');
- }
-}
-
- void
-parse_varline(p)
- char *p;
-{
- char *s;
-
- do
- {
- s = tstr(&p, 0);
- add_cmd_str(s);
- } while (*p != ' ' && *p != '\t' && *p != '=' && *p != '\0');
- /*
- * Terminate the variable name with a null byte.
- */
- add_cmd_char('\0');
-
- p = skipsp(p);
- if (*p++ != '=')
- {
- error("missing =");
- return;
- }
-
- add_cmd_char(EV_OK|A_EXTRA);
-
- p = skipsp(p);
- while (*p != '\0')
- {
- s = tstr(&p, 0);
- add_cmd_str(s);
- }
- add_cmd_char('\0');
-}
-
-/*
- * Parse a line from the lesskey file.
- */
- void
-parse_line(line)
- char *line;
-{
- char *p;
-
- /*
- * See if it is a control line.
- */
- if (control_line(line))
- return;
- /*
- * Skip leading white space.
- * Replace the final newline with a null byte.
- * Ignore blank lines and comments.
- */
- p = clean_line(line);
- if (*p == '\0')
- return;
-
- if (currtable == &vartable)
- parse_varline(p);
- else
- parse_cmdline(p);
-}
-
- int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- FILE *desc;
- FILE *out;
- char line[1024];
-
-#ifdef WIN32
- if (getenv("HOME") == NULL)
- {
- /*
- * If there is no HOME environment variable,
- * try the concatenation of HOMEDRIVE + HOMEPATH.
- */
- char *drive = getenv("HOMEDRIVE");
- char *path = getenv("HOMEPATH");
- if (drive != NULL && path != NULL)
- {
- char *env = (char *) calloc(strlen(drive) +
- strlen(path) + 6, sizeof(char));
- strcpy(env, "HOME=");
- strcat(env, drive);
- strcat(env, path);
- putenv(env);
- }
- }
-#endif /* WIN32 */
-
- /*
- * Process command line arguments.
- */
- parse_args(argc, argv);
- init_tables();
-
- /*
- * Open the input file.
- */
- if (strcmp(infile, "-") == 0)
- desc = stdin;
- else if ((desc = fopen(infile, "r")) == NULL)
- {
-#if HAVE_PERROR
- perror(infile);
-#else
- fprintf(stderr, "Cannot open %s\n", infile);
-#endif
- usage();
- }
-
- /*
- * Read and parse the input file, one line at a time.
- */
- errors = 0;
- linenum = 0;
- while (fgets(line, sizeof(line), desc) != NULL)
- {
- ++linenum;
- parse_line(line);
- }
-
- /*
- * Write the output file.
- * If no output file was specified, use "$HOME/.less"
- */
- if (errors > 0)
- {
- fprintf(stderr, "%d errors; no output produced\n", errors);
- exit(1);
- }
-
- if (outfile == NULL)
- outfile = getenv("LESSKEY");
- if (outfile == NULL)
- outfile = homefile(LESSKEYFILE);
- if ((out = fopen(outfile, "wb")) == NULL)
- {
-#if HAVE_PERROR
- perror(outfile);
-#else
- fprintf(stderr, "Cannot open %s\n", outfile);
-#endif
- exit(1);
- }
-
- /* File header */
- fputbytes(out, fileheader, sizeof(fileheader));
-
- /* Command key section */
- fputbytes(out, cmdsection, sizeof(cmdsection));
- fputint(out, cmdtable.pbuffer - cmdtable.buffer);
- fputbytes(out, (char *)cmdtable.buffer, cmdtable.pbuffer-cmdtable.buffer);
- /* Edit key section */
- fputbytes(out, editsection, sizeof(editsection));
- fputint(out, edittable.pbuffer - edittable.buffer);
- fputbytes(out, (char *)edittable.buffer, edittable.pbuffer-edittable.buffer);
-
- /* Environment variable section */
- fputbytes(out, varsection, sizeof(varsection));
- fputint(out, vartable.pbuffer - vartable.buffer);
- fputbytes(out, (char *)vartable.buffer, vartable.pbuffer-vartable.buffer);
-
- /* File trailer */
- fputbytes(out, endsection, sizeof(endsection));
- fputbytes(out, filetrailer, sizeof(filetrailer));
- return (0);
-}
diff --git a/contrib/less/lesskey.h b/contrib/less/lesskey.h
deleted file mode 100644
index e6601a4..0000000
--- a/contrib/less/lesskey.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Format of a lesskey file:
- *
- * LESSKEY_MAGIC (4 bytes)
- * sections...
- * END_LESSKEY_MAGIC (4 bytes)
- *
- * Each section is:
- *
- * section_MAGIC (1 byte)
- * section_length (2 bytes)
- * key table (section_length bytes)
- */
-#define C0_LESSKEY_MAGIC '\0'
-#define C1_LESSKEY_MAGIC 'M'
-#define C2_LESSKEY_MAGIC '+'
-#define C3_LESSKEY_MAGIC 'G'
-
-#define CMD_SECTION 'c'
-#define EDIT_SECTION 'e'
-#define VAR_SECTION 'v'
-#define END_SECTION 'x'
-
-#define C0_END_LESSKEY_MAGIC 'E'
-#define C1_END_LESSKEY_MAGIC 'n'
-#define C2_END_LESSKEY_MAGIC 'd'
-
-/* */
-#define KRADIX 64
diff --git a/contrib/less/lesskey.man b/contrib/less/lesskey.man
deleted file mode 100644
index bdc2eba..0000000
--- a/contrib/less/lesskey.man
+++ /dev/null
@@ -1,360 +0,0 @@
-LESSKEY(1) LESSKEY(1)
-
-
-
-NAME
- lesskey - specify key bindings for less
-
-SYNOPSIS
- lesskey [-o output] [--] [input]
- lesskey [--output=output] [--] [input]
- lesskey -V
- lesskey --version
-
-DESCRIPTION
- Lesskey is used to specify a set of key bindings to be used by less.
- The input file is a text file which describes the key bindings, If the
- input file is "-", standard input is read. If no input file is speci-
- fied, a standard filename is used as the name of the input file, which
- depends on the system being used: On Unix systems, $HOME/.lesskey is
- used; on MS-DOS systems, $HOME/_lesskey is used; and on OS/2 systems
- $HOME/lesskey.ini is used, or $INIT/lesskey.ini if $HOME is undefined.
- The output file is a binary file which is used by less. If no output
- file is specified, and the environment variable LESSKEY is set, the
- value of LESSKEY is used as the name of the output file. Otherwise, a
- standard filename is used as the name of the output file, which depends
- on the system being used: On Unix and OS-9 systems, $HOME/.less is
- used; on MS-DOS systems, $HOME/_less is used; and on OS/2 systems,
- $HOME/less.ini is used, or $INIT/less.ini if $HOME is undefined. If
- the output file already exists, lesskey will overwrite it.
-
- The -V or --version option causes lesskey to print its version number
- and immediately exit. If -V or --version is present, other options and
- arguments are ignored.
-
- The input file consists of one or more sections. Each section starts
- with a line that identifies the type of section. Possible sections
- are:
-
- #command
- Defines new command keys.
-
- #line-edit
- Defines new line-editing keys.
-
- #env Defines environment variables.
-
- Blank lines and lines which start with a pound sign (#) are ignored,
- except for the special section header lines.
-
-
-COMMAND SECTION
- The command section begins with the line
-
- #command
-
- If the command section is the first section in the file, this line may
- be omitted. The command section consists of lines of the form:
-
- string <whitespace> action [extra-string] <newline>
-
- Whitespace is any sequence of one or more spaces and/or tabs. The
- string is the command key(s) which invoke the action. The string may
- be a single command key, or a sequence of up to 15 keys. The action is
- the name of the less action, from the list below. The characters in
- the string may appear literally, or be prefixed by a caret to indicate
- a control key. A backslash followed by one to three octal digits may
- be used to specify a character by its octal value. A backslash fol-
- lowed by certain characters specifies input characters as follows:
-
- \b BACKSPACE
-
- \e ESCAPE
-
- \n NEWLINE
-
- \r RETURN
-
- \t TAB
-
- \ku UP ARROW
-
- \kd DOWN ARROW
-
- \kr RIGHT ARROW
-
- \kl LEFT ARROW
-
- \kU PAGE UP
-
- \kD PAGE DOWN
-
- \kh HOME
-
- \ke END
-
- \kx DELETE
-
- A backslash followed by any other character indicates that character is
- to be taken literally. Characters which must be preceded by backslash
- include caret, space, tab and the backslash itself.
-
- An action may be followed by an "extra" string. When such a command is
- entered while running less, the action is performed, and then the extra
- string is parsed, just as if it were typed in to less. This feature
- can be used in certain cases to extend the functionality of a command.
- For example, see the "{" and ":t" commands in the example below. The
- extra string has a special meaning for the "quit" action: when less
- quits, first character of the extra string is used as its exit status.
-
-
-EXAMPLE
- The following input file describes the set of default command keys used
- by less:
-
- #command
- \r forw-line
- \n forw-line
- e forw-line
- j forw-line
- \kd forw-line
- ^E forw-line
- ^N forw-line
- k back-line
- y back-line
- ^Y back-line
- ^K back-line
- ^P back-line
- J forw-line-force
- K back-line-force
- Y back-line-force
- d forw-scroll
- ^D forw-scroll
- u back-scroll
- ^U back-scroll
- \40 forw-screen
- f forw-screen
- ^F forw-screen
- ^V forw-screen
- \kD forw-screen
- b back-screen
- ^B back-screen
- \ev back-screen
- \kU back-screen
- z forw-window
- w back-window
- \e\40 forw-screen-force
- F forw-forever
- R repaint-flush
- r repaint
- ^R repaint
- ^L repaint
- \eu undo-hilite
- g goto-line
- \kh goto-line
- < goto-line
- \e< goto-line
- p percent
- % percent
- \e[ left-scroll
- \e] right-scroll
- \e( left-scroll
- \e) right-scroll
- { forw-bracket {}
- } back-bracket {}
- ( forw-bracket ()
- ) back-bracket ()
- [ forw-bracket []
- ] back-bracket []
- \e^F forw-bracket
- \e^B back-bracket
- G goto-end
- \e> goto-end
- > goto-end
- \ke goto-end
- = status
- ^G status
- :f status
- / forw-search
- ? back-search
- \e/ forw-search *
- \e? back-search *
- n repeat-search
- \en repeat-search-all
- N reverse-search
- \eN reverse-search-all
- m set-mark
- ' goto-mark
- ^X^X goto-mark
- E examine
- :e examine
- ^X^V examine
- :n next-file
- :p prev-file
- t next-tag
- T prev-tag
- :x index-file
- :d remove-file
- - toggle-option
- :t toggle-option t
- s toggle-option o
- _ display-option
- | pipe
- v visual
- ! shell
- + firstcmd
- H help
- h help
- V version
- 0 digit
- 1 digit
- 2 digit
- 3 digit
- 4 digit
- 5 digit
- 6 digit
- 7 digit
- 8 digit
- 9 digit
- q quit
- Q quit
- :q quit
- :Q quit
- ZZ quit
-
-
-PRECEDENCE
- Commands specified by lesskey take precedence over the default com-
- mands. A default command key may be disabled by including it in the
- input file with the action "invalid". Alternatively, a key may be
- defined to do nothing by using the action "noaction". "noaction" is
- similar to "invalid", but less will give an error beep for an "invalid"
- command, but not for a "noaction" command. In addition, ALL default
- commands may be disabled by adding this control line to the input file:
-
- #stop
-
- This will cause all default commands to be ignored. The #stop line
- should be the last line in that section of the file.
-
- Be aware that #stop can be dangerous. Since all default commands are
- disabled, you must provide sufficient commands before the #stop line to
- enable all necessary actions. For example, failure to provide a "quit"
- command can lead to frustration.
-
-
-LINE EDITING SECTION
- The line-editing section begins with the line:
-
- #line-edit
-
- This section specifies new key bindings for the line editing commands,
- in a manner similar to the way key bindings for ordinary commands are
- specified in the #command section. The line-editing section consists
- of a list of keys and actions, one per line as in the example below.
-
-
-EXAMPLE
- The following input file describes the set of default line-editing keys
- used by less:
-
- #line-edit
- \t forw-complete
- \17 back-complete
- \e\t back-complete
- ^L expand
- ^V literal
- ^A literal
- \el right
- \kr right
- \eh left
- \kl left
- \eb word-left
- \e\kl word-left
- \ew word-right
- \e\kr word-right
- \ei insert
- \ex delete
- \kx delete
- \eX word-delete
- \ekx word-delete
- \e\b word-backspace
- \e0 home
- \kh home
- \e$ end
- \ke end
- \ek up
- \ku up
- \ej down
-
-
-
-LESS ENVIRONMENT VARIABLES
- The environment variable section begins with the line
-
- #env
-
- Following this line is a list of environment variable assignments.
- Each line consists of an environment variable name, an equals sign (=)
- and the value to be assigned to the environment variable. White space
- before and after the equals sign is ignored. Variables assigned in
- this way are visible only to less. If a variable is specified in the
- system environment and also in a lesskey file, the value in the lesskey
- file takes precedence. Although the lesskey file can be used to over-
- ride variables set in the environment, the main purpose of assigning
- variables in the lesskey file is simply to have all less configuration
- information stored in one file.
-
-
-EXAMPLE
- The following input file sets the -i option whenever less is run, and
- specifies the character set to be "latin1":
-
- #env
- LESS = -i
- LESSCHARSET = latin1
-
-
-
-SEE ALSO
- less(1)
-
-
-WARNINGS
- It is not possible to specify special keys, such as uparrow, in a key-
- board-independent manner. The only way to specify such keys is to
- specify the escape sequence which a particular keyboard sends when such
- a key is pressed.
-
- On MS-DOS and OS/2 systems, certain keys send a sequence of characters
- which start with a NUL character (0). This NUL character should be
- represented as \340 in a lesskey file.
-
-
-COPYRIGHT
- Copyright (C) 2000-2007 Mark Nudelman
-
- lesskey is part of the GNU project and is free software; you can redis-
- tribute it and/or modify it under the terms of the GNU General Public
- License as published by the Free Software Foundation; either version 2,
- or (at your option) any later version.
-
- lesskey 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 lesskey; see the file COPYING. If not, write to the Free Software
- Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
-
-
-AUTHOR
- Mark Nudelman <markn@greenwoodsoftware.com>
- Send bug reports or comments to the above address or to bug-
- less@gnu.org.
-
-
-
-
- Version 416: 22 Nov 2007 LESSKEY(1)
diff --git a/contrib/less/lesskey.nro b/contrib/less/lesskey.nro
deleted file mode 100644
index 4703321..0000000
--- a/contrib/less/lesskey.nro
+++ /dev/null
@@ -1,384 +0,0 @@
-.TH LESSKEY 1 "Version 416: 22 Nov 2007"
-.SH NAME
-lesskey \- specify key bindings for less
-.SH SYNOPSIS
-.B "lesskey [-o output] [--] [input]"
-.br
-.B "lesskey [--output=output] [--] [input]"
-.br
-.B "lesskey -V"
-.br
-.B "lesskey --version"
-.SH DESCRIPTION
-.I Lesskey
-is used to specify a set of key bindings to be used by
-.I less.
-The input file is a text file which describes the key bindings,
-If the input file is "-", standard input is read.
-If no input file is specified, a standard filename is used
-as the name of the input file, which depends on the system being used:
-On Unix systems, $HOME/.lesskey is used;
-on MS-DOS systems, $HOME/_lesskey is used;
-and on OS/2 systems $HOME/lesskey.ini is used,
-or $INIT/lesskey.ini if $HOME is undefined.
-The output file is a binary file which is used by
-.I less.
-If no output file is specified,
-and the environment variable LESSKEY is set,
-the value of LESSKEY is used as the name of the output file.
-Otherwise, a standard filename is used as the name of the output file,
-which depends on the system being used:
-On Unix and OS-9 systems, $HOME/.less is used;
-on MS-DOS systems, $HOME/_less is used;
-and on OS/2 systems, $HOME/less.ini is used,
-or $INIT/less.ini if $HOME is undefined.
-If the output file already exists,
-.I lesskey
-will overwrite it.
-.PP
-The -V or --version option causes
-.I lesskey
-to print its version number and immediately exit.
-If -V or --version is present, other options and arguments are ignored.
-.PP
-The input file consists of one or more
-.I sections.
-Each section starts with a line that identifies the type of section.
-Possible sections are:
-.IP #command
-Defines new command keys.
-.IP #line-edit
-Defines new line-editing keys.
-.IP #env
-Defines environment variables.
-.PP
-Blank lines and lines which start with a pound sign (#) are ignored,
-except for the special section header lines.
-
-.SH "COMMAND SECTION"
-The command section begins with the line
-.sp
-#command
-.sp
-If the command section is the first section in the file,
-this line may be omitted.
-The command section consists of lines of the form:
-.sp
- \fIstring\fP <whitespace> \fIaction\fP [extra-string] <newline>
-.sp
-Whitespace is any sequence of one or more spaces and/or tabs.
-The \fIstring\fP is the command key(s) which invoke the action.
-The \fIstring\fP may be a single command key, or a sequence of up to 15 keys.
-The \fIaction\fP is the name of the less action, from the list below.
-The characters in the \fIstring\fP may appear literally, or be
-prefixed by a caret to indicate a control key.
-A backslash followed by one to three octal digits may be used to
-specify a character by its octal value.
-A backslash followed by certain characters specifies input
-characters as follows:
-.IP \eb
-BACKSPACE
-.IP \ee
-ESCAPE
-.IP \en
-NEWLINE
-.IP \er
-RETURN
-.IP \et
-TAB
-.IP \eku
-UP ARROW
-.IP \ekd
-DOWN ARROW
-.IP \ekr
-RIGHT ARROW
-.IP \ekl
-LEFT ARROW
-.IP \ekU
-PAGE UP
-.IP \ekD
-PAGE DOWN
-.IP \ekh
-HOME
-.IP \eke
-END
-.IP \ekx
-DELETE
-.PP
-A backslash followed by any other character indicates that character is
-to be taken literally.
-Characters which must be preceded by backslash include
-caret, space, tab and the backslash itself.
-.PP
-An action may be followed by an "extra" string.
-When such a command is entered while running
-.I less,
-the action is performed, and then the extra
-string is parsed, just as if it were typed in to
-.I less.
-This feature can be used in certain cases to extend
-the functionality of a command.
-For example, see the "{" and ":t" commands in the example below.
-The extra string has a special meaning for the "quit" action:
-when
-.I less
-quits, first character of the extra string is used as its exit status.
-
-.SH EXAMPLE
-The following input file describes the set of
-default command keys used by less:
-.sp
-.nf
- #command
- \er forw-line
- \en forw-line
- e forw-line
- j forw-line
- \ekd forw-line
- ^E forw-line
- ^N forw-line
- k back-line
- y back-line
- ^Y back-line
- ^K back-line
- ^P back-line
- J forw-line-force
- K back-line-force
- Y back-line-force
- d forw-scroll
- ^D forw-scroll
- u back-scroll
- ^U back-scroll
- \e40 forw-screen
- f forw-screen
- ^F forw-screen
- ^V forw-screen
- \ekD forw-screen
- b back-screen
- ^B back-screen
- \eev back-screen
- \ekU back-screen
- z forw-window
- w back-window
- \ee\e40 forw-screen-force
- F forw-forever
- R repaint-flush
- r repaint
- ^R repaint
- ^L repaint
- \eeu undo-hilite
- g goto-line
- \ekh goto-line
- < goto-line
- \ee< goto-line
- p percent
- % percent
- \ee[ left-scroll
- \ee] right-scroll
- \ee( left-scroll
- \ee) right-scroll
- { forw-bracket {}
- } back-bracket {}
- ( forw-bracket ()
- ) back-bracket ()
- [ forw-bracket []
- ] back-bracket []
- \ee^F forw-bracket
- \ee^B back-bracket
- G goto-end
- \ee> goto-end
- > goto-end
- \eke goto-end
- = status
- ^G status
- :f status
- / forw-search
- ? back-search
- \ee/ forw-search *
- \ee? back-search *
- n repeat-search
- \een repeat-search-all
- N reverse-search
- \eeN reverse-search-all
- m set-mark
- ' goto-mark
- ^X^X goto-mark
- E examine
- :e examine
- ^X^V examine
- :n next-file
- :p prev-file
- t next-tag
- T prev-tag
- :x index-file
- :d remove-file
- - toggle-option
- :t toggle-option t
- s toggle-option o
- _ display-option
- | pipe
- v visual
- ! shell
- + firstcmd
- H help
- h help
- V version
- 0 digit
- 1 digit
- 2 digit
- 3 digit
- 4 digit
- 5 digit
- 6 digit
- 7 digit
- 8 digit
- 9 digit
- q quit
- Q quit
- :q quit
- :Q quit
- ZZ quit
-.fi
-.sp
-.SH PRECEDENCE
-Commands specified by
-.I lesskey
-take precedence over the default commands.
-A default command key may be disabled by including it in the
-input file with the action "invalid".
-Alternatively, a key may be defined
-to do nothing by using the action "noaction".
-"noaction" is similar to "invalid", but
-.I less
-will give an error beep for an "invalid" command,
-but not for a "noaction" command.
-In addition, ALL default commands may be disabled by
-adding this control line to the input file:
-.sp
-#stop
-.sp
-This will cause all default commands to be ignored.
-The #stop line should be the last line in that section of the file.
-.PP
-Be aware that #stop can be dangerous.
-Since all default commands are disabled,
-you must provide sufficient commands before the #stop line
-to enable all necessary actions.
-For example, failure to provide a "quit" command can lead to frustration.
-
-.SH "LINE EDITING SECTION"
-The line-editing section begins with the line:
-.sp
-#line-edit
-.sp
-This section specifies new key bindings for the line editing commands,
-in a manner similar to the way key bindings for
-ordinary commands are specified in the #command section.
-The line-editing section consists of a list of keys and actions,
-one per line as in the example below.
-
-.SH EXAMPLE
-The following input file describes the set of
-default line-editing keys used by less:
-.sp
-.nf
- #line-edit
- \et forw-complete
- \e17 back-complete
- \ee\et back-complete
- ^L expand
- ^V literal
- ^A literal
- \eel right
- \ekr right
- \eeh left
- \ekl left
- \eeb word-left
- \ee\ekl word-left
- \eew word-right
- \ee\ekr word-right
- \eei insert
- \eex delete
- \ekx delete
- \eeX word-delete
- \eekx word-delete
- \ee\eb word-backspace
- \ee0 home
- \ekh home
- \ee$ end
- \eke end
- \eek up
- \eku up
- \eej down
-.fi
-.sp
-
-.SH "LESS ENVIRONMENT VARIABLES"
-The environment variable section begins with the line
-.sp
-#env
-.sp
-Following this line is a list of environment variable assignments.
-Each line consists of an environment variable name, an equals sign (=)
-and the value to be assigned to the environment variable.
-White space before and after the equals sign is ignored.
-Variables assigned in this way are visible only to
-.I less.
-If a variable is specified in the system environment and also in a
-lesskey file, the value in the lesskey file takes precedence.
-Although the lesskey file can be used to override variables set in the
-environment, the main purpose of assigning variables in the lesskey file
-is simply to have all
-.I less
-configuration information stored in one file.
-
-.SH EXAMPLE
-The following input file sets the -i option whenever
-.I less
-is run, and specifies the character set to be "latin1":
-.sp
-.nf
- #env
- LESS = -i
- LESSCHARSET = latin1
-.fi
-.sp
-
-.SH "SEE ALSO"
-less(1)
-
-.SH WARNINGS
-It is not possible to specify special keys, such as uparrow,
-in a keyboard-independent manner.
-The only way to specify such keys is to specify the escape sequence
-which a particular keyboard sends when such a key is pressed.
-.PP
-On MS-DOS and OS/2 systems, certain keys send a sequence of characters
-which start with a NUL character (0).
-This NUL character should be represented as \e340 in a lesskey file.
-
-.SH COPYRIGHT
-Copyright (C) 2000-2007 Mark Nudelman
-.PP
-lesskey is part of the GNU project and 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, or (at your option) any later version.
-.PP
-lesskey 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.
-.PP
-You should have received a copy of the GNU General Public License
-along with lesskey; see the file COPYING.
-If not, write to the Free Software Foundation, 59 Temple Place,
-Suite 330, Boston, MA 02111-1307, USA.
-
-.SH AUTHOR
-.PP
-Mark Nudelman <markn@greenwoodsoftware.com>
-.br
-Send bug reports or comments to the above address or to bug-less@gnu.org.
-
diff --git a/contrib/less/lglob.h b/contrib/less/lglob.h
deleted file mode 100644
index 8dc677f..0000000
--- a/contrib/less/lglob.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Macros to define the method of doing filename "globbing".
- * There are three possible mechanisms:
- * 1. GLOB_LIST
- * This defines a function that returns a list of matching filenames.
- * 2. GLOB_NAME
- * This defines a function that steps thru the list of matching
- * filenames, returning one name each time it is called.
- * 3. GLOB_STRING
- * This defines a function that returns the complete list of
- * matching filenames as a single space-separated string.
- */
-
-#if OS2
-
-#define DECL_GLOB_LIST(list) char **list; char **pp;
-#define GLOB_LIST(filename,list) list = _fnexplode(filename)
-#define GLOB_LIST_FAILED(list) list == NULL
-#define SCAN_GLOB_LIST(list,p) pp = list; *pp != NULL; pp++
-#define INIT_GLOB_LIST(list,p) p = *pp
-#define GLOB_LIST_DONE(list) _fnexplodefree(list)
-
-#else
-#if MSDOS_COMPILER==DJGPPC
-
-#define DECL_GLOB_LIST(list) glob_t list; int i;
-#define GLOB_LIST(filename,list) glob(filename,GLOB_NOCHECK,0,&list)
-#define GLOB_LIST_FAILED(list) 0
-#define SCAN_GLOB_LIST(list,p) i = 0; i < list.gl_pathc; i++
-#define INIT_GLOB_LIST(list,p) p = list.gl_pathv[i]
-#define GLOB_LIST_DONE(list) globfree(&list)
-
-#else
-#if MSDOS_COMPILER==MSOFTC || MSDOS_COMPILER==BORLANDC
-
-#define GLOB_FIRST_NAME(filename,fndp,h) h = _dos_findfirst(filename, ~_A_VOLID, fndp)
-#define GLOB_FIRST_FAILED(handle) ((handle) != 0)
-#define GLOB_NEXT_NAME(handle,fndp) _dos_findnext(fndp)
-#define GLOB_NAME_DONE(handle)
-#define GLOB_NAME name
-#define DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle) \
- struct find_t fnd; \
- char drive[_MAX_DRIVE]; \
- char dir[_MAX_DIR]; \
- char fname[_MAX_FNAME]; \
- char ext[_MAX_EXT]; \
- int handle;
-#else
-#if MSDOS_COMPILER==WIN32C && defined(_MSC_VER)
-
-#define GLOB_FIRST_NAME(filename,fndp,h) h = _findfirst(filename, fndp)
-#define GLOB_FIRST_FAILED(handle) ((handle) == -1)
-#define GLOB_NEXT_NAME(handle,fndp) _findnext(handle, fndp)
-#define GLOB_NAME_DONE(handle) _findclose(handle)
-#define GLOB_NAME name
-#define DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle) \
- struct _finddata_t fnd; \
- char drive[_MAX_DRIVE]; \
- char dir[_MAX_DIR]; \
- char fname[_MAX_FNAME]; \
- char ext[_MAX_EXT]; \
- long handle;
-
-#else
-#if MSDOS_COMPILER==WIN32C && !defined(_MSC_VER) /* Borland C for Windows */
-
-#define GLOB_FIRST_NAME(filename,fndp,h) h = findfirst(filename, fndp, ~FA_LABEL)
-#define GLOB_FIRST_FAILED(handle) ((handle) != 0)
-#define GLOB_NEXT_NAME(handle,fndp) findnext(fndp)
-#define GLOB_NAME_DONE(handle)
-#define GLOB_NAME ff_name
-#define DECL_GLOB_NAME(fnd,drive,dir,fname,ext,handle) \
- struct ffblk fnd; \
- char drive[MAXDRIVE]; \
- char dir[MAXDIR]; \
- char fname[MAXFILE]; \
- char ext[MAXEXT]; \
- int handle;
-
-#endif
-#endif
-#endif
-#endif
-#endif
diff --git a/contrib/less/line.c b/contrib/less/line.c
deleted file mode 100644
index 08ca3be..0000000
--- a/contrib/less/line.c
+++ /dev/null
@@ -1,1245 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines to manipulate the "line buffer".
- * The line buffer holds a line of output as it is being built
- * in preparation for output to the screen.
- */
-
-#include "less.h"
-#include "charset.h"
-
-static char *linebuf = NULL; /* Buffer which holds the current output line */
-static char *attr = NULL; /* Extension of linebuf to hold attributes */
-public int size_linebuf = 0; /* Size of line buffer (and attr buffer) */
-
-static int cshift; /* Current left-shift of output line buffer */
-public int hshift; /* Desired left-shift of output line buffer */
-public int tabstops[TABSTOP_MAX] = { 0 }; /* Custom tabstops */
-public int ntabstops = 1; /* Number of tabstops */
-public int tabdefault = 8; /* Default repeated tabstops */
-
-static int curr; /* Index into linebuf */
-static int column; /* Printable length, accounting for
- backspaces, etc. */
-static int overstrike; /* Next char should overstrike previous char */
-static int last_overstrike = AT_NORMAL;
-static int is_null_line; /* There is no current line */
-static int lmargin; /* Left margin */
-static int line_matches; /* Number of search matches in this line */
-static char pendc;
-static POSITION pendpos;
-static char *end_ansi_chars;
-static char *mid_ansi_chars;
-
-static int attr_swidth();
-static int attr_ewidth();
-static int do_append();
-
-extern int sigs;
-extern int bs_mode;
-extern int linenums;
-extern int ctldisp;
-extern int twiddle;
-extern int binattr;
-extern int status_col;
-extern int auto_wrap, ignaw;
-extern int bo_s_width, bo_e_width;
-extern int ul_s_width, ul_e_width;
-extern int bl_s_width, bl_e_width;
-extern int so_s_width, so_e_width;
-extern int sc_width, sc_height;
-extern int utf_mode;
-extern int oldbot;
-extern POSITION start_attnpos;
-extern POSITION end_attnpos;
-
-static char mbc_buf[MAX_UTF_CHAR_LEN];
-static int mbc_buf_len = 0;
-static int mbc_buf_index = 0;
-static POSITION mbc_pos;
-
-/*
- * Initialize from environment variables.
- */
- public void
-init_line()
-{
- end_ansi_chars = lgetenv("LESSANSIENDCHARS");
- if (end_ansi_chars == NULL || *end_ansi_chars == '\0')
- end_ansi_chars = "m";
-
- mid_ansi_chars = lgetenv("LESSANSIMIDCHARS");
- if (mid_ansi_chars == NULL || *mid_ansi_chars == '\0')
- mid_ansi_chars = "0123456789;[?!\"'#%()*+ ";
-
- linebuf = (char *) ecalloc(LINEBUF_SIZE, sizeof(char));
- attr = (char *) ecalloc(LINEBUF_SIZE, sizeof(char));
- size_linebuf = LINEBUF_SIZE;
-}
-
-/*
- * Expand the line buffer.
- */
- static int
-expand_linebuf()
-{
- /* Double the size of the line buffer. */
- int new_size = size_linebuf * 2;
-
- /* Just realloc to expand the buffer, if we can. */
-#if HAVE_REALLOC
- char *new_buf = (char *) realloc(linebuf, new_size);
- char *new_attr = (char *) realloc(attr, new_size);
-#else
- char *new_buf = (char *) calloc(new_size, sizeof(char));
- char *new_attr = (char *) calloc(new_size, sizeof(char));
-#endif
- if (new_buf == NULL || new_attr == NULL)
- {
- if (new_attr != NULL)
- free(new_attr);
- if (new_buf != NULL)
- free(new_buf);
- return 1;
- }
-#if HAVE_REALLOC
- /*
- * We realloc'd the buffers; they already have the old contents.
- */
- #if 0
- memset(new_buf + size_linebuf, 0, new_size - size_linebuf);
- memset(new_attr + size_linebuf, 0, new_size - size_linebuf);
- #endif
-#else
- /*
- * We just calloc'd the buffers; copy the old contents.
- */
- memcpy(new_buf, linebuf, size_linebuf * sizeof(char));
- memcpy(new_attr, attr, size_linebuf * sizeof(char));
- free(attr);
- free(linebuf);
-#endif
- linebuf = new_buf;
- attr = new_attr;
- size_linebuf = new_size;
- return 0;
-}
-
-/*
- * Is a character ASCII?
- */
- public int
-is_ascii_char(ch)
- LWCHAR ch;
-{
- return (ch <= 0x7F);
-}
-
-/*
- * Rewind the line buffer.
- */
- public void
-prewind()
-{
- curr = 0;
- column = 0;
- cshift = 0;
- overstrike = 0;
- last_overstrike = AT_NORMAL;
- mbc_buf_len = 0;
- is_null_line = 0;
- pendc = '\0';
- lmargin = 0;
- if (status_col)
- lmargin += 1;
-#if HILITE_SEARCH
- line_matches = 0;
-#endif
-}
-
-/*
- * Insert the line number (of the given position) into the line buffer.
- */
- public void
-plinenum(pos)
- POSITION pos;
-{
- register LINENUM linenum = 0;
- register int i;
-
- if (linenums == OPT_ONPLUS)
- {
- /*
- * Get the line number and put it in the current line.
- * {{ Note: since find_linenum calls forw_raw_line,
- * it may seek in the input file, requiring the caller
- * of plinenum to re-seek if necessary. }}
- * {{ Since forw_raw_line modifies linebuf, we must
- * do this first, before storing anything in linebuf. }}
- */
- linenum = find_linenum(pos);
- }
-
- /*
- * Display a status column if the -J option is set.
- */
- if (status_col)
- {
- linebuf[curr] = ' ';
- if (start_attnpos != NULL_POSITION &&
- pos >= start_attnpos && pos < end_attnpos)
- attr[curr] = AT_NORMAL|AT_HILITE;
- else
- attr[curr] = AT_NORMAL;
- curr++;
- column++;
- }
- /*
- * Display the line number at the start of each line
- * if the -N option is set.
- */
- if (linenums == OPT_ONPLUS)
- {
- char buf[INT_STRLEN_BOUND(pos) + 2];
- int n;
-
- linenumtoa(linenum, buf);
- n = strlen(buf);
- if (n < MIN_LINENUM_WIDTH)
- n = MIN_LINENUM_WIDTH;
- sprintf(linebuf+curr, "%*s ", n, buf);
- n++; /* One space after the line number. */
- for (i = 0; i < n; i++)
- attr[curr+i] = AT_NORMAL;
- curr += n;
- column += n;
- lmargin += n;
- }
-
- /*
- * Append enough spaces to bring us to the lmargin.
- */
- while (column < lmargin)
- {
- linebuf[curr] = ' ';
- attr[curr++] = AT_NORMAL;
- column++;
- }
-}
-
-/*
- * Shift the input line left.
- * This means discarding N printable chars at the start of the buffer.
- */
- static void
-pshift(shift)
- int shift;
-{
- LWCHAR prev_ch = 0;
- unsigned char c;
- int shifted = 0;
- int to;
- int from;
- int len;
- int width;
- int prev_attr;
- int next_attr;
-
- if (shift > column - lmargin)
- shift = column - lmargin;
- if (shift > curr - lmargin)
- shift = curr - lmargin;
-
- to = from = lmargin;
- /*
- * We keep on going when shifted == shift
- * to get all combining chars.
- */
- while (shifted <= shift && from < curr)
- {
- c = linebuf[from];
- if (ctldisp == OPT_ONPLUS && IS_CSI_START(c))
- {
- /* Keep cumulative effect. */
- linebuf[to] = c;
- attr[to++] = attr[from++];
- while (from < curr && linebuf[from])
- {
- linebuf[to] = linebuf[from];
- attr[to++] = attr[from];
- if (!is_ansi_middle(linebuf[from++]))
- break;
- }
- continue;
- }
-
- width = 0;
-
- if (!IS_ASCII_OCTET(c) && utf_mode)
- {
- /* Assumes well-formedness validation already done. */
- LWCHAR ch;
-
- len = utf_len(c);
- if (from + len > curr)
- break;
- ch = get_wchar(linebuf + from);
- if (!is_composing_char(ch) && !is_combining_char(prev_ch, ch))
- width = is_wide_char(ch) ? 2 : 1;
- prev_ch = ch;
- } else
- {
- len = 1;
- if (c == '\b')
- /* XXX - Incorrect if several '\b' in a row. */
- width = (utf_mode && is_wide_char(prev_ch)) ? -2 : -1;
- else if (!control_char(c))
- width = 1;
- prev_ch = 0;
- }
-
- if (width == 2 && shift - shifted == 1) {
- /* Should never happen when called by pshift_all(). */
- attr[to] = attr[from];
- /*
- * Assume a wide_char will never be the first half of a
- * combining_char pair, so reset prev_ch in case we're
- * followed by a '\b'.
- */
- prev_ch = linebuf[to++] = ' ';
- from += len;
- shifted++;
- continue;
- }
-
- /* Adjust width for magic cookies. */
- prev_attr = (to > 0) ? attr[to-1] : AT_NORMAL;
- next_attr = (from + len < curr) ? attr[from + len] : prev_attr;
- if (!is_at_equiv(attr[from], prev_attr) &&
- !is_at_equiv(attr[from], next_attr))
- {
- width += attr_swidth(attr[from]);
- if (from + len < curr)
- width += attr_ewidth(attr[from]);
- if (is_at_equiv(prev_attr, next_attr))
- {
- width += attr_ewidth(prev_attr);
- if (from + len < curr)
- width += attr_swidth(next_attr);
- }
- }
-
- if (shift - shifted < width)
- break;
- from += len;
- shifted += width;
- if (shifted < 0)
- shifted = 0;
- }
- while (from < curr)
- {
- linebuf[to] = linebuf[from];
- attr[to++] = attr[from++];
- }
- curr = to;
- column -= shifted;
- cshift += shifted;
-}
-
-/*
- *
- */
- public void
-pshift_all()
-{
- pshift(column);
-}
-
-/*
- * Return the printing width of the start (enter) sequence
- * for a given character attribute.
- */
- static int
-attr_swidth(a)
- int a;
-{
- int w = 0;
-
- a = apply_at_specials(a);
-
- if (a & AT_UNDERLINE)
- w += ul_s_width;
- if (a & AT_BOLD)
- w += bo_s_width;
- if (a & AT_BLINK)
- w += bl_s_width;
- if (a & AT_STANDOUT)
- w += so_s_width;
-
- return w;
-}
-
-/*
- * Return the printing width of the end (exit) sequence
- * for a given character attribute.
- */
- static int
-attr_ewidth(a)
- int a;
-{
- int w = 0;
-
- a = apply_at_specials(a);
-
- if (a & AT_UNDERLINE)
- w += ul_e_width;
- if (a & AT_BOLD)
- w += bo_e_width;
- if (a & AT_BLINK)
- w += bl_e_width;
- if (a & AT_STANDOUT)
- w += so_e_width;
-
- return w;
-}
-
-/*
- * Return the printing width of a given character and attribute,
- * if the character were added to the current position in the line buffer.
- * Adding a character with a given attribute may cause an enter or exit
- * attribute sequence to be inserted, so this must be taken into account.
- */
- static int
-pwidth(ch, a, prev_ch)
- LWCHAR ch;
- int a;
- LWCHAR prev_ch;
-{
- int w;
-
- if (ch == '\b')
- /*
- * Backspace moves backwards one or two positions.
- * XXX - Incorrect if several '\b' in a row.
- */
- return (utf_mode && is_wide_char(prev_ch)) ? -2 : -1;
-
- if (!utf_mode || is_ascii_char(ch))
- {
- if (control_char((char)ch))
- {
- /*
- * Control characters do unpredictable things,
- * so we don't even try to guess; say it doesn't move.
- * This can only happen if the -r flag is in effect.
- */
- return (0);
- }
- } else
- {
- if (is_composing_char(ch) || is_combining_char(prev_ch, ch))
- {
- /*
- * Composing and combining chars take up no space.
- *
- * Some terminals, upon failure to compose a
- * composing character with the character(s) that
- * precede(s) it will actually take up one column
- * for the composing character; there isn't much
- * we could do short of testing the (complex)
- * composition process ourselves and printing
- * a binary representation when it fails.
- */
- return (0);
- }
- }
-
- /*
- * Other characters take one or two columns,
- * plus the width of any attribute enter/exit sequence.
- */
- w = 1;
- if (is_wide_char(ch))
- w++;
- if (curr > 0 && !is_at_equiv(attr[curr-1], a))
- w += attr_ewidth(attr[curr-1]);
- if ((apply_at_specials(a) != AT_NORMAL) &&
- (curr == 0 || !is_at_equiv(attr[curr-1], a)))
- w += attr_swidth(a);
- return (w);
-}
-
-/*
- * Delete to the previous base character in the line buffer.
- * Return 1 if one is found.
- */
- static int
-backc()
-{
- LWCHAR prev_ch;
- char *p = linebuf + curr;
- LWCHAR ch = step_char(&p, -1, linebuf + lmargin);
- int width;
-
- /* This assumes that there is no '\b' in linebuf. */
- while ( curr > lmargin
- && column > lmargin
- && (!(attr[curr - 1] & (AT_ANSI|AT_BINARY))))
- {
- curr = p - linebuf;
- prev_ch = step_char(&p, -1, linebuf + lmargin);
- width = pwidth(ch, attr[curr], prev_ch);
- column -= width;
- if (width > 0)
- return 1;
- ch = prev_ch;
- }
-
- return 0;
-}
-
-/*
- * Are we currently within a recognized ANSI escape sequence?
- */
- static int
-in_ansi_esc_seq()
-{
- char *p;
-
- /*
- * Search backwards for either an ESC (which means we ARE in a seq);
- * or an end char (which means we're NOT in a seq).
- */
- for (p = &linebuf[curr]; p > linebuf; )
- {
- LWCHAR ch = step_char(&p, -1, linebuf);
- if (IS_CSI_START(ch))
- return (1);
- if (!is_ansi_middle(ch))
- return (0);
- }
- return (0);
-}
-
-/*
- * Is a character the end of an ANSI escape sequence?
- */
- public int
-is_ansi_end(ch)
- LWCHAR ch;
-{
- if (!is_ascii_char(ch))
- return (0);
- return (strchr(end_ansi_chars, (char) ch) != NULL);
-}
-
-/*
- *
- */
- public int
-is_ansi_middle(ch)
- LWCHAR ch;
-{
- if (!is_ascii_char(ch))
- return (0);
- if (is_ansi_end(ch))
- return (0);
- return (strchr(mid_ansi_chars, (char) ch) != NULL);
-}
-
-/*
- * Append a character and attribute to the line buffer.
- */
-#define STORE_CHAR(ch,a,rep,pos) \
- do { \
- if (store_char((ch),(a),(rep),(pos))) return (1); \
- } while (0)
-
- static int
-store_char(ch, a, rep, pos)
- LWCHAR ch;
- int a;
- char *rep;
- POSITION pos;
-{
- int w;
- int replen;
- char cs;
-
- w = (a & (AT_UNDERLINE|AT_BOLD)); /* Pre-use w. */
- if (w != AT_NORMAL)
- last_overstrike = w;
-
-#if HILITE_SEARCH
- {
- int matches;
- if (is_hilited(pos, pos+1, 0, &matches))
- {
- /*
- * This character should be highlighted.
- * Override the attribute passed in.
- */
- if (a != AT_ANSI)
- a |= AT_HILITE;
- }
- line_matches += matches;
- }
-#endif
-
- if (ctldisp == OPT_ONPLUS && in_ansi_esc_seq())
- {
- if (!is_ansi_end(ch) && !is_ansi_middle(ch)) {
- /* Remove whole unrecognized sequence. */
- do {
- --curr;
- } while (!IS_CSI_START(linebuf[curr]));
- return 0;
- }
- a = AT_ANSI; /* Will force re-AT_'ing around it. */
- w = 0;
- }
- else if (ctldisp == OPT_ONPLUS && IS_CSI_START(ch))
- {
- a = AT_ANSI; /* Will force re-AT_'ing around it. */
- w = 0;
- }
- else
- {
- char *p = &linebuf[curr];
- LWCHAR prev_ch = step_char(&p, -1, linebuf);
- w = pwidth(ch, a, prev_ch);
- }
-
- if (ctldisp != OPT_ON && column + w + attr_ewidth(a) > sc_width)
- /*
- * Won't fit on screen.
- */
- return (1);
-
- if (rep == NULL)
- {
- cs = (char) ch;
- rep = &cs;
- replen = 1;
- } else
- {
- replen = utf_len(rep[0]);
- }
- if (curr + replen >= size_linebuf-6)
- {
- /*
- * Won't fit in line buffer.
- * Try to expand it.
- */
- if (expand_linebuf())
- return (1);
- }
-
- while (replen-- > 0)
- {
- linebuf[curr] = *rep++;
- attr[curr] = a;
- curr++;
- }
- column += w;
- return (0);
-}
-
-/*
- * Append a tab to the line buffer.
- * Store spaces to represent the tab.
- */
-#define STORE_TAB(a,pos) \
- do { if (store_tab((a),(pos))) return (1); } while (0)
-
- static int
-store_tab(attr, pos)
- int attr;
- POSITION pos;
-{
- int to_tab = column + cshift - lmargin;
- int i;
-
- if (ntabstops < 2 || to_tab >= tabstops[ntabstops-1])
- to_tab = tabdefault -
- ((to_tab - tabstops[ntabstops-1]) % tabdefault);
- else
- {
- for (i = ntabstops - 2; i >= 0; i--)
- if (to_tab >= tabstops[i])
- break;
- to_tab = tabstops[i+1] - to_tab;
- }
-
- if (column + to_tab - 1 + pwidth(' ', attr, 0) + attr_ewidth(attr) > sc_width)
- return 1;
-
- do {
- STORE_CHAR(' ', attr, " ", pos);
- } while (--to_tab > 0);
- return 0;
-}
-
-#define STORE_PRCHAR(c, pos) \
- do { if (store_prchar((c), (pos))) return 1; } while (0)
-
- static int
-store_prchar(c, pos)
- char c;
- POSITION pos;
-{
- char *s;
-
- /*
- * Convert to printable representation.
- */
- s = prchar(c);
-
- /*
- * Make sure we can get the entire representation
- * of the character on this line.
- */
- if (column + (int) strlen(s) - 1 +
- pwidth(' ', binattr, 0) + attr_ewidth(binattr) > sc_width)
- return 1;
-
- for ( ; *s != 0; s++)
- STORE_CHAR(*s, AT_BINARY, NULL, pos);
-
- return 0;
-}
-
- static int
-flush_mbc_buf(pos)
- POSITION pos;
-{
- int i;
-
- for (i = 0; i < mbc_buf_index; i++)
- if (store_prchar(mbc_buf[i], pos))
- return mbc_buf_index - i;
-
- return 0;
-}
-
-/*
- * Append a character to the line buffer.
- * Expand tabs into spaces, handle underlining, boldfacing, etc.
- * Returns 0 if ok, 1 if couldn't fit in buffer.
- */
- public int
-pappend(c, pos)
- char c;
- POSITION pos;
-{
- int r;
-
- if (pendc)
- {
- if (do_append(pendc, NULL, pendpos))
- /*
- * Oops. We've probably lost the char which
- * was in pendc, since caller won't back up.
- */
- return (1);
- pendc = '\0';
- }
-
- if (c == '\r' && bs_mode == BS_SPECIAL)
- {
- if (mbc_buf_len > 0) /* utf_mode must be on. */
- {
- /* Flush incomplete (truncated) sequence. */
- r = flush_mbc_buf(mbc_pos);
- mbc_buf_index = r + 1;
- mbc_buf_len = 0;
- if (r)
- return (mbc_buf_index);
- }
-
- /*
- * Don't put the CR into the buffer until we see
- * the next char. If the next char is a newline,
- * discard the CR.
- */
- pendc = c;
- pendpos = pos;
- return (0);
- }
-
- if (!utf_mode)
- {
- r = do_append((LWCHAR) c, NULL, pos);
- } else
- {
- /* Perform strict validation in all possible cases. */
- if (mbc_buf_len == 0)
- {
- retry:
- mbc_buf_index = 1;
- *mbc_buf = c;
- if (IS_ASCII_OCTET(c))
- r = do_append((LWCHAR) c, NULL, pos);
- else if (IS_UTF8_LEAD(c))
- {
- mbc_buf_len = utf_len(c);
- mbc_pos = pos;
- return (0);
- } else
- /* UTF8_INVALID or stray UTF8_TRAIL */
- r = flush_mbc_buf(pos);
- } else if (IS_UTF8_TRAIL(c))
- {
- mbc_buf[mbc_buf_index++] = c;
- if (mbc_buf_index < mbc_buf_len)
- return (0);
- if (is_utf8_well_formed(mbc_buf))
- r = do_append(get_wchar(mbc_buf), mbc_buf, mbc_pos);
- else
- /* Complete, but not shortest form, sequence. */
- mbc_buf_index = r = flush_mbc_buf(mbc_pos);
- mbc_buf_len = 0;
- } else
- {
- /* Flush incomplete (truncated) sequence. */
- r = flush_mbc_buf(mbc_pos);
- mbc_buf_index = r + 1;
- mbc_buf_len = 0;
- /* Handle new char. */
- if (!r)
- goto retry;
- }
- }
-
- /*
- * If we need to shift the line, do it.
- * But wait until we get to at least the middle of the screen,
- * so shifting it doesn't affect the chars we're currently
- * pappending. (Bold & underline can get messed up otherwise.)
- */
- if (cshift < hshift && column > sc_width / 2)
- {
- linebuf[curr] = '\0';
- pshift(hshift - cshift);
- }
- if (r)
- {
- /* How many chars should caller back up? */
- r = (!utf_mode) ? 1 : mbc_buf_index;
- }
- return (r);
-}
-
- static int
-do_append(ch, rep, pos)
- LWCHAR ch;
- char *rep;
- POSITION pos;
-{
- register int a;
- LWCHAR prev_ch;
-
- a = AT_NORMAL;
-
- if (ch == '\b')
- {
- if (bs_mode == BS_CONTROL)
- goto do_control_char;
-
- /*
- * A better test is needed here so we don't
- * backspace over part of the printed
- * representation of a binary character.
- */
- if ( curr <= lmargin
- || column <= lmargin
- || (attr[curr - 1] & (AT_ANSI|AT_BINARY)))
- STORE_PRCHAR('\b', pos);
- else if (bs_mode == BS_NORMAL)
- STORE_CHAR(ch, AT_NORMAL, NULL, pos);
- else if (bs_mode == BS_SPECIAL)
- overstrike = backc();
-
- return 0;
- }
-
- if (overstrike > 0)
- {
- /*
- * Overstrike the character at the current position
- * in the line buffer. This will cause either
- * underline (if a "_" is overstruck),
- * bold (if an identical character is overstruck),
- * or just deletion of the character in the buffer.
- */
- overstrike = utf_mode ? -1 : 0;
- /* To be correct, this must be a base character. */
- prev_ch = get_wchar(linebuf + curr);
- a = attr[curr];
- if (ch == prev_ch)
- {
- /*
- * Overstriking a char with itself means make it bold.
- * But overstriking an underscore with itself is
- * ambiguous. It could mean make it bold, or
- * it could mean make it underlined.
- * Use the previous overstrike to resolve it.
- */
- if (ch == '_')
- {
- if ((a & (AT_BOLD|AT_UNDERLINE)) != AT_NORMAL)
- a |= (AT_BOLD|AT_UNDERLINE);
- else if (last_overstrike != AT_NORMAL)
- a |= last_overstrike;
- else
- a |= AT_BOLD;
- } else
- a |= AT_BOLD;
- } else if (ch == '_')
- {
- a |= AT_UNDERLINE;
- ch = prev_ch;
- rep = linebuf + curr;
- } else if (prev_ch == '_')
- {
- a |= AT_UNDERLINE;
- }
- /* Else we replace prev_ch, but we keep its attributes. */
- } else if (overstrike < 0)
- {
- if ( is_composing_char(ch)
- || is_combining_char(get_wchar(linebuf + curr), ch))
- /* Continuation of the same overstrike. */
- a = last_overstrike;
- else
- overstrike = 0;
- }
-
- if (ch == '\t')
- {
- /*
- * Expand a tab into spaces.
- */
- switch (bs_mode)
- {
- case BS_CONTROL:
- goto do_control_char;
- case BS_NORMAL:
- case BS_SPECIAL:
- STORE_TAB(a, pos);
- break;
- }
- } else if ((!utf_mode || is_ascii_char(ch)) && control_char((char)ch))
- {
- do_control_char:
- if (ctldisp == OPT_ON || (ctldisp == OPT_ONPLUS && IS_CSI_START(ch)))
- {
- /*
- * Output as a normal character.
- */
- STORE_CHAR(ch, AT_NORMAL, rep, pos);
- } else
- {
- STORE_PRCHAR((char) ch, pos);
- }
- } else if (utf_mode && ctldisp != OPT_ON && is_ubin_char(ch))
- {
- char *s;
-
- s = prutfchar(ch);
-
- if (column + (int) strlen(s) - 1 +
- pwidth(' ', binattr, 0) + attr_ewidth(binattr) > sc_width)
- return (1);
-
- for ( ; *s != 0; s++)
- STORE_CHAR(*s, AT_BINARY, NULL, pos);
- } else
- {
- STORE_CHAR(ch, a, rep, pos);
- }
- return (0);
-}
-
-/*
- *
- */
- public int
-pflushmbc()
-{
- int r = 0;
-
- if (mbc_buf_len > 0)
- {
- /* Flush incomplete (truncated) sequence. */
- r = flush_mbc_buf(mbc_pos);
- mbc_buf_len = 0;
- }
- return r;
-}
-
-/*
- * Terminate the line in the line buffer.
- */
- public void
-pdone(endline)
- int endline;
-{
- int nl;
-
- (void) pflushmbc();
-
- if (pendc && (pendc != '\r' || !endline))
- /*
- * If we had a pending character, put it in the buffer.
- * But discard a pending CR if we are at end of line
- * (that is, discard the CR in a CR/LF sequence).
- */
- (void) do_append(pendc, NULL, pendpos);
-
- /*
- * Make sure we've shifted the line, if we need to.
- */
- if (cshift < hshift)
- pshift(hshift - cshift);
-
- if (ctldisp == OPT_ONPLUS && is_ansi_end('m'))
- {
- /* Switch to normal attribute at end of line. */
- char *p = "\033[m";
- for ( ; *p != '\0'; p++)
- {
- linebuf[curr] = *p;
- attr[curr++] = AT_ANSI;
- }
- }
-
- /*
- * Add a newline if necessary,
- * and append a '\0' to the end of the line.
- * We output a newline if we're not at the right edge of the screen,
- * or if the terminal doesn't auto wrap,
- * or if this is really the end of the line AND the terminal ignores
- * a newline at the right edge.
- * (In the last case we don't want to output a newline if the terminal
- * doesn't ignore it since that would produce an extra blank line.
- * But we do want to output a newline if the terminal ignores it in case
- * the next line is blank. In that case the single newline output for
- * that blank line would be ignored!)
- */
- if (!oldbot)
- nl = (column < sc_width || !auto_wrap || (endline && ignaw) || ctldisp == OPT_ON);
- else
- nl = (column < sc_width || !auto_wrap || ignaw || ctldisp == OPT_ON);
- if (nl)
- {
- linebuf[curr] = '\n';
- attr[curr] = AT_NORMAL;
- curr++;
- }
- else if (ignaw && !auto_wrap && column >= sc_width)
- {
- /*
- * Big horrible kludge.
- * No-wrap terminals are too hard to deal with when they get in
- * the state where a full screen width of characters have been
- * output but the cursor is sitting on the right edge instead
- * of at the start of the next line.
- * So after we output a full line, we output an extra
- * space and backspace to force the cursor to the
- * beginning of the next line, like a sane terminal.
- */
- linebuf[curr] = ' ';
- attr[curr++] = AT_NORMAL;
- linebuf[curr] = '\b';
- attr[curr++] = AT_NORMAL;
- }
- linebuf[curr] = '\0';
- attr[curr] = AT_NORMAL;
-
-#if HILITE_SEARCH
- if (status_col && line_matches > 0)
- {
- linebuf[0] = '*';
- attr[0] = AT_NORMAL|AT_HILITE;
- }
-#endif
-}
-
-/*
- * Get a character from the current line.
- * Return the character as the function return value,
- * and the character attribute in *ap.
- */
- public int
-gline(i, ap)
- register int i;
- register int *ap;
-{
- if (is_null_line)
- {
- /*
- * If there is no current line, we pretend the line is
- * either "~" or "", depending on the "twiddle" flag.
- */
- if (twiddle)
- {
- if (i == 0)
- {
- *ap = AT_BOLD;
- return '~';
- }
- --i;
- }
- /* Make sure we're back to AT_NORMAL before the '\n'. */
- *ap = AT_NORMAL;
- return i ? '\0' : '\n';
- }
-
- *ap = attr[i];
- return (linebuf[i] & 0xFF);
-}
-
-/*
- * Indicate that there is no current line.
- */
- public void
-null_line()
-{
- is_null_line = 1;
- cshift = 0;
-}
-
-/*
- * Analogous to forw_line(), but deals with "raw lines":
- * lines which are not split for screen width.
- * {{ This is supposed to be more efficient than forw_line(). }}
- */
- public POSITION
-forw_raw_line(curr_pos, linep, line_lenp)
- POSITION curr_pos;
- char **linep;
- int *line_lenp;
-{
- register int n;
- register int c;
- POSITION new_pos;
-
- if (curr_pos == NULL_POSITION || ch_seek(curr_pos) ||
- (c = ch_forw_get()) == EOI)
- return (NULL_POSITION);
-
- n = 0;
- for (;;)
- {
- if (c == '\n' || c == EOI || ABORT_SIGS())
- {
- new_pos = ch_tell();
- break;
- }
- if (n >= size_linebuf-1)
- {
- if (expand_linebuf())
- {
- /*
- * Overflowed the input buffer.
- * Pretend the line ended here.
- */
- new_pos = ch_tell() - 1;
- break;
- }
- }
- linebuf[n++] = c;
- c = ch_forw_get();
- }
- linebuf[n] = '\0';
- if (linep != NULL)
- *linep = linebuf;
- if (line_lenp != NULL)
- *line_lenp = n;
- return (new_pos);
-}
-
-/*
- * Analogous to back_line(), but deals with "raw lines".
- * {{ This is supposed to be more efficient than back_line(). }}
- */
- public POSITION
-back_raw_line(curr_pos, linep, line_lenp)
- POSITION curr_pos;
- char **linep;
- int *line_lenp;
-{
- register int n;
- register int c;
- POSITION new_pos;
-
- if (curr_pos == NULL_POSITION || curr_pos <= ch_zero() ||
- ch_seek(curr_pos-1))
- return (NULL_POSITION);
-
- n = size_linebuf;
- linebuf[--n] = '\0';
- for (;;)
- {
- c = ch_back_get();
- if (c == '\n' || ABORT_SIGS())
- {
- /*
- * This is the newline ending the previous line.
- * We have hit the beginning of the line.
- */
- new_pos = ch_tell() + 1;
- break;
- }
- if (c == EOI)
- {
- /*
- * We have hit the beginning of the file.
- * This must be the first line in the file.
- * This must, of course, be the beginning of the line.
- */
- new_pos = ch_zero();
- break;
- }
- if (n <= 0)
- {
- int old_size_linebuf = size_linebuf;
- char *fm;
- char *to;
- if (expand_linebuf())
- {
- /*
- * Overflowed the input buffer.
- * Pretend the line ended here.
- */
- new_pos = ch_tell() + 1;
- break;
- }
- /*
- * Shift the data to the end of the new linebuf.
- */
- for (fm = linebuf + old_size_linebuf - 1,
- to = linebuf + size_linebuf - 1;
- fm >= linebuf; fm--, to--)
- *to = *fm;
- n = size_linebuf - old_size_linebuf;
- }
- linebuf[--n] = c;
- }
- if (linep != NULL)
- *linep = &linebuf[n];
- if (line_lenp != NULL)
- *line_lenp = size_linebuf - 1 - n;
- return (new_pos);
-}
diff --git a/contrib/less/linenum.c b/contrib/less/linenum.c
deleted file mode 100644
index 184306b..0000000
--- a/contrib/less/linenum.c
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Code to handle displaying line numbers.
- *
- * Finding the line number of a given file position is rather tricky.
- * We don't want to just start at the beginning of the file and
- * count newlines, because that is slow for large files (and also
- * wouldn't work if we couldn't get to the start of the file; e.g.
- * if input is a long pipe).
- *
- * So we use the function add_lnum to cache line numbers.
- * We try to be very clever and keep only the more interesting
- * line numbers when we run out of space in our table. A line
- * number is more interesting than another when it is far from
- * other line numbers. For example, we'd rather keep lines
- * 100,200,300 than 100,101,300. 200 is more interesting than
- * 101 because 101 can be derived very cheaply from 100, while
- * 200 is more expensive to derive from 100.
- *
- * The function currline() returns the line number of a given
- * position in the file. As a side effect, it calls add_lnum
- * to cache the line number. Therefore currline is occasionally
- * called to make sure we cache line numbers often enough.
- */
-
-#include "less.h"
-
-/*
- * Structure to keep track of a line number and the associated file position.
- * A doubly-linked circular list of line numbers is kept ordered by line number.
- */
-struct linenum_info
-{
- struct linenum_info *next; /* Link to next in the list */
- struct linenum_info *prev; /* Line to previous in the list */
- POSITION pos; /* File position */
- POSITION gap; /* Gap between prev and next */
- LINENUM line; /* Line number */
-};
-/*
- * "gap" needs some explanation: the gap of any particular line number
- * is the distance between the previous one and the next one in the list.
- * ("Distance" means difference in file position.) In other words, the
- * gap of a line number is the gap which would be introduced if this
- * line number were deleted. It is used to decide which one to replace
- * when we have a new one to insert and the table is full.
- */
-
-#define NPOOL 50 /* Size of line number pool */
-
-#define LONGTIME (2) /* In seconds */
-
-public int lnloop = 0; /* Are we in the line num loop? */
-
-static struct linenum_info anchor; /* Anchor of the list */
-static struct linenum_info *freelist; /* Anchor of the unused entries */
-static struct linenum_info pool[NPOOL]; /* The pool itself */
-static struct linenum_info *spare; /* We always keep one spare entry */
-
-extern int linenums;
-extern int sigs;
-extern int sc_height;
-
-/*
- * Initialize the line number structures.
- */
- public void
-clr_linenum()
-{
- register struct linenum_info *p;
-
- /*
- * Put all the entries on the free list.
- * Leave one for the "spare".
- */
- for (p = pool; p < &pool[NPOOL-2]; p++)
- p->next = p+1;
- pool[NPOOL-2].next = NULL;
- freelist = pool;
-
- spare = &pool[NPOOL-1];
-
- /*
- * Initialize the anchor.
- */
- anchor.next = anchor.prev = &anchor;
- anchor.gap = 0;
- anchor.pos = (POSITION)0;
- anchor.line = 1;
-}
-
-/*
- * Calculate the gap for an entry.
- */
- static void
-calcgap(p)
- register struct linenum_info *p;
-{
- /*
- * Don't bother to compute a gap for the anchor.
- * Also don't compute a gap for the last one in the list.
- * The gap for that last one should be considered infinite,
- * but we never look at it anyway.
- */
- if (p == &anchor || p->next == &anchor)
- return;
- p->gap = p->next->pos - p->prev->pos;
-}
-
-/*
- * Add a new line number to the cache.
- * The specified position (pos) should be the file position of the
- * FIRST character in the specified line.
- */
- public void
-add_lnum(linenum, pos)
- LINENUM linenum;
- POSITION pos;
-{
- register struct linenum_info *p;
- register struct linenum_info *new;
- register struct linenum_info *nextp;
- register struct linenum_info *prevp;
- register POSITION mingap;
-
- /*
- * Find the proper place in the list for the new one.
- * The entries are sorted by position.
- */
- for (p = anchor.next; p != &anchor && p->pos < pos; p = p->next)
- if (p->line == linenum)
- /* We already have this one. */
- return;
- nextp = p;
- prevp = p->prev;
-
- if (freelist != NULL)
- {
- /*
- * We still have free (unused) entries.
- * Use one of them.
- */
- new = freelist;
- freelist = freelist->next;
- } else
- {
- /*
- * No free entries.
- * Use the "spare" entry.
- */
- new = spare;
- spare = NULL;
- }
-
- /*
- * Fill in the fields of the new entry,
- * and insert it into the proper place in the list.
- */
- new->next = nextp;
- new->prev = prevp;
- new->pos = pos;
- new->line = linenum;
-
- nextp->prev = new;
- prevp->next = new;
-
- /*
- * Recalculate gaps for the new entry and the neighboring entries.
- */
- calcgap(new);
- calcgap(nextp);
- calcgap(prevp);
-
- if (spare == NULL)
- {
- /*
- * We have used the spare entry.
- * Scan the list to find the one with the smallest
- * gap, take it out and make it the spare.
- * We should never remove the last one, so stop when
- * we get to p->next == &anchor. This also avoids
- * looking at the gap of the last one, which is
- * not computed by calcgap.
- */
- mingap = anchor.next->gap;
- for (p = anchor.next; p->next != &anchor; p = p->next)
- {
- if (p->gap <= mingap)
- {
- spare = p;
- mingap = p->gap;
- }
- }
- spare->next->prev = spare->prev;
- spare->prev->next = spare->next;
- }
-}
-
-/*
- * If we get stuck in a long loop trying to figure out the
- * line number, print a message to tell the user what we're doing.
- */
- static void
-longloopmessage()
-{
- ierror("Calculating line numbers", NULL_PARG);
- /*
- * Set the lnloop flag here, so if the user interrupts while
- * we are calculating line numbers, the signal handler will
- * turn off line numbers (linenums=0).
- */
- lnloop = 1;
-}
-
-static int loopcount;
-#if HAVE_TIME
-static long startime;
-#endif
-
- static void
-longish()
-{
-#if HAVE_TIME
- if (loopcount >= 0 && ++loopcount > 100)
- {
- loopcount = 0;
- if (get_time() >= startime + LONGTIME)
- {
- longloopmessage();
- loopcount = -1;
- }
- }
-#else
- if (loopcount >= 0 && ++loopcount > LONGLOOP)
- {
- longloopmessage();
- loopcount = -1;
- }
-#endif
-}
-
-/*
- * Find the line number associated with a given position.
- * Return 0 if we can't figure it out.
- */
- public LINENUM
-find_linenum(pos)
- POSITION pos;
-{
- register struct linenum_info *p;
- register LINENUM linenum;
- POSITION cpos;
-
- if (!linenums)
- /*
- * We're not using line numbers.
- */
- return (0);
- if (pos == NULL_POSITION)
- /*
- * Caller doesn't know what he's talking about.
- */
- return (0);
- if (pos <= ch_zero())
- /*
- * Beginning of file is always line number 1.
- */
- return (1);
-
- /*
- * Find the entry nearest to the position we want.
- */
- for (p = anchor.next; p != &anchor && p->pos < pos; p = p->next)
- continue;
- if (p->pos == pos)
- /* Found it exactly. */
- return (p->line);
-
- /*
- * This is the (possibly) time-consuming part.
- * We start at the line we just found and start
- * reading the file forward or backward till we
- * get to the place we want.
- *
- * First decide whether we should go forward from the
- * previous one or backwards from the next one.
- * The decision is based on which way involves
- * traversing fewer bytes in the file.
- */
-#if HAVE_TIME
- startime = get_time();
-#endif
- if (p == &anchor || pos - p->prev->pos < p->pos - pos)
- {
- /*
- * Go forward.
- */
- p = p->prev;
- if (ch_seek(p->pos))
- return (0);
- loopcount = 0;
- for (linenum = p->line, cpos = p->pos; cpos < pos; linenum++)
- {
- /*
- * Allow a signal to abort this loop.
- */
- cpos = forw_raw_line(cpos, (char **)NULL, (int *)NULL);
- if (ABORT_SIGS() || cpos == NULL_POSITION)
- return (0);
- longish();
- }
- lnloop = 0;
- /*
- * We might as well cache it.
- */
- add_lnum(linenum, cpos);
- /*
- * If the given position is not at the start of a line,
- * make sure we return the correct line number.
- */
- if (cpos > pos)
- linenum--;
- } else
- {
- /*
- * Go backward.
- */
- if (ch_seek(p->pos))
- return (0);
- loopcount = 0;
- for (linenum = p->line, cpos = p->pos; cpos > pos; linenum--)
- {
- /*
- * Allow a signal to abort this loop.
- */
- cpos = back_raw_line(cpos, (char **)NULL, (int *)NULL);
- if (ABORT_SIGS() || cpos == NULL_POSITION)
- return (0);
- longish();
- }
- lnloop = 0;
- /*
- * We might as well cache it.
- */
- add_lnum(linenum, cpos);
- }
-
- return (linenum);
-}
-
-/*
- * Find the position of a given line number.
- * Return NULL_POSITION if we can't figure it out.
- */
- public POSITION
-find_pos(linenum)
- LINENUM linenum;
-{
- register struct linenum_info *p;
- POSITION cpos;
- LINENUM clinenum;
-
- if (linenum <= 1)
- /*
- * Line number 1 is beginning of file.
- */
- return (ch_zero());
-
- /*
- * Find the entry nearest to the line number we want.
- */
- for (p = anchor.next; p != &anchor && p->line < linenum; p = p->next)
- continue;
- if (p->line == linenum)
- /* Found it exactly. */
- return (p->pos);
-
- if (p == &anchor || linenum - p->prev->line < p->line - linenum)
- {
- /*
- * Go forward.
- */
- p = p->prev;
- if (ch_seek(p->pos))
- return (NULL_POSITION);
- for (clinenum = p->line, cpos = p->pos; clinenum < linenum; clinenum++)
- {
- /*
- * Allow a signal to abort this loop.
- */
- cpos = forw_raw_line(cpos, (char **)NULL, (int *)NULL);
- if (ABORT_SIGS() || cpos == NULL_POSITION)
- return (NULL_POSITION);
- }
- } else
- {
- /*
- * Go backward.
- */
- if (ch_seek(p->pos))
- return (NULL_POSITION);
- for (clinenum = p->line, cpos = p->pos; clinenum > linenum; clinenum--)
- {
- /*
- * Allow a signal to abort this loop.
- */
- cpos = back_raw_line(cpos, (char **)NULL, (int *)NULL);
- if (ABORT_SIGS() || cpos == NULL_POSITION)
- return (NULL_POSITION);
- }
- }
- /*
- * We might as well cache it.
- */
- add_lnum(clinenum, cpos);
- return (cpos);
-}
-
-/*
- * Return the line number of the "current" line.
- * The argument "where" tells which line is to be considered
- * the "current" line (e.g. TOP, BOTTOM, MIDDLE, etc).
- */
- public LINENUM
-currline(where)
- int where;
-{
- POSITION pos;
- POSITION len;
- LINENUM linenum;
-
- pos = position(where);
- len = ch_length();
- while (pos == NULL_POSITION && where >= 0 && where < sc_height)
- pos = position(++where);
- if (pos == NULL_POSITION)
- pos = len;
- linenum = find_linenum(pos);
- if (pos == len)
- linenum--;
- return (linenum);
-}
diff --git a/contrib/less/lsystem.c b/contrib/less/lsystem.c
deleted file mode 100644
index 512bea3..0000000
--- a/contrib/less/lsystem.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines to execute other programs.
- * Necessarily very OS dependent.
- */
-
-#include "less.h"
-#include <signal.h>
-#include "position.h"
-
-#if MSDOS_COMPILER
-#include <dos.h>
-#ifdef _MSC_VER
-#include <direct.h>
-#define setdisk(n) _chdrive((n)+1)
-#else
-#include <dir.h>
-#endif
-#endif
-
-extern int screen_trashed;
-extern IFILE curr_ifile;
-
-
-#if HAVE_SYSTEM
-
-/*
- * Pass the specified command to a shell to be executed.
- * Like plain "system()", but handles resetting terminal modes, etc.
- */
- public void
-lsystem(cmd, donemsg)
- char *cmd;
- char *donemsg;
-{
- register int inp;
-#if HAVE_SHELL
- register char *shell;
- register char *p;
-#endif
- IFILE save_ifile;
-#if MSDOS_COMPILER
- char cwd[FILENAME_MAX+1];
-#endif
-
- /*
- * Print the command which is to be executed,
- * unless the command starts with a "-".
- */
- if (cmd[0] == '-')
- cmd++;
- else
- {
- clear_bot();
- putstr("!");
- putstr(cmd);
- putstr("\n");
- }
-
-#if MSDOS_COMPILER
- /*
- * Working directory is global on MSDOS.
- * The child might change the working directory, so we
- * must save and restore CWD across calls to "system",
- * or else we won't find our file when we return and
- * try to "reedit_ifile" it.
- */
- getcwd(cwd, FILENAME_MAX);
-#endif
-
- /*
- * Close the current input file.
- */
- save_ifile = save_curr_ifile();
- (void) edit_ifile(NULL_IFILE);
-
- /*
- * De-initialize the terminal and take out of raw mode.
- */
- deinit();
- flush(); /* Make sure the deinit chars get out */
- raw_mode(0);
-#if MSDOS_COMPILER==WIN32C
- close_getchr();
-#endif
-
- /*
- * Restore signals to their defaults.
- */
- init_signals(0);
-
-#if HAVE_DUP
- /*
- * Force standard input to be the user's terminal
- * (the normal standard input), even if less's standard input
- * is coming from a pipe.
- */
- inp = dup(0);
- close(0);
-#if OS2
- /* The __open() system call translates "/dev/tty" to "con". */
- if (__open("/dev/tty", OPEN_READ) < 0)
-#else
- if (open("/dev/tty", OPEN_READ) < 0)
-#endif
- dup(inp);
-#endif
-
- /*
- * Pass the command to the system to be executed.
- * If we have a SHELL environment variable, use
- * <$SHELL -c "command"> instead of just <command>.
- * If the command is empty, just invoke a shell.
- */
-#if HAVE_SHELL
- p = NULL;
- if ((shell = lgetenv("SHELL")) != NULL && *shell != '\0')
- {
- if (*cmd == '\0')
- p = save(shell);
- else
- {
- char *esccmd = shell_quote(cmd);
- if (esccmd != NULL)
- {
- int len = strlen(shell) + strlen(esccmd) + 5;
- p = (char *) ecalloc(len, sizeof(char));
- SNPRINTF3(p, len, "%s %s %s", shell, shell_coption(), esccmd);
- free(esccmd);
- }
- }
- }
- if (p == NULL)
- {
- if (*cmd == '\0')
- p = save("sh");
- else
- p = save(cmd);
- }
- system(p);
- free(p);
-#else
-#if MSDOS_COMPILER==DJGPPC
- /*
- * Make stdin of the child be in cooked mode.
- */
- setmode(0, O_TEXT);
- /*
- * We don't need to catch signals of the child (it
- * also makes trouble with some DPMI servers).
- */
- __djgpp_exception_toggle();
- system(cmd);
- __djgpp_exception_toggle();
-#else
- system(cmd);
-#endif
-#endif
-
-#if HAVE_DUP
- /*
- * Restore standard input, reset signals, raw mode, etc.
- */
- close(0);
- dup(inp);
- close(inp);
-#endif
-
-#if MSDOS_COMPILER==WIN32C
- open_getchr();
-#endif
- init_signals(1);
- raw_mode(1);
- if (donemsg != NULL)
- {
- putstr(donemsg);
- putstr(" (press RETURN)");
- get_return();
- putchr('\n');
- flush();
- }
- init();
- screen_trashed = 1;
-
-#if MSDOS_COMPILER
- /*
- * Restore the previous directory (possibly
- * changed by the child program we just ran).
- */
- chdir(cwd);
-#if MSDOS_COMPILER != DJGPPC
- /*
- * Some versions of chdir() don't change to the drive
- * which is part of CWD. (DJGPP does this in chdir.)
- */
- if (cwd[1] == ':')
- {
- if (cwd[0] >= 'a' && cwd[0] <= 'z')
- setdisk(cwd[0] - 'a');
- else if (cwd[0] >= 'A' && cwd[0] <= 'Z')
- setdisk(cwd[0] - 'A');
- }
-#endif
-#endif
-
- /*
- * Reopen the current input file.
- */
- reedit_ifile(save_ifile);
-
-#if defined(SIGWINCH) || defined(SIGWIND)
- /*
- * Since we were ignoring window change signals while we executed
- * the system command, we must assume the window changed.
- * Warning: this leaves a signal pending (in "sigs"),
- * so psignals() should be called soon after lsystem().
- */
- winch(0);
-#endif
-}
-
-#endif
-
-#if PIPEC
-
-/*
- * Pipe a section of the input file into the given shell command.
- * The section to be piped is the section "between" the current
- * position and the position marked by the given letter.
- *
- * If the mark is after the current screen, the section between
- * the top line displayed and the mark is piped.
- * If the mark is before the current screen, the section between
- * the mark and the bottom line displayed is piped.
- * If the mark is on the current screen, or if the mark is ".",
- * the whole current screen is piped.
- */
- public int
-pipe_mark(c, cmd)
- int c;
- char *cmd;
-{
- POSITION mpos, tpos, bpos;
-
- /*
- * mpos = the marked position.
- * tpos = top of screen.
- * bpos = bottom of screen.
- */
- mpos = markpos(c);
- if (mpos == NULL_POSITION)
- return (-1);
- tpos = position(TOP);
- if (tpos == NULL_POSITION)
- tpos = ch_zero();
- bpos = position(BOTTOM);
-
- if (c == '.')
- return (pipe_data(cmd, tpos, bpos));
- else if (mpos <= tpos)
- return (pipe_data(cmd, mpos, bpos));
- else if (bpos == NULL_POSITION)
- return (pipe_data(cmd, tpos, bpos));
- else
- return (pipe_data(cmd, tpos, mpos));
-}
-
-/*
- * Create a pipe to the given shell command.
- * Feed it the file contents between the positions spos and epos.
- */
- public int
-pipe_data(cmd, spos, epos)
- char *cmd;
- POSITION spos;
- POSITION epos;
-{
- register FILE *f;
- register int c;
- extern FILE *popen();
-
- /*
- * This is structured much like lsystem().
- * Since we're running a shell program, we must be careful
- * to perform the necessary deinitialization before running
- * the command, and reinitialization after it.
- */
- if (ch_seek(spos) != 0)
- {
- error("Cannot seek to start position", NULL_PARG);
- return (-1);
- }
-
- if ((f = popen(cmd, "w")) == NULL)
- {
- error("Cannot create pipe", NULL_PARG);
- return (-1);
- }
- clear_bot();
- putstr("!");
- putstr(cmd);
- putstr("\n");
-
- deinit();
- flush();
- raw_mode(0);
- init_signals(0);
-#if MSDOS_COMPILER==WIN32C
- close_getchr();
-#endif
-#ifdef SIGPIPE
- LSIGNAL(SIGPIPE, SIG_IGN);
-#endif
-
- c = EOI;
- while (epos == NULL_POSITION || spos++ <= epos)
- {
- /*
- * Read a character from the file and give it to the pipe.
- */
- c = ch_forw_get();
- if (c == EOI)
- break;
- if (putc(c, f) == EOF)
- break;
- }
-
- /*
- * Finish up the last line.
- */
- while (c != '\n' && c != EOI )
- {
- c = ch_forw_get();
- if (c == EOI)
- break;
- if (putc(c, f) == EOF)
- break;
- }
-
- pclose(f);
-
-#ifdef SIGPIPE
- LSIGNAL(SIGPIPE, SIG_DFL);
-#endif
-#if MSDOS_COMPILER==WIN32C
- open_getchr();
-#endif
- init_signals(1);
- raw_mode(1);
- init();
- screen_trashed = 1;
-#if defined(SIGWINCH) || defined(SIGWIND)
- /* {{ Probably don't need this here. }} */
- winch(0);
-#endif
- return (0);
-}
-
-#endif
diff --git a/contrib/less/main.c b/contrib/less/main.c
deleted file mode 100644
index 36a230e..0000000
--- a/contrib/less/main.c
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Entry point, initialization, miscellaneous routines.
- */
-
-#include "less.h"
-#if MSDOS_COMPILER==WIN32C
-#include <windows.h>
-#endif
-
-public char * every_first_cmd = NULL;
-public int new_file;
-public int is_tty;
-public IFILE curr_ifile = NULL_IFILE;
-public IFILE old_ifile = NULL_IFILE;
-public struct scrpos initial_scrpos;
-public int any_display = FALSE;
-public POSITION start_attnpos = NULL_POSITION;
-public POSITION end_attnpos = NULL_POSITION;
-public int wscroll;
-public char * progname;
-public int quitting;
-public int secure;
-public int dohelp;
-public int less_is_more;
-
-#if LOGFILE
-public int logfile = -1;
-public int force_logfile = FALSE;
-public char * namelogfile = NULL;
-#endif
-
-#if EDITOR
-public char * editor;
-public char * editproto;
-#endif
-
-#if TAGS
-extern char * tags;
-extern char * tagoption;
-extern int jump_sline;
-#endif
-
-#ifdef WIN32
-static char consoleTitle[256];
-#endif
-
-extern int missing_cap;
-extern int know_dumb;
-extern int quit_if_one_screen;
-extern int pr_type;
-
-
-/*
- * Entry point.
- */
-int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- IFILE ifile;
- char *s;
-
-#ifdef __EMX__
- _response(&argc, &argv);
- _wildcard(&argc, &argv);
-#endif
-
- progname = *argv++;
- argc--;
-
- secure = 0;
- s = lgetenv("LESSSECURE");
- if (s != NULL && *s != '\0')
- secure = 1;
-
-#ifdef WIN32
- if (getenv("HOME") == NULL)
- {
- /*
- * If there is no HOME environment variable,
- * try the concatenation of HOMEDRIVE + HOMEPATH.
- */
- char *drive = getenv("HOMEDRIVE");
- char *path = getenv("HOMEPATH");
- if (drive != NULL && path != NULL)
- {
- char *env = (char *) ecalloc(strlen(drive) +
- strlen(path) + 6, sizeof(char));
- strcpy(env, "HOME=");
- strcat(env, drive);
- strcat(env, path);
- putenv(env);
- }
- }
- GetConsoleTitle(consoleTitle, sizeof(consoleTitle)/sizeof(char));
-#endif /* WIN32 */
-
- /*
- * Process command line arguments and LESS environment arguments.
- * Command line arguments override environment arguments.
- */
- is_tty = isatty(1);
- get_term();
- init_cmds();
- init_charset();
- init_line();
- init_cmdhist();
- init_option();
-
- /*
- * If the name of the executable program is "more",
- * act like LESS_IS_MORE is set.
- */
- for (s = progname + strlen(progname); s > progname; s--)
- {
- if (s[-1] == PATHNAME_SEP[0])
- break;
- }
- if (strcmp(s, "more") == 0)
- less_is_more = 1;
-
- init_prompt();
-
- s = lgetenv(less_is_more ? "MORE" : "LESS");
- if (s != NULL)
- scan_option(save(s));
-
-#define isoptstring(s) (((s)[0] == '-' || (s)[0] == '+') && (s)[1] != '\0')
- while (argc > 0 && (isoptstring(*argv) || isoptpending()))
- {
- s = *argv++;
- argc--;
- if (strcmp(s, "--") == 0)
- break;
- scan_option(s);
- }
-#undef isoptstring
-
- if (isoptpending())
- {
- /*
- * Last command line option was a flag requiring a
- * following string, but there was no following string.
- */
- nopendopt();
- quit(QUIT_OK);
- }
-
- if (less_is_more && get_quit_at_eof())
- quit_if_one_screen = TRUE;
-
-#if EDITOR
- editor = lgetenv("VISUAL");
- if (editor == NULL || *editor == '\0')
- {
- editor = lgetenv("EDITOR");
- if (editor == NULL || *editor == '\0')
- editor = EDIT_PGM;
- }
- editproto = lgetenv("LESSEDIT");
- if (editproto == NULL || *editproto == '\0')
- editproto = "%E ?lm+%lm. %f";
-#endif
-
- /*
- * Call get_ifile with all the command line filenames
- * to "register" them with the ifile system.
- */
- ifile = NULL_IFILE;
- if (dohelp)
- ifile = get_ifile(FAKE_HELPFILE, ifile);
- while (argc-- > 0)
- {
- char *filename;
-#if (MSDOS_COMPILER && MSDOS_COMPILER != DJGPPC)
- /*
- * Because the "shell" doesn't expand filename patterns,
- * treat each argument as a filename pattern rather than
- * a single filename.
- * Expand the pattern and iterate over the expanded list.
- */
- struct textlist tlist;
- char *gfilename;
-
- gfilename = lglob(*argv++);
- init_textlist(&tlist, gfilename);
- filename = NULL;
- while ((filename = forw_textlist(&tlist, filename)) != NULL)
- {
- (void) get_ifile(filename, ifile);
- ifile = prev_ifile(NULL_IFILE);
- }
- free(gfilename);
-#else
- filename = shell_quote(*argv);
- if (filename == NULL)
- filename = *argv;
- argv++;
- (void) get_ifile(filename, ifile);
- ifile = prev_ifile(NULL_IFILE);
-#endif
- }
- /*
- * Set up terminal, etc.
- */
- if (!is_tty)
- {
- /*
- * Output is not a tty.
- * Just copy the input file(s) to output.
- */
- SET_BINARY(1);
- if (nifile() == 0)
- {
- if (edit_stdin() == 0)
- cat_file();
- } else if (edit_first() == 0)
- {
- do {
- cat_file();
- } while (edit_next(1) == 0);
- }
- quit(QUIT_OK);
- }
-
- if (missing_cap && !know_dumb)
- error("WARNING: terminal is not fully functional", NULL_PARG);
- init_mark();
- open_getchr();
- raw_mode(1);
- init_signals(1);
-
- /*
- * Select the first file to examine.
- */
-#if TAGS
- if (tagoption != NULL || strcmp(tags, "-") == 0)
- {
- /*
- * A -t option was given.
- * Verify that no filenames were also given.
- * Edit the file selected by the "tags" search,
- * and search for the proper line in the file.
- */
- if (nifile() > 0)
- {
- error("No filenames allowed with -t option", NULL_PARG);
- quit(QUIT_ERROR);
- }
- findtag(tagoption);
- if (edit_tagfile()) /* Edit file which contains the tag */
- quit(QUIT_ERROR);
- /*
- * Search for the line which contains the tag.
- * Set up initial_scrpos so we display that line.
- */
- initial_scrpos.pos = tagsearch();
- if (initial_scrpos.pos == NULL_POSITION)
- quit(QUIT_ERROR);
- initial_scrpos.ln = jump_sline;
- } else
-#endif
- if (nifile() == 0)
- {
- if (edit_stdin()) /* Edit standard input */
- quit(QUIT_ERROR);
- } else
- {
- if (edit_first()) /* Edit first valid file in cmd line */
- quit(QUIT_ERROR);
- }
-
- init();
- commands();
- quit(QUIT_OK);
- /*NOTREACHED*/
- return (0);
-}
-
-/*
- * Copy a string to a "safe" place
- * (that is, to a buffer allocated by calloc).
- */
- public char *
-save(s)
- char *s;
-{
- register char *p;
-
- p = (char *) ecalloc(strlen(s)+1, sizeof(char));
- strcpy(p, s);
- return (p);
-}
-
-/*
- * Allocate memory.
- * Like calloc(), but never returns an error (NULL).
- */
- public VOID_POINTER
-ecalloc(count, size)
- int count;
- unsigned int size;
-{
- register VOID_POINTER p;
-
- p = (VOID_POINTER) calloc(count, size);
- if (p != NULL)
- return (p);
- error("Cannot allocate memory", NULL_PARG);
- quit(QUIT_ERROR);
- /*NOTREACHED*/
- return (NULL);
-}
-
-/*
- * Skip leading spaces in a string.
- */
- public char *
-skipsp(s)
- register char *s;
-{
- while (*s == ' ' || *s == '\t')
- s++;
- return (s);
-}
-
-/*
- * See how many characters of two strings are identical.
- * If uppercase is true, the first string must begin with an uppercase
- * character; the remainder of the first string may be either case.
- */
- public int
-sprefix(ps, s, uppercase)
- char *ps;
- char *s;
- int uppercase;
-{
- register int c;
- register int sc;
- register int len = 0;
-
- for ( ; *s != '\0'; s++, ps++)
- {
- c = *ps;
- if (uppercase)
- {
- if (len == 0 && ASCII_IS_LOWER(c))
- return (-1);
- if (ASCII_IS_UPPER(c))
- c = ASCII_TO_LOWER(c);
- }
- sc = *s;
- if (len > 0 && ASCII_IS_UPPER(sc))
- sc = ASCII_TO_LOWER(sc);
- if (c != sc)
- break;
- len++;
- }
- return (len);
-}
-
-/*
- * Exit the program.
- */
- public void
-quit(status)
- int status;
-{
- static int save_status;
-
- /*
- * Put cursor at bottom left corner, clear the line,
- * reset the terminal modes, and exit.
- */
- if (status < 0)
- status = save_status;
- else
- save_status = status;
- quitting = 1;
- edit((char*)NULL);
- save_cmdhist();
- if (any_display && is_tty)
- clear_bot();
- deinit();
- flush();
- raw_mode(0);
-#if MSDOS_COMPILER && MSDOS_COMPILER != DJGPPC
- /*
- * If we don't close 2, we get some garbage from
- * 2's buffer when it flushes automatically.
- * I cannot track this one down RB
- * The same bug shows up if we use ^C^C to abort.
- */
- close(2);
-#endif
-#if WIN32
- SetConsoleTitle(consoleTitle);
-#endif
- close_getchr();
- exit(status);
-}
diff --git a/contrib/less/mark.c b/contrib/less/mark.c
deleted file mode 100644
index 870f426..0000000
--- a/contrib/less/mark.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-#include "less.h"
-
-extern IFILE curr_ifile;
-extern int sc_height;
-extern int jump_sline;
-
-/*
- * A mark is an ifile (input file) plus a position within the file.
- */
-struct mark {
- IFILE m_ifile;
- struct scrpos m_scrpos;
-};
-
-/*
- * The table of marks.
- * Each mark is identified by a lowercase or uppercase letter.
- * The final one is lmark, for the "last mark"; addressed by the apostrophe.
- */
-#define NMARKS ((2*26)+1) /* a-z, A-Z, lastmark */
-#define LASTMARK (NMARKS-1)
-static struct mark marks[NMARKS];
-
-/*
- * Initialize the mark table to show no marks are set.
- */
- public void
-init_mark()
-{
- int i;
-
- for (i = 0; i < NMARKS; i++)
- marks[i].m_scrpos.pos = NULL_POSITION;
-}
-
-/*
- * See if a mark letter is valid (between a and z).
- */
- static struct mark *
-getumark(c)
- int c;
-{
- if (c >= 'a' && c <= 'z')
- return (&marks[c-'a']);
-
- if (c >= 'A' && c <= 'Z')
- return (&marks[c-'A'+26]);
-
- error("Invalid mark letter", NULL_PARG);
- return (NULL);
-}
-
-/*
- * Get the mark structure identified by a character.
- * The mark struct may come either from the mark table
- * or may be constructed on the fly for certain characters like ^, $.
- */
- static struct mark *
-getmark(c)
- int c;
-{
- register struct mark *m;
- static struct mark sm;
-
- switch (c)
- {
- case '^':
- /*
- * Beginning of the current file.
- */
- m = &sm;
- m->m_scrpos.pos = ch_zero();
- m->m_scrpos.ln = 0;
- m->m_ifile = curr_ifile;
- break;
- case '$':
- /*
- * End of the current file.
- */
- if (ch_end_seek())
- {
- error("Cannot seek to end of file", NULL_PARG);
- return (NULL);
- }
- m = &sm;
- m->m_scrpos.pos = ch_tell();
- m->m_scrpos.ln = sc_height-1;
- m->m_ifile = curr_ifile;
- break;
- case '.':
- /*
- * Current position in the current file.
- */
- m = &sm;
- get_scrpos(&m->m_scrpos);
- m->m_ifile = curr_ifile;
- break;
- case '\'':
- /*
- * The "last mark".
- */
- m = &marks[LASTMARK];
- break;
- default:
- /*
- * Must be a user-defined mark.
- */
- m = getumark(c);
- if (m == NULL)
- break;
- if (m->m_scrpos.pos == NULL_POSITION)
- {
- error("Mark not set", NULL_PARG);
- return (NULL);
- }
- break;
- }
- return (m);
-}
-
-/*
- * Is a mark letter is invalid?
- */
- public int
-badmark(c)
- int c;
-{
- return (getmark(c) == NULL);
-}
-
-/*
- * Set a user-defined mark.
- */
- public void
-setmark(c)
- int c;
-{
- register struct mark *m;
- struct scrpos scrpos;
-
- m = getumark(c);
- if (m == NULL)
- return;
- get_scrpos(&scrpos);
- m->m_scrpos = scrpos;
- m->m_ifile = curr_ifile;
-}
-
-/*
- * Set lmark (the mark named by the apostrophe).
- */
- public void
-lastmark()
-{
- struct scrpos scrpos;
-
- if (ch_getflags() & CH_HELPFILE)
- return;
- get_scrpos(&scrpos);
- if (scrpos.pos == NULL_POSITION)
- return;
- marks[LASTMARK].m_scrpos = scrpos;
- marks[LASTMARK].m_ifile = curr_ifile;
-}
-
-/*
- * Go to a mark.
- */
- public void
-gomark(c)
- int c;
-{
- register struct mark *m;
- struct scrpos scrpos;
-
- m = getmark(c);
- if (m == NULL)
- return;
-
- /*
- * If we're trying to go to the lastmark and
- * it has not been set to anything yet,
- * set it to the beginning of the current file.
- */
- if (m == &marks[LASTMARK] && m->m_scrpos.pos == NULL_POSITION)
- {
- m->m_ifile = curr_ifile;
- m->m_scrpos.pos = ch_zero();
- m->m_scrpos.ln = jump_sline;
- }
-
- /*
- * If we're using lmark, we must save the screen position now,
- * because if we call edit_ifile() below, lmark will change.
- * (We save the screen position even if we're not using lmark.)
- */
- scrpos = m->m_scrpos;
- if (m->m_ifile != curr_ifile)
- {
- /*
- * Not in the current file; edit the correct file.
- */
- if (edit_ifile(m->m_ifile))
- return;
- }
-
- jump_loc(scrpos.pos, scrpos.ln);
-}
-
-/*
- * Return the position associated with a given mark letter.
- *
- * We don't return which screen line the position
- * is associated with, but this doesn't matter much,
- * because it's always the first non-blank line on the screen.
- */
- public POSITION
-markpos(c)
- int c;
-{
- register struct mark *m;
-
- m = getmark(c);
- if (m == NULL)
- return (NULL_POSITION);
-
- if (m->m_ifile != curr_ifile)
- {
- error("Mark not in current file", NULL_PARG);
- return (NULL_POSITION);
- }
- return (m->m_scrpos.pos);
-}
-
-/*
- * Clear the marks associated with a specified ifile.
- */
- public void
-unmark(ifile)
- IFILE ifile;
-{
- int i;
-
- for (i = 0; i < NMARKS; i++)
- if (marks[i].m_ifile == ifile)
- marks[i].m_scrpos.pos = NULL_POSITION;
-}
diff --git a/contrib/less/mkfuncs.awk b/contrib/less/mkfuncs.awk
deleted file mode 100644
index dea28ac..0000000
--- a/contrib/less/mkfuncs.awk
+++ /dev/null
@@ -1,9 +0,0 @@
-BEGIN { FS="("; state = 0 }
-
-/^ public/ { ftype = $0; state = 1 }
-
-{ if (state == 1)
- state = 2
- else if (state == 2)
- { print ftype,$1,"();"; state = 0 }
-}
diff --git a/contrib/less/mkhelp.c b/contrib/less/mkhelp.c
deleted file mode 100644
index f4a7ea7..0000000
--- a/contrib/less/mkhelp.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Silly little program to generate the help.c source file
- * from the less.hlp text file.
- * help.c just contains a char array whose contents are
- * the contents of less.hlp.
- */
-
-#include <stdio.h>
-
- int
-main(argc, argv)
- int argc;
- char *argv[];
-{
- int ch;
- int prevch;
-
- printf("/* This file was generated by mkhelp from less.hlp */\n");
- printf("#include \"less.h\"\n");
- printf("constant char helpdata[] = {\n");
- ch = 0;
- while (prevch = ch, (ch = getchar()) != EOF)
- {
- switch (ch)
- {
- case '\'':
- printf("'\\'',");
- break;
- case '\\':
- printf("'\\\\',");
- break;
- case '\b':
- printf("'\\b',");
- break;
- case '\t':
- printf("'\\t',");
- break;
- case '\n':
- if (prevch != '\r')
- printf("'\\n',\n");
- break;
- case '\r':
- if (prevch != '\n')
- printf("'\\n',\n");
- break;
- default:
- if (ch >= ' ' && ch < 0x7f)
- printf("'%c',", ch);
- else
- printf("0x%02x,", ch);
- break;
- }
- }
- /* Add an extra null char to avoid having a trailing comma. */
- printf(" 0 };\n");
- printf("constant int size_helpdata = sizeof(helpdata) - 1;\n");
- return (0);
-}
diff --git a/contrib/less/mkinstalldirs b/contrib/less/mkinstalldirs
deleted file mode 100755
index 91f6d04..0000000
--- a/contrib/less/mkinstalldirs
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Last modified: 1994-03-25
-# Public domain
-
-errstatus=0
-
-for file in ${1+"$@"} ; do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d in ${1+"$@"} ; do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
- mkdir "$pathcomp" || errstatus=$?
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/contrib/less/optfunc.c b/contrib/less/optfunc.c
deleted file mode 100644
index f296b79..0000000
--- a/contrib/less/optfunc.c
+++ /dev/null
@@ -1,668 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Handling functions for command line options.
- *
- * Most options are handled by the generic code in option.c.
- * But all string options, and a few non-string options, require
- * special handling specific to the particular option.
- * This special processing is done by the "handling functions" in this file.
- *
- * Each handling function is passed a "type" and, if it is a string
- * option, the string which should be "assigned" to the option.
- * The type may be one of:
- * INIT The option is being initialized from the command line.
- * TOGGLE The option is being changed from within the program.
- * QUERY The setting of the option is merely being queried.
- */
-
-#include "less.h"
-#include "option.h"
-
-extern int nbufs;
-extern int bufspace;
-extern int pr_type;
-extern int plusoption;
-extern int swindow;
-extern int sc_height;
-extern int secure;
-extern int dohelp;
-extern int any_display;
-extern char openquote;
-extern char closequote;
-extern char *prproto[];
-extern char *eqproto;
-extern char *hproto;
-extern char *wproto;
-extern IFILE curr_ifile;
-extern char version[];
-extern int jump_sline;
-extern int jump_sline_fraction;
-extern int less_is_more;
-#if LOGFILE
-extern char *namelogfile;
-extern int force_logfile;
-extern int logfile;
-#endif
-#if TAGS
-public char *tagoption = NULL;
-extern char *tags;
-#endif
-#if MSDOS_COMPILER
-extern int nm_fg_color, nm_bg_color;
-extern int bo_fg_color, bo_bg_color;
-extern int ul_fg_color, ul_bg_color;
-extern int so_fg_color, so_bg_color;
-extern int bl_fg_color, bl_bg_color;
-#endif
-
-
-#if LOGFILE
-/*
- * Handler for -o option.
- */
- public void
-opt_o(type, s)
- int type;
- char *s;
-{
- PARG parg;
-
- if (secure)
- {
- error("log file support is not available", NULL_PARG);
- return;
- }
- switch (type)
- {
- case INIT:
- namelogfile = s;
- break;
- case TOGGLE:
- if (ch_getflags() & CH_CANSEEK)
- {
- error("Input is not a pipe", NULL_PARG);
- return;
- }
- if (logfile >= 0)
- {
- error("Log file is already in use", NULL_PARG);
- return;
- }
- s = skipsp(s);
- namelogfile = lglob(s);
- use_logfile(namelogfile);
- sync_logfile();
- break;
- case QUERY:
- if (logfile < 0)
- error("No log file", NULL_PARG);
- else
- {
- parg.p_string = namelogfile;
- error("Log file \"%s\"", &parg);
- }
- break;
- }
-}
-
-/*
- * Handler for -O option.
- */
- public void
-opt__O(type, s)
- int type;
- char *s;
-{
- force_logfile = TRUE;
- opt_o(type, s);
-}
-#endif
-
-/*
- * Handlers for -l option.
- */
- public void
-opt_l(type, s)
- int type;
- char *s;
-{
- int err;
- int n;
- char *t;
-
- switch (type)
- {
- case INIT:
- t = s;
- n = getnum(&t, "l", &err);
- if (err || n <= 0)
- {
- error("Line number is required after -l", NULL_PARG);
- return;
- }
- plusoption = TRUE;
- ungetsc(s);
- break;
- }
-}
-
-/*
- * Handlers for -j option.
- */
- public void
-opt_j(type, s)
- int type;
- char *s;
-{
- PARG parg;
- char buf[16];
- int len;
- int err;
-
- switch (type)
- {
- case INIT:
- case TOGGLE:
- if (*s == '.')
- {
- s++;
- jump_sline_fraction = getfraction(&s, "j", &err);
- if (err)
- error("Invalid line fraction", NULL_PARG);
- else
- calc_jump_sline();
- } else
- {
- int sline = getnum(&s, "j", &err);
- if (err)
- error("Invalid line number", NULL_PARG);
- else
- {
- jump_sline = sline;
- jump_sline_fraction = -1;
- }
- }
- break;
- case QUERY:
- if (jump_sline_fraction < 0)
- {
- parg.p_int = jump_sline;
- error("Position target at screen line %d", &parg);
- } else
- {
-
- sprintf(buf, ".%06d", jump_sline_fraction);
- len = strlen(buf);
- while (len > 2 && buf[len-1] == '0')
- len--;
- buf[len] = '\0';
- parg.p_string = buf;
- error("Position target at screen position %s", &parg);
- }
- break;
- }
-}
-
- public void
-calc_jump_sline()
-{
- if (jump_sline_fraction < 0)
- return;
- jump_sline = sc_height * jump_sline_fraction / NUM_FRAC_DENOM;
-}
-
-#if USERFILE
- public void
-opt_k(type, s)
- int type;
- char *s;
-{
- PARG parg;
-
- switch (type)
- {
- case INIT:
- if (lesskey(s, 0))
- {
- parg.p_string = s;
- error("Cannot use lesskey file \"%s\"", &parg);
- }
- break;
- }
-}
-#endif
-
-#if TAGS
-/*
- * Handler for -t option.
- */
- public void
-opt_t(type, s)
- int type;
- char *s;
-{
- IFILE save_ifile;
- POSITION pos;
-
- switch (type)
- {
- case INIT:
- tagoption = s;
- /* Do the rest in main() */
- break;
- case TOGGLE:
- if (secure)
- {
- error("tags support is not available", NULL_PARG);
- break;
- }
- findtag(skipsp(s));
- save_ifile = save_curr_ifile();
- /*
- * Try to open the file containing the tag
- * and search for the tag in that file.
- */
- if (edit_tagfile() || (pos = tagsearch()) == NULL_POSITION)
- {
- /* Failed: reopen the old file. */
- reedit_ifile(save_ifile);
- break;
- }
- unsave_ifile(save_ifile);
- jump_loc(pos, jump_sline);
- break;
- }
-}
-
-/*
- * Handler for -T option.
- */
- public void
-opt__T(type, s)
- int type;
- char *s;
-{
- PARG parg;
-
- switch (type)
- {
- case INIT:
- tags = s;
- break;
- case TOGGLE:
- s = skipsp(s);
- tags = lglob(s);
- break;
- case QUERY:
- parg.p_string = tags;
- error("Tags file \"%s\"", &parg);
- break;
- }
-}
-#endif
-
-/*
- * Handler for -p option.
- */
- public void
-opt_p(type, s)
- int type;
- register char *s;
-{
- switch (type)
- {
- case INIT:
- /*
- * Unget a search command for the specified string.
- * {{ This won't work if the "/" command is
- * changed or invalidated by a .lesskey file. }}
- */
- plusoption = TRUE;
- ungetsc(s);
- /*
- * In "more" mode, the -p argument is a command,
- * not a search string, so we don't need a slash.
- */
- if (!less_is_more)
- ungetsc("/");
- break;
- }
-}
-
-/*
- * Handler for -P option.
- */
- public void
-opt__P(type, s)
- int type;
- register char *s;
-{
- register char **proto;
- PARG parg;
-
- switch (type)
- {
- case INIT:
- case TOGGLE:
- /*
- * Figure out which prototype string should be changed.
- */
- switch (*s)
- {
- case 's': proto = &prproto[PR_SHORT]; s++; break;
- case 'm': proto = &prproto[PR_MEDIUM]; s++; break;
- case 'M': proto = &prproto[PR_LONG]; s++; break;
- case '=': proto = &eqproto; s++; break;
- case 'h': proto = &hproto; s++; break;
- case 'w': proto = &wproto; s++; break;
- default: proto = &prproto[PR_SHORT]; break;
- }
- free(*proto);
- *proto = save(s);
- break;
- case QUERY:
- parg.p_string = prproto[pr_type];
- error("%s", &parg);
- break;
- }
-}
-
-/*
- * Handler for the -b option.
- */
- /*ARGSUSED*/
- public void
-opt_b(type, s)
- int type;
- char *s;
-{
- switch (type)
- {
- case INIT:
- case TOGGLE:
- /*
- * Set the new number of buffers.
- */
- ch_setbufspace(bufspace);
- break;
- case QUERY:
- break;
- }
-}
-
-/*
- * Handler for the -i option.
- */
- /*ARGSUSED*/
- public void
-opt_i(type, s)
- int type;
- char *s;
-{
- switch (type)
- {
- case TOGGLE:
- chg_caseless();
- break;
- case QUERY:
- case INIT:
- break;
- }
-}
-
-/*
- * Handler for the -V option.
- */
- /*ARGSUSED*/
- public void
-opt__V(type, s)
- int type;
- char *s;
-{
- switch (type)
- {
- case TOGGLE:
- case QUERY:
- dispversion();
- break;
- case INIT:
- /*
- * Force output to stdout per GNU standard for --version output.
- */
- any_display = 1;
- putstr("less ");
- putstr(version);
- putstr("\nCopyright (C) 1984-2007 Mark Nudelman\n\n");
- putstr("less comes with NO WARRANTY, to the extent permitted by law.\n");
- putstr("For information about the terms of redistribution,\n");
- putstr("see the file named README in the less distribution.\n");
- putstr("Homepage: http://www.greenwoodsoftware.com/less\n");
- quit(QUIT_OK);
- break;
- }
-}
-
-#if MSDOS_COMPILER
-/*
- * Parse an MSDOS color descriptor.
- */
- static void
-colordesc(s, fg_color, bg_color)
- char *s;
- int *fg_color;
- int *bg_color;
-{
- int fg, bg;
- int err;
-
- fg = getnum(&s, "D", &err);
- if (err)
- {
- error("Missing fg color in -D", NULL_PARG);
- return;
- }
- if (*s != '.')
- bg = 0;
- else
- {
- s++;
- bg = getnum(&s, "D", &err);
- if (err)
- {
- error("Missing fg color in -D", NULL_PARG);
- return;
- }
- }
- if (*s != '\0')
- error("Extra characters at end of -D option", NULL_PARG);
- *fg_color = fg;
- *bg_color = bg;
-}
-
-/*
- * Handler for the -D option.
- */
- /*ARGSUSED*/
- public void
-opt_D(type, s)
- int type;
- char *s;
-{
- switch (type)
- {
- case INIT:
- case TOGGLE:
- switch (*s++)
- {
- case 'n':
- colordesc(s, &nm_fg_color, &nm_bg_color);
- break;
- case 'd':
- colordesc(s, &bo_fg_color, &bo_bg_color);
- break;
- case 'u':
- colordesc(s, &ul_fg_color, &ul_bg_color);
- break;
- case 'k':
- colordesc(s, &bl_fg_color, &bl_bg_color);
- break;
- case 's':
- colordesc(s, &so_fg_color, &so_bg_color);
- break;
- default:
- error("-D must be followed by n, d, u, k or s", NULL_PARG);
- break;
- }
- if (type == TOGGLE)
- {
- at_enter(AT_STANDOUT);
- at_exit();
- }
- break;
- case QUERY:
- break;
- }
-}
-#endif
-
-/*
- * Handler for the -x option.
- */
- public void
-opt_x(type, s)
- int type;
- register char *s;
-{
- extern int tabstops[];
- extern int ntabstops;
- extern int tabdefault;
- char msg[60+(4*TABSTOP_MAX)];
- int i;
- PARG p;
-
- switch (type)
- {
- case INIT:
- case TOGGLE:
- /* Start at 1 because tabstops[0] is always zero. */
- for (i = 1; i < TABSTOP_MAX; )
- {
- int n = 0;
- s = skipsp(s);
- while (*s >= '0' && *s <= '9')
- n = (10 * n) + (*s++ - '0');
- if (n > tabstops[i-1])
- tabstops[i++] = n;
- s = skipsp(s);
- if (*s++ != ',')
- break;
- }
- if (i < 2)
- return;
- ntabstops = i;
- tabdefault = tabstops[ntabstops-1] - tabstops[ntabstops-2];
- break;
- case QUERY:
- strcpy(msg, "Tab stops ");
- if (ntabstops > 2)
- {
- for (i = 1; i < ntabstops; i++)
- {
- if (i > 1)
- strcat(msg, ",");
- sprintf(msg+strlen(msg), "%d", tabstops[i]);
- }
- sprintf(msg+strlen(msg), " and then ");
- }
- sprintf(msg+strlen(msg), "every %d spaces",
- tabdefault);
- p.p_string = msg;
- error("%s", &p);
- break;
- }
-}
-
-
-/*
- * Handler for the -" option.
- */
- public void
-opt_quote(type, s)
- int type;
- register char *s;
-{
- char buf[3];
- PARG parg;
-
- switch (type)
- {
- case INIT:
- case TOGGLE:
- if (s[0] == '\0')
- {
- openquote = closequote = '\0';
- break;
- }
- if (s[1] != '\0' && s[2] != '\0')
- {
- error("-\" must be followed by 1 or 2 chars", NULL_PARG);
- return;
- }
- openquote = s[0];
- if (s[1] == '\0')
- closequote = openquote;
- else
- closequote = s[1];
- break;
- case QUERY:
- buf[0] = openquote;
- buf[1] = closequote;
- buf[2] = '\0';
- parg.p_string = buf;
- error("quotes %s", &parg);
- break;
- }
-}
-
-/*
- * "-?" means display a help message.
- * If from the command line, exit immediately.
- */
- /*ARGSUSED*/
- public void
-opt_query(type, s)
- int type;
- char *s;
-{
- switch (type)
- {
- case QUERY:
- case TOGGLE:
- error("Use \"h\" for help", NULL_PARG);
- break;
- case INIT:
- dohelp = 1;
- }
-}
-
-/*
- * Get the "screen window" size.
- */
- public int
-get_swindow()
-{
- if (swindow > 0)
- return (swindow);
- return (sc_height + swindow);
-}
-
diff --git a/contrib/less/option.c b/contrib/less/option.c
deleted file mode 100644
index 92a8fdd..0000000
--- a/contrib/less/option.c
+++ /dev/null
@@ -1,700 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Process command line options.
- *
- * Each option is a single letter which controls a program variable.
- * The options have defaults which may be changed via
- * the command line option, toggled via the "-" command,
- * or queried via the "_" command.
- */
-
-#include "less.h"
-#include "option.h"
-
-static struct loption *pendopt;
-public int plusoption = FALSE;
-
-static char *propt();
-static char *optstring();
-static int flip_triple();
-
-extern int screen_trashed;
-extern int less_is_more;
-extern int quit_at_eof;
-extern char *every_first_cmd;
-
-/*
- * Scan an argument (either from the command line or from the
- * LESS environment variable) and process it.
- */
- public void
-scan_option(s)
- char *s;
-{
- register struct loption *o;
- register int optc;
- char *optname;
- char *printopt;
- char *str;
- int set_default;
- int lc;
- int err;
- PARG parg;
-
- if (s == NULL)
- return;
-
- /*
- * If we have a pending option which requires an argument,
- * handle it now.
- * This happens if the previous option was, for example, "-P"
- * without a following string. In that case, the current
- * option is simply the argument for the previous option.
- */
- if (pendopt != NULL)
- {
- switch (pendopt->otype & OTYPE)
- {
- case STRING:
- (*pendopt->ofunc)(INIT, s);
- break;
- case NUMBER:
- printopt = propt(pendopt->oletter);
- *(pendopt->ovar) = getnum(&s, printopt, (int*)NULL);
- break;
- }
- pendopt = NULL;
- return;
- }
-
- set_default = FALSE;
- optname = NULL;
-
- while (*s != '\0')
- {
- /*
- * Check some special cases first.
- */
- switch (optc = *s++)
- {
- case ' ':
- case '\t':
- case END_OPTION_STRING:
- continue;
- case '-':
- /*
- * "--" indicates an option name instead of a letter.
- */
- if (*s == '-')
- {
- optname = ++s;
- break;
- }
- /*
- * "-+" means set these options back to their defaults.
- * (They may have been set otherwise by previous
- * options.)
- */
- set_default = (*s == '+');
- if (set_default)
- s++;
- continue;
- case '+':
- /*
- * An option prefixed by a "+" is ungotten, so
- * that it is interpreted as less commands
- * processed at the start of the first input file.
- * "++" means process the commands at the start of
- * EVERY input file.
- */
- plusoption = TRUE;
- s = optstring(s, &str, propt('+'), NULL);
- if (*str == '+')
- every_first_cmd = save(++str);
- else
- ungetsc(str);
- continue;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- /*
- * Special "more" compatibility form "-<number>"
- * instead of -z<number> to set the scrolling
- * window size.
- */
- s--;
- optc = 'z';
- break;
- case 'n':
- if (less_is_more)
- optc = 'z';
- break;
- }
-
- /*
- * Not a special case.
- * Look up the option letter in the option table.
- */
- err = 0;
- if (optname == NULL)
- {
- printopt = propt(optc);
- lc = ASCII_IS_LOWER(optc);
- o = findopt(optc);
- } else
- {
- printopt = optname;
- lc = ASCII_IS_LOWER(optname[0]);
- o = findopt_name(&optname, NULL, &err);
- s = optname;
- optname = NULL;
- if (*s == '\0' || *s == ' ')
- {
- /*
- * The option name matches exactly.
- */
- ;
- } else if (*s == '=')
- {
- /*
- * The option name is followed by "=value".
- */
- if (o != NULL &&
- (o->otype & OTYPE) != STRING &&
- (o->otype & OTYPE) != NUMBER)
- {
- parg.p_string = printopt;
- error("The %s option should not be followed by =",
- &parg);
- quit(QUIT_ERROR);
- }
- s++;
- } else
- {
- /*
- * The specified name is longer than the
- * real option name.
- */
- o = NULL;
- }
- }
- if (o == NULL)
- {
- parg.p_string = printopt;
- if (err == OPT_AMBIG)
- error("%s is an ambiguous abbreviation (\"less --help\" for help)",
- &parg);
- else
- error("There is no %s option (\"less --help\" for help)",
- &parg);
- quit(QUIT_ERROR);
- }
-
- str = NULL;
- switch (o->otype & OTYPE)
- {
- case BOOL:
- if (set_default)
- *(o->ovar) = o->odefault;
- else
- *(o->ovar) = ! o->odefault;
- break;
- case TRIPLE:
- if (set_default)
- *(o->ovar) = o->odefault;
- else
- *(o->ovar) = flip_triple(o->odefault, lc);
- break;
- case STRING:
- if (*s == '\0')
- {
- /*
- * Set pendopt and return.
- * We will get the string next time
- * scan_option is called.
- */
- pendopt = o;
- return;
- }
- /*
- * Don't do anything here.
- * All processing of STRING options is done by
- * the handling function.
- */
- while (*s == ' ')
- s++;
- s = optstring(s, &str, printopt, o->odesc[1]);
- break;
- case NUMBER:
- if (*s == '\0')
- {
- pendopt = o;
- return;
- }
- *(o->ovar) = getnum(&s, printopt, (int*)NULL);
- break;
- }
- /*
- * If the option has a handling function, call it.
- */
- if (o->ofunc != NULL)
- (*o->ofunc)(INIT, str);
- }
-}
-
-/*
- * Toggle command line flags from within the program.
- * Used by the "-" and "_" commands.
- * how_toggle may be:
- * OPT_NO_TOGGLE just report the current setting, without changing it.
- * OPT_TOGGLE invert the current setting
- * OPT_UNSET set to the default value
- * OPT_SET set to the inverse of the default value
- */
- public void
-toggle_option(c, s, how_toggle)
- int c;
- char *s;
- int how_toggle;
-{
- register struct loption *o;
- register int num;
- int no_prompt;
- int err;
- PARG parg;
-
- no_prompt = (how_toggle & OPT_NO_PROMPT);
- how_toggle &= ~OPT_NO_PROMPT;
-
- /*
- * Look up the option letter in the option table.
- */
- o = findopt(c);
- if (o == NULL)
- {
- parg.p_string = propt(c);
- error("There is no %s option", &parg);
- return;
- }
-
- if (how_toggle == OPT_TOGGLE && (o->otype & NO_TOGGLE))
- {
- parg.p_string = propt(c);
- error("Cannot change the %s option", &parg);
- return;
- }
-
- if (how_toggle == OPT_NO_TOGGLE && (o->otype & NO_QUERY))
- {
- parg.p_string = propt(c);
- error("Cannot query the %s option", &parg);
- return;
- }
-
- /*
- * Check for something which appears to be a do_toggle
- * (because the "-" command was used), but really is not.
- * This could be a string option with no string, or
- * a number option with no number.
- */
- switch (o->otype & OTYPE)
- {
- case STRING:
- case NUMBER:
- if (how_toggle == OPT_TOGGLE && *s == '\0')
- how_toggle = OPT_NO_TOGGLE;
- break;
- }
-
-#if HILITE_SEARCH
- if (how_toggle != OPT_NO_TOGGLE && (o->otype & HL_REPAINT))
- repaint_hilite(0);
-#endif
-
- /*
- * Now actually toggle (change) the variable.
- */
- if (how_toggle != OPT_NO_TOGGLE)
- {
- switch (o->otype & OTYPE)
- {
- case BOOL:
- /*
- * Boolean.
- */
- switch (how_toggle)
- {
- case OPT_TOGGLE:
- *(o->ovar) = ! *(o->ovar);
- break;
- case OPT_UNSET:
- *(o->ovar) = o->odefault;
- break;
- case OPT_SET:
- *(o->ovar) = ! o->odefault;
- break;
- }
- break;
- case TRIPLE:
- /*
- * Triple:
- * If user gave the lower case letter, then switch
- * to 1 unless already 1, in which case make it 0.
- * If user gave the upper case letter, then switch
- * to 2 unless already 2, in which case make it 0.
- */
- switch (how_toggle)
- {
- case OPT_TOGGLE:
- *(o->ovar) = flip_triple(*(o->ovar),
- ASCII_IS_LOWER(c));
- break;
- case OPT_UNSET:
- *(o->ovar) = o->odefault;
- break;
- case OPT_SET:
- *(o->ovar) = flip_triple(o->odefault,
- ASCII_IS_LOWER(c));
- break;
- }
- break;
- case STRING:
- /*
- * String: don't do anything here.
- * The handling function will do everything.
- */
- switch (how_toggle)
- {
- case OPT_SET:
- case OPT_UNSET:
- error("Cannot use \"-+\" or \"--\" for a string option",
- NULL_PARG);
- return;
- }
- break;
- case NUMBER:
- /*
- * Number: set the variable to the given number.
- */
- switch (how_toggle)
- {
- case OPT_TOGGLE:
- num = getnum(&s, NULL, &err);
- if (!err)
- *(o->ovar) = num;
- break;
- case OPT_UNSET:
- *(o->ovar) = o->odefault;
- break;
- case OPT_SET:
- error("Can't use \"-!\" for a numeric option",
- NULL_PARG);
- return;
- }
- break;
- }
- }
-
- /*
- * Call the handling function for any special action
- * specific to this option.
- */
- if (o->ofunc != NULL)
- (*o->ofunc)((how_toggle==OPT_NO_TOGGLE) ? QUERY : TOGGLE, s);
-
-#if HILITE_SEARCH
- if (how_toggle != OPT_NO_TOGGLE && (o->otype & HL_REPAINT))
- chg_hilite();
-#endif
-
- if (!no_prompt)
- {
- /*
- * Print a message describing the new setting.
- */
- switch (o->otype & OTYPE)
- {
- case BOOL:
- case TRIPLE:
- /*
- * Print the odesc message.
- */
- error(o->odesc[*(o->ovar)], NULL_PARG);
- break;
- case NUMBER:
- /*
- * The message is in odesc[1] and has a %d for
- * the value of the variable.
- */
- parg.p_int = *(o->ovar);
- error(o->odesc[1], &parg);
- break;
- case STRING:
- /*
- * Message was already printed by the handling function.
- */
- break;
- }
- }
-
- if (how_toggle != OPT_NO_TOGGLE && (o->otype & REPAINT))
- screen_trashed = TRUE;
-}
-
-/*
- * "Toggle" a triple-valued option.
- */
- static int
-flip_triple(val, lc)
- int val;
- int lc;
-{
- if (lc)
- return ((val == OPT_ON) ? OPT_OFF : OPT_ON);
- else
- return ((val == OPT_ONPLUS) ? OPT_OFF : OPT_ONPLUS);
-}
-
-/*
- * Return a string suitable for printing as the "name" of an option.
- * For example, if the option letter is 'x', just return "-x".
- */
- static char *
-propt(c)
- int c;
-{
- static char buf[8];
-
- sprintf(buf, "-%s", prchar(c));
- return (buf);
-}
-
-/*
- * Determine if an option is a single character option (BOOL or TRIPLE),
- * or if it a multi-character option (NUMBER).
- */
- public int
-single_char_option(c)
- int c;
-{
- register struct loption *o;
-
- o = findopt(c);
- if (o == NULL)
- return (TRUE);
- return ((o->otype & (BOOL|TRIPLE|NOVAR|NO_TOGGLE)) != 0);
-}
-
-/*
- * Return the prompt to be used for a given option letter.
- * Only string and number valued options have prompts.
- */
- public char *
-opt_prompt(c)
- int c;
-{
- register struct loption *o;
-
- o = findopt(c);
- if (o == NULL || (o->otype & (STRING|NUMBER)) == 0)
- return (NULL);
- return (o->odesc[0]);
-}
-
-/*
- * Return whether or not there is a string option pending;
- * that is, if the previous option was a string-valued option letter
- * (like -P) without a following string.
- * In that case, the current option is taken to be the string for
- * the previous option.
- */
- public int
-isoptpending()
-{
- return (pendopt != NULL);
-}
-
-/*
- * Print error message about missing string.
- */
- static void
-nostring(printopt)
- char *printopt;
-{
- PARG parg;
- parg.p_string = printopt;
- error("Value is required after %s", &parg);
-}
-
-/*
- * Print error message if a STRING type option is not followed by a string.
- */
- public void
-nopendopt()
-{
- nostring(propt(pendopt->oletter));
-}
-
-/*
- * Scan to end of string or to an END_OPTION_STRING character.
- * In the latter case, replace the char with a null char.
- * Return a pointer to the remainder of the string, if any.
- */
- static char *
-optstring(s, p_str, printopt, validchars)
- char *s;
- char **p_str;
- char *printopt;
- char *validchars;
-{
- register char *p;
-
- if (*s == '\0')
- {
- nostring(printopt);
- quit(QUIT_ERROR);
- }
- *p_str = s;
- for (p = s; *p != '\0'; p++)
- {
- if (*p == END_OPTION_STRING ||
- (validchars != NULL && strchr(validchars, *p) == NULL))
- {
- switch (*p)
- {
- case END_OPTION_STRING:
- case ' ': case '\t': case '-':
- /* Replace the char with a null to terminate string. */
- *p++ = '\0';
- break;
- default:
- /* Cannot replace char; make a copy of the string. */
- *p_str = (char *) ecalloc(p-s+1, sizeof(char));
- strncpy(*p_str, s, p-s);
- (*p_str)[p-s] = '\0';
- break;
- }
- break;
- }
- }
- return (p);
-}
-
-/*
- */
- static int
-num_error(printopt, errp)
- char *printopt;
- int *errp;
-{
- PARG parg;
-
- if (errp != NULL)
- {
- *errp = TRUE;
- return (-1);
- }
- if (printopt != NULL)
- {
- parg.p_string = printopt;
- error("Number is required after %s", &parg);
- }
- quit(QUIT_ERROR);
- /* NOTREACHED */
- return (-1);
-}
-
-/*
- * Translate a string into a number.
- * Like atoi(), but takes a pointer to a char *, and updates
- * the char * to point after the translated number.
- */
- public int
-getnum(sp, printopt, errp)
- char **sp;
- char *printopt;
- int *errp;
-{
- register char *s;
- register int n;
- register int neg;
-
- s = skipsp(*sp);
- neg = FALSE;
- if (*s == '-')
- {
- neg = TRUE;
- s++;
- }
- if (*s < '0' || *s > '9')
- return (num_error(printopt, errp));
-
- n = 0;
- while (*s >= '0' && *s <= '9')
- n = 10 * n + *s++ - '0';
- *sp = s;
- if (errp != NULL)
- *errp = FALSE;
- if (neg)
- n = -n;
- return (n);
-}
-
-/*
- * Translate a string into a fraction, represented by the part of a
- * number which would follow a decimal point.
- * The value of the fraction is returned as parts per NUM_FRAC_DENOM.
- * That is, if "n" is returned, the fraction intended is n/NUM_FRAC_DENOM.
- */
- public long
-getfraction(sp, printopt, errp)
- char **sp;
- char *printopt;
- int *errp;
-{
- register char *s;
- long frac = 0;
- int fraclen = 0;
-
- s = skipsp(*sp);
- if (*s < '0' || *s > '9')
- return (num_error(printopt, errp));
-
- for ( ; *s >= '0' && *s <= '9'; s++)
- {
- frac = (frac * 10) + (*s - '0');
- fraclen++;
- }
- if (fraclen > NUM_LOG_FRAC_DENOM)
- while (fraclen-- > NUM_LOG_FRAC_DENOM)
- frac /= 10;
- else
- while (fraclen++ < NUM_LOG_FRAC_DENOM)
- frac *= 10;
- *sp = s;
- if (errp != NULL)
- *errp = FALSE;
- return (frac);
-}
-
-
-/*
- * Get the value of the -e flag.
- */
- public int
-get_quit_at_eof()
-{
- if (!less_is_more)
- return quit_at_eof;
- /* When less_is_more is set, the -e flag semantics are different. */
- return quit_at_eof ? OPT_ON : OPT_ONPLUS;
-}
diff --git a/contrib/less/option.h b/contrib/less/option.h
deleted file mode 100644
index 3ab7c8f..0000000
--- a/contrib/less/option.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-#define END_OPTION_STRING ('$')
-
-/*
- * Types of options.
- */
-#define BOOL 01 /* Boolean option: 0 or 1 */
-#define TRIPLE 02 /* Triple-valued option: 0, 1 or 2 */
-#define NUMBER 04 /* Numeric option */
-#define STRING 010 /* String-valued option */
-#define NOVAR 020 /* No associated variable */
-#define REPAINT 040 /* Repaint screen after toggling option */
-#define NO_TOGGLE 0100 /* Option cannot be toggled with "-" cmd */
-#define HL_REPAINT 0200 /* Repaint hilites after toggling option */
-#define NO_QUERY 0400 /* Option cannot be queried with "_" cmd */
-#define INIT_HANDLER 01000 /* Call option handler function at startup */
-
-#define OTYPE (BOOL|TRIPLE|NUMBER|STRING|NOVAR)
-
-/*
- * Argument to a handling function tells what type of activity:
- */
-#define INIT 0 /* Initialization (from command line) */
-#define QUERY 1 /* Query (from _ or - command) */
-#define TOGGLE 2 /* Change value (from - command) */
-
-/* Flag to toggle_option to specify how to "toggle" */
-#define OPT_NO_TOGGLE 0
-#define OPT_TOGGLE 1
-#define OPT_UNSET 2
-#define OPT_SET 3
-#define OPT_NO_PROMPT 0100
-
-/* Error code from findopt_name */
-#define OPT_AMBIG 1
-
-struct optname
-{
- char *oname; /* Long (GNU-style) option name */
- struct optname *onext; /* List of synonymous option names */
-};
-
-struct loption
-{
- char oletter; /* The controlling letter (a-z) */
- struct optname *onames; /* Long (GNU-style) option name */
- int otype; /* Type of the option */
- int odefault; /* Default value */
- int *ovar; /* Pointer to the associated variable */
- void (*ofunc)(); /* Pointer to special handling function */
- char *odesc[3]; /* Description of each value */
-};
-
diff --git a/contrib/less/opttbl.c b/contrib/less/opttbl.c
deleted file mode 100644
index 755a93d..0000000
--- a/contrib/less/opttbl.c
+++ /dev/null
@@ -1,602 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * The option table.
- */
-
-#include "less.h"
-#include "option.h"
-
-/*
- * Variables controlled by command line options.
- */
-public int quiet; /* Should we suppress the audible bell? */
-public int how_search; /* Where should forward searches start? */
-public int top_scroll; /* Repaint screen from top?
- (alternative is scroll from bottom) */
-public int pr_type; /* Type of prompt (short, medium, long) */
-public int bs_mode; /* How to process backspaces */
-public int know_dumb; /* Don't complain about dumb terminals */
-public int quit_at_eof; /* Quit after hitting end of file twice */
-public int quit_if_one_screen; /* Quit if EOF on first screen */
-public int squeeze; /* Squeeze multiple blank lines into one */
-public int tabstop; /* Tab settings */
-public int back_scroll; /* Repaint screen on backwards movement */
-public int forw_scroll; /* Repaint screen on forward movement */
-public int caseless; /* Do "caseless" searches */
-public int linenums; /* Use line numbers */
-public int autobuf; /* Automatically allocate buffers as needed */
-public int bufspace; /* Max buffer space per file (K) */
-public int ctldisp; /* Send control chars to screen untranslated */
-public int force_open; /* Open the file even if not regular file */
-public int swindow; /* Size of scrolling window */
-public int jump_sline; /* Screen line of "jump target" */
-public long jump_sline_fraction = -1;
-public int chopline; /* Truncate displayed lines at screen width */
-public int no_init; /* Disable sending ti/te termcap strings */
-public int no_keypad; /* Disable sending ks/ke termcap strings */
-public int twiddle; /* Show tildes after EOF */
-public int show_attn; /* Hilite first unread line */
-public int shift_count; /* Number of positions to shift horizontally */
-public int status_col; /* Display a status column */
-public int use_lessopen; /* Use the LESSOPEN filter */
-public int quit_on_intr; /* Quit on interrupt */
-public int follow_mode; /* F cmd Follows file desc or file name? */
-public int oldbot; /* Old bottom of screen behavior {{REMOVE}} */
-#if HILITE_SEARCH
-public int hilite_search; /* Highlight matched search patterns? */
-#endif
-
-public int less_is_more = 0; /* Make compatible with POSIX more */
-
-/*
- * Long option names.
- */
-static struct optname a_optname = { "search-skip-screen", NULL };
-static struct optname b_optname = { "buffers", NULL };
-static struct optname B__optname = { "auto-buffers", NULL };
-static struct optname c_optname = { "clear-screen", NULL };
-static struct optname d_optname = { "dumb", NULL };
-#if MSDOS_COMPILER
-static struct optname D__optname = { "color", NULL };
-#endif
-static struct optname e_optname = { "quit-at-eof", NULL };
-static struct optname f_optname = { "force", NULL };
-static struct optname F__optname = { "quit-if-one-screen", NULL };
-#if HILITE_SEARCH
-static struct optname g_optname = { "hilite-search", NULL };
-#endif
-static struct optname h_optname = { "max-back-scroll", NULL };
-static struct optname i_optname = { "ignore-case", NULL };
-static struct optname j_optname = { "jump-target", NULL };
-static struct optname J__optname = { "status-column", NULL };
-#if USERFILE
-static struct optname k_optname = { "lesskey-file", NULL };
-#endif
-static struct optname K__optname = { "quit-on-intr", NULL };
-static struct optname L__optname = { "no-lessopen", NULL };
-static struct optname m_optname = { "long-prompt", NULL };
-static struct optname n_optname = { "line-numbers", NULL };
-#if LOGFILE
-static struct optname o_optname = { "log-file", NULL };
-static struct optname O__optname = { "LOG-FILE", NULL };
-#endif
-static struct optname p_optname = { "pattern", NULL };
-static struct optname P__optname = { "prompt", NULL };
-static struct optname q2_optname = { "silent", NULL };
-static struct optname q_optname = { "quiet", &q2_optname };
-static struct optname r_optname = { "raw-control-chars", NULL };
-static struct optname s_optname = { "squeeze-blank-lines", NULL };
-static struct optname S__optname = { "chop-long-lines", NULL };
-#if TAGS
-static struct optname t_optname = { "tag", NULL };
-static struct optname T__optname = { "tag-file", NULL };
-#endif
-static struct optname u_optname = { "underline-special", NULL };
-static struct optname V__optname = { "version", NULL };
-static struct optname w_optname = { "hilite-unread", NULL };
-static struct optname x_optname = { "tabs", NULL };
-static struct optname X__optname = { "no-init", NULL };
-static struct optname y_optname = { "max-forw-scroll", NULL };
-static struct optname z_optname = { "window", NULL };
-static struct optname quote_optname = { "quotes", NULL };
-static struct optname tilde_optname = { "tilde", NULL };
-static struct optname query_optname = { "help", NULL };
-static struct optname pound_optname = { "shift", NULL };
-static struct optname keypad_optname = { "no-keypad", NULL };
-static struct optname oldbot_optname = { "old-bot", NULL };
-static struct optname follow_optname = { "follow-name", NULL };
-
-
-/*
- * Table of all options and their semantics.
- *
- * For BOOL and TRIPLE options, odesc[0], odesc[1], odesc[2] are
- * the description of the option when set to 0, 1 or 2, respectively.
- * For NUMBER options, odesc[0] is the prompt to use when entering
- * a new value, and odesc[1] is the description, which should contain
- * one %d which is replaced by the value of the number.
- * For STRING options, odesc[0] is the prompt to use when entering
- * a new value, and odesc[1], if not NULL, is the set of characters
- * that are valid in the string.
- */
-static struct loption option[] =
-{
- { 'a', &a_optname,
- BOOL, OPT_OFF, &how_search, NULL,
- {
- "Search includes displayed screen",
- "Search skips displayed screen",
- NULL
- }
- },
-
- { 'b', &b_optname,
- NUMBER|INIT_HANDLER, 64, &bufspace, opt_b,
- {
- "Max buffer space per file (K): ",
- "Max buffer space per file: %dK",
- NULL
- }
- },
- { 'B', &B__optname,
- BOOL, OPT_ON, &autobuf, NULL,
- {
- "Don't automatically allocate buffers",
- "Automatically allocate buffers when needed",
- NULL
- }
- },
- { 'c', &c_optname,
- TRIPLE, OPT_OFF, &top_scroll, NULL,
- {
- "Repaint by scrolling from bottom of screen",
- "Repaint by painting from top of screen",
- "Repaint by painting from top of screen"
- }
- },
- { 'd', &d_optname,
- BOOL|NO_TOGGLE, OPT_OFF, &know_dumb, NULL,
- {
- "Assume intelligent terminal",
- "Assume dumb terminal",
- NULL
- }
- },
-#if MSDOS_COMPILER
- { 'D', &D__optname,
- STRING|REPAINT|NO_QUERY, 0, NULL, opt_D,
- {
- "color desc: ",
- "Ddknsu0123456789.",
- NULL
- }
- },
-#endif
- { 'e', &e_optname,
- TRIPLE, OPT_OFF, &quit_at_eof, NULL,
- {
- "Don't quit at end-of-file",
- "Quit at end-of-file",
- "Quit immediately at end-of-file"
- }
- },
- { 'f', &f_optname,
- BOOL, OPT_OFF, &force_open, NULL,
- {
- "Open only regular files",
- "Open even non-regular files",
- NULL
- }
- },
- { 'F', &F__optname,
- BOOL, OPT_OFF, &quit_if_one_screen, NULL,
- {
- "Don't quit if end-of-file on first screen",
- "Quit if end-of-file on first screen",
- NULL
- }
- },
-#if HILITE_SEARCH
- { 'g', &g_optname,
- TRIPLE|HL_REPAINT, OPT_ONPLUS, &hilite_search, NULL,
- {
- "Don't highlight search matches",
- "Highlight matches for previous search only",
- "Highlight all matches for previous search pattern",
- }
- },
-#endif
- { 'h', &h_optname,
- NUMBER, -1, &back_scroll, NULL,
- {
- "Backwards scroll limit: ",
- "Backwards scroll limit is %d lines",
- NULL
- }
- },
- { 'i', &i_optname,
- TRIPLE|HL_REPAINT, OPT_OFF, &caseless, opt_i,
- {
- "Case is significant in searches",
- "Ignore case in searches",
- "Ignore case in searches and in patterns"
- }
- },
- { 'j', &j_optname,
- STRING, 0, NULL, opt_j,
- {
- "Target line: ",
- "0123456789.",
- NULL
- }
- },
- { 'J', &J__optname,
- BOOL|REPAINT, OPT_OFF, &status_col, NULL,
- {
- "Don't display a status column",
- "Display a status column",
- NULL
- }
- },
-#if USERFILE
- { 'k', &k_optname,
- STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_k,
- { NULL, NULL, NULL }
- },
-#endif
- { 'K', &K__optname,
- BOOL, OPT_OFF, &quit_on_intr, NULL,
- {
- "Interrupt (ctrl-C) returns to prompt",
- "Interrupt (ctrl-C) exits less",
- NULL
- }
- },
- { 'l', NULL,
- STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_l,
- { NULL, NULL, NULL }
- },
- { 'L', &L__optname,
- BOOL, OPT_ON, &use_lessopen, NULL,
- {
- "Don't use the LESSOPEN filter",
- "Use the LESSOPEN filter",
- NULL
- }
- },
- { 'm', &m_optname,
- TRIPLE, OPT_OFF, &pr_type, NULL,
- {
- "Short prompt",
- "Medium prompt",
- "Long prompt"
- }
- },
- { 'n', &n_optname,
- TRIPLE|REPAINT, OPT_ON, &linenums, NULL,
- {
- "Don't use line numbers",
- "Use line numbers",
- "Constantly display line numbers"
- }
- },
-#if LOGFILE
- { 'o', &o_optname,
- STRING, 0, NULL, opt_o,
- { "log file: ", NULL, NULL }
- },
- { 'O', &O__optname,
- STRING, 0, NULL, opt__O,
- { "Log file: ", NULL, NULL }
- },
-#endif
- { 'p', &p_optname,
- STRING|NO_TOGGLE|NO_QUERY, 0, NULL, opt_p,
- { NULL, NULL, NULL }
- },
- { 'P', &P__optname,
- STRING, 0, NULL, opt__P,
- { "prompt: ", NULL, NULL }
- },
- { 'q', &q_optname,
- TRIPLE, OPT_OFF, &quiet, NULL,
- {
- "Ring the bell for errors AND at eof/bof",
- "Ring the bell for errors but not at eof/bof",
- "Never ring the bell"
- }
- },
- { 'r', &r_optname,
- TRIPLE|REPAINT, OPT_OFF, &ctldisp, NULL,
- {
- "Display control characters as ^X",
- "Display control characters directly",
- "Display control characters directly, processing ANSI sequences"
- }
- },
- { 's', &s_optname,
- BOOL|REPAINT, OPT_OFF, &squeeze, NULL,
- {
- "Display all blank lines",
- "Squeeze multiple blank lines",
- NULL
- }
- },
- { 'S', &S__optname,
- BOOL|REPAINT, OPT_OFF, &chopline, NULL,
- {
- "Fold long lines",
- "Chop long lines",
- NULL
- }
- },
-#if TAGS
- { 't', &t_optname,
- STRING|NO_QUERY, 0, NULL, opt_t,
- { "tag: ", NULL, NULL }
- },
- { 'T', &T__optname,
- STRING, 0, NULL, opt__T,
- { "tags file: ", NULL, NULL }
- },
-#endif
- { 'u', &u_optname,
- TRIPLE|REPAINT, OPT_OFF, &bs_mode, NULL,
- {
- "Display underlined text in underline mode",
- "Backspaces cause overstrike",
- "Print backspace as ^H"
- }
- },
- { 'V', &V__optname,
- NOVAR, 0, NULL, opt__V,
- { NULL, NULL, NULL }
- },
- { 'w', &w_optname,
- TRIPLE|REPAINT, OPT_OFF, &show_attn, NULL,
- {
- "Don't highlight first unread line",
- "Highlight first unread line after forward-screen",
- "Highlight first unread line after any forward movement",
- }
- },
- { 'x', &x_optname,
- STRING|REPAINT, 0, NULL, opt_x,
- {
- "Tab stops: ",
- "0123456789,",
- NULL
- }
- },
- { 'X', &X__optname,
- BOOL|NO_TOGGLE, OPT_OFF, &no_init, NULL,
- {
- "Send init/deinit strings to terminal",
- "Don't use init/deinit strings",
- NULL
- }
- },
- { 'y', &y_optname,
- NUMBER, -1, &forw_scroll, NULL,
- {
- "Forward scroll limit: ",
- "Forward scroll limit is %d lines",
- NULL
- }
- },
- { 'z', &z_optname,
- NUMBER, -1, &swindow, NULL,
- {
- "Scroll window size: ",
- "Scroll window size is %d lines",
- NULL
- }
- },
- { '"', &quote_optname,
- STRING, 0, NULL, opt_quote,
- { "quotes: ", NULL, NULL }
- },
- { '~', &tilde_optname,
- BOOL|REPAINT, OPT_ON, &twiddle, NULL,
- {
- "Don't show tildes after end of file",
- "Show tildes after end of file",
- NULL
- }
- },
- { '?', &query_optname,
- NOVAR, 0, NULL, opt_query,
- { NULL, NULL, NULL }
- },
- { '#', &pound_optname,
- NUMBER, 0, &shift_count, NULL,
- {
- "Horizontal shift: ",
- "Horizontal shift %d positions",
- NULL
- }
- },
- { '.', &keypad_optname,
- BOOL|NO_TOGGLE, OPT_OFF, &no_keypad, NULL,
- {
- "Use keypad mode",
- "Don't use keypad mode",
- NULL
- }
- },
- { '.', &oldbot_optname,
- BOOL, OPT_OFF, &oldbot, NULL,
- {
- "Use new bottom of screen behavior",
- "Use old bottom of screen behavior",
- NULL
- }
- },
- { '.', &follow_optname,
- BOOL, FOLLOW_DESC, &follow_mode, NULL,
- {
- "F command Follows file descriptor",
- "F command Follows file name",
- NULL
- }
- },
- { '\0', NULL, NOVAR, 0, NULL, NULL, { NULL, NULL, NULL } }
-};
-
-
-/*
- * Initialize each option to its default value.
- */
- public void
-init_option()
-{
- register struct loption *o;
- char *p;
-
- p = lgetenv("LESS_IS_MORE");
- if (p != NULL && *p != '\0')
- less_is_more = 1;
-
- for (o = option; o->oletter != '\0'; o++)
- {
- /*
- * Set each variable to its default.
- */
- if (o->ovar != NULL)
- *(o->ovar) = o->odefault;
- if (o->otype & INIT_HANDLER)
- (*(o->ofunc))(INIT, (char *) NULL);
- }
-}
-
-/*
- * Find an option in the option table, given its option letter.
- */
- public struct loption *
-findopt(c)
- int c;
-{
- register struct loption *o;
-
- for (o = option; o->oletter != '\0'; o++)
- {
- if (o->oletter == c)
- return (o);
- if ((o->otype & TRIPLE) && ASCII_TO_UPPER(o->oletter) == c)
- return (o);
- }
- return (NULL);
-}
-
-/*
- *
- */
- static int
-is_optchar(c)
- char c;
-{
- if (ASCII_IS_UPPER(c))
- return 1;
- if (ASCII_IS_LOWER(c))
- return 1;
- if (c == '-')
- return 1;
- return 0;
-}
-
-/*
- * Find an option in the option table, given its option name.
- * p_optname is the (possibly partial) name to look for, and
- * is updated to point after the matched name.
- * p_oname if non-NULL is set to point to the full option name.
- */
- public struct loption *
-findopt_name(p_optname, p_oname, p_err)
- char **p_optname;
- char **p_oname;
- int *p_err;
-{
- char *optname = *p_optname;
- register struct loption *o;
- register struct optname *oname;
- register int len;
- int uppercase;
- struct loption *maxo = NULL;
- struct optname *maxoname = NULL;
- int maxlen = 0;
- int ambig = 0;
- int exact = 0;
-
- /*
- * Check all options.
- */
- for (o = option; o->oletter != '\0'; o++)
- {
- /*
- * Check all names for this option.
- */
- for (oname = o->onames; oname != NULL; oname = oname->onext)
- {
- /*
- * Try normal match first (uppercase == 0),
- * then, then if it's a TRIPLE option,
- * try uppercase match (uppercase == 1).
- */
- for (uppercase = 0; uppercase <= 1; uppercase++)
- {
- len = sprefix(optname, oname->oname, uppercase);
- if (len <= 0 || is_optchar(optname[len]))
- {
- /*
- * We didn't use all of the option name.
- */
- continue;
- }
- if (!exact && len == maxlen)
- /*
- * Already had a partial match,
- * and now there's another one that
- * matches the same length.
- */
- ambig = 1;
- else if (len > maxlen)
- {
- /*
- * Found a better match than
- * the one we had.
- */
- maxo = o;
- maxoname = oname;
- maxlen = len;
- ambig = 0;
- exact = (len == (int)strlen(oname->oname));
- }
- if (!(o->otype & TRIPLE))
- break;
- }
- }
- }
- if (ambig)
- {
- /*
- * Name matched more than one option.
- */
- if (p_err != NULL)
- *p_err = OPT_AMBIG;
- return (NULL);
- }
- *p_optname = optname + maxlen;
- if (p_oname != NULL)
- *p_oname = maxoname == NULL ? NULL : maxoname->oname;
- return (maxo);
-}
diff --git a/contrib/less/os.c b/contrib/less/os.c
deleted file mode 100644
index fef5f94..0000000
--- a/contrib/less/os.c
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Operating system dependent routines.
- *
- * Most of the stuff in here is based on Unix, but an attempt
- * has been made to make things work on other operating systems.
- * This will sometimes result in a loss of functionality, unless
- * someone rewrites code specifically for the new operating system.
- *
- * The makefile provides defines to decide whether various
- * Unix features are present.
- */
-
-#include "less.h"
-#include <signal.h>
-#include <setjmp.h>
-#if HAVE_TIME_H
-#include <time.h>
-#endif
-#if HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#if HAVE_VALUES_H
-#include <values.h>
-#endif
-
-#if HAVE_TIME_T
-#define time_type time_t
-#else
-#define time_type long
-#endif
-
-/*
- * BSD setjmp() saves (and longjmp() restores) the signal mask.
- * This costs a system call or two per setjmp(), so if possible we clear the
- * signal mask with sigsetmask(), and use _setjmp()/_longjmp() instead.
- * On other systems, setjmp() doesn't affect the signal mask and so
- * _setjmp() does not exist; we just use setjmp().
- */
-#if HAVE__SETJMP && HAVE_SIGSETMASK
-#define SET_JUMP _setjmp
-#define LONG_JUMP _longjmp
-#else
-#define SET_JUMP setjmp
-#define LONG_JUMP longjmp
-#endif
-
-public int reading;
-
-static jmp_buf read_label;
-
-extern int sigs;
-
-/*
- * Like read() system call, but is deliberately interruptible.
- * A call to intread() from a signal handler will interrupt
- * any pending iread().
- */
- public int
-iread(fd, buf, len)
- int fd;
- char *buf;
- unsigned int len;
-{
- register int n;
-
-start:
-#if MSDOS_COMPILER==WIN32C
- if (ABORT_SIGS())
- return (READ_INTR);
-#else
-#if MSDOS_COMPILER && MSDOS_COMPILER != DJGPPC
- if (kbhit())
- {
- int c;
-
- c = getch();
- if (c == '\003')
- return (READ_INTR);
- ungetch(c);
- }
-#endif
-#endif
- if (SET_JUMP(read_label))
- {
- /*
- * We jumped here from intread.
- */
- reading = 0;
-#if HAVE_SIGPROCMASK
- {
- sigset_t mask;
- sigemptyset(&mask);
- sigprocmask(SIG_SETMASK, &mask, NULL);
- }
-#else
-#if HAVE_SIGSETMASK
- sigsetmask(0);
-#else
-#ifdef _OSK
- sigmask(~0);
-#endif
-#endif
-#endif
- return (READ_INTR);
- }
-
- flush();
- reading = 1;
-#if MSDOS_COMPILER==DJGPPC
- if (isatty(fd))
- {
- /*
- * Don't try reading from a TTY until a character is
- * available, because that makes some background programs
- * believe DOS is busy in a way that prevents those
- * programs from working while "less" waits.
- */
- fd_set readfds;
-
- FD_ZERO(&readfds);
- FD_SET(fd, &readfds);
- if (select(fd+1, &readfds, 0, 0, 0) == -1)
- return (-1);
- }
-#endif
- n = read(fd, buf, len);
-#if 1
- /*
- * This is a kludge to workaround a problem on some systems
- * where terminating a remote tty connection causes read() to
- * start returning 0 forever, instead of -1.
- */
- {
- extern int ignore_eoi;
- if (!ignore_eoi)
- {
- static int consecutive_nulls = 0;
- if (n == 0)
- consecutive_nulls++;
- else
- consecutive_nulls = 0;
- if (consecutive_nulls > 20)
- quit(QUIT_ERROR);
- }
- }
-#endif
- reading = 0;
- if (n < 0)
- {
-#if HAVE_ERRNO
- /*
- * Certain values of errno indicate we should just retry the read.
- */
-#if MUST_DEFINE_ERRNO
- extern int errno;
-#endif
-#ifdef EINTR
- if (errno == EINTR)
- goto start;
-#endif
-#ifdef EAGAIN
- if (errno == EAGAIN)
- goto start;
-#endif
-#endif
- return (-1);
- }
- return (n);
-}
-
-/*
- * Interrupt a pending iread().
- */
- public void
-intread()
-{
- LONG_JUMP(read_label, 1);
-}
-
-/*
- * Return the current time.
- */
-#if HAVE_TIME
- public long
-get_time()
-{
- time_type t;
-
- time(&t);
- return (t);
-}
-#endif
-
-
-#if !HAVE_STRERROR
-/*
- * Local version of strerror, if not available from the system.
- */
- static char *
-strerror(err)
- int err;
-{
-#if HAVE_SYS_ERRLIST
- static char buf[16];
- extern char *sys_errlist[];
- extern int sys_nerr;
-
- if (err < sys_nerr)
- return sys_errlist[err];
- sprintf(buf, "Error %d", err);
- return buf;
-#else
- return ("cannot open");
-#endif
-}
-#endif
-
-/*
- * errno_message: Return an error message based on the value of "errno".
- */
- public char *
-errno_message(filename)
- char *filename;
-{
- register char *p;
- register char *m;
- int len;
-#if HAVE_ERRNO
-#if MUST_DEFINE_ERRNO
- extern int errno;
-#endif
- p = strerror(errno);
-#else
- p = "cannot open";
-#endif
- len = strlen(filename) + strlen(p) + 3;
- m = (char *) ecalloc(len, sizeof(char));
- SNPRINTF2(m, len, "%s: %s", filename, p);
- return (m);
-}
-
-/*
- * Return the ratio of two POSITIONS, as a percentage.
- * {{ Assumes a POSITION is a long int. }}
- */
- public int
-percentage(num, den)
- POSITION num, den;
-{
- POSITION num100 = num * 100;
-
- if (num100 / 100 == num)
- return (num100 / den);
- else
- return (num / (den / 100));
-}
-
-/*
- * Return the specified percentage of a POSITION.
- */
- public POSITION
-percent_pos(pos, percent, fraction)
- POSITION pos;
- int percent;
- long fraction;
-{
- /* Change percent (parts per 100) to perden (parts per NUM_FRAC_DENOM). */
- long perden = (percent * (NUM_FRAC_DENOM / 100)) + (fraction / 100);
- POSITION temp;
-
- if (perden == 0)
- return (0);
- temp = pos * perden; /* This might overflow. */
- if (temp / perden == pos)
- /* No overflow */
- return (temp / NUM_FRAC_DENOM);
- else
- /* Above calculation overflows;
- * use a method that is less precise but won't overflow. */
- return (perden * (pos / NUM_FRAC_DENOM));
-}
-
-#if !HAVE_STRCHR
-/*
- * strchr is used by regexp.c.
- */
- char *
-strchr(s, c)
- char *s;
- int c;
-{
- for ( ; *s != '\0'; s++)
- if (*s == c)
- return (s);
- if (c == '\0')
- return (s);
- return (NULL);
-}
-#endif
-
-#if !HAVE_MEMCPY
- VOID_POINTER
-memcpy(dst, src, len)
- VOID_POINTER dst;
- VOID_POINTER src;
- int len;
-{
- char *dstp = (char *) dst;
- char *srcp = (char *) src;
- int i;
-
- for (i = 0; i < len; i++)
- dstp[i] = srcp[i];
- return (dst);
-}
-#endif
-
-#ifdef _OSK_MWC32
-
-/*
- * This implements an ANSI-style intercept setup for Microware C 3.2
- */
- public int
-os9_signal(type, handler)
- int type;
- RETSIGTYPE (*handler)();
-{
- intercept(handler);
-}
-
-#include <sgstat.h>
-
- int
-isatty(f)
- int f;
-{
- struct sgbuf sgbuf;
-
- if (_gs_opt(f, &sgbuf) < 0)
- return -1;
- return (sgbuf.sg_class == 0);
-}
-
-#endif
diff --git a/contrib/less/output.c b/contrib/less/output.c
deleted file mode 100644
index 9c9d4ac..0000000
--- a/contrib/less/output.c
+++ /dev/null
@@ -1,615 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * High level routines dealing with the output to the screen.
- */
-
-#include "less.h"
-#if MSDOS_COMPILER==WIN32C
-#include "windows.h"
-#endif
-
-public int errmsgs; /* Count of messages displayed by error() */
-public int need_clr;
-public int final_attr;
-public int at_prompt;
-
-extern int sigs;
-extern int sc_width;
-extern int so_s_width, so_e_width;
-extern int screen_trashed;
-extern int any_display;
-extern int is_tty;
-extern int oldbot;
-
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
-extern int ctldisp;
-extern int nm_fg_color, nm_bg_color;
-extern int bo_fg_color, bo_bg_color;
-extern int ul_fg_color, ul_bg_color;
-extern int so_fg_color, so_bg_color;
-extern int bl_fg_color, bl_bg_color;
-#endif
-
-/*
- * Display the line which is in the line buffer.
- */
- public void
-put_line()
-{
- register int c;
- register int i;
- int a;
-
- if (ABORT_SIGS())
- {
- /*
- * Don't output if a signal is pending.
- */
- screen_trashed = 1;
- return;
- }
-
- final_attr = AT_NORMAL;
-
- for (i = 0; (c = gline(i, &a)) != '\0'; i++)
- {
- at_switch(a);
- final_attr = a;
- if (c == '\b')
- putbs();
- else
- putchr(c);
- }
-
- at_exit();
-}
-
-static char obuf[OUTBUF_SIZE];
-static char *ob = obuf;
-
-/*
- * Flush buffered output.
- *
- * If we haven't displayed any file data yet,
- * output messages on error output (file descriptor 2),
- * otherwise output on standard output (file descriptor 1).
- *
- * This has the desirable effect of producing all
- * error messages on error output if standard output
- * is directed to a file. It also does the same if
- * we never produce any real output; for example, if
- * the input file(s) cannot be opened. If we do
- * eventually produce output, code in edit() makes
- * sure these messages can be seen before they are
- * overwritten or scrolled away.
- */
- public void
-flush()
-{
- register int n;
- register int fd;
-
- n = ob - obuf;
- if (n == 0)
- return;
-#if MSDOS_COMPILER==WIN32C
- if (is_tty && any_display)
- {
- char *op;
- DWORD nwritten = 0;
- CONSOLE_SCREEN_BUFFER_INFO scr;
- int row;
- int col;
- int olen;
- extern HANDLE con_out;
-
- olen = ob - obuf;
- /*
- * There is a bug in Win32 WriteConsole() if we're
- * writing in the last cell with a different color.
- * To avoid color problems in the bottom line,
- * we scroll the screen manually, before writing.
- */
- GetConsoleScreenBufferInfo(con_out, &scr);
- col = scr.dwCursorPosition.X;
- row = scr.dwCursorPosition.Y;
- for (op = obuf; op < obuf + olen; op++)
- {
- if (*op == '\n')
- {
- col = 0;
- row++;
- } else if (*op == '\r')
- {
- col = 0;
- } else
- {
- col++;
- if (col >= sc_width)
- {
- col = 0;
- row++;
- }
- }
- }
- if (row > scr.srWindow.Bottom)
- win32_scroll_up(row - scr.srWindow.Bottom);
- WriteConsole(con_out, obuf, olen, &nwritten, NULL);
- ob = obuf;
- return;
- }
-#else
-#if MSDOS_COMPILER==MSOFTC
- if (is_tty && any_display)
- {
- *ob = '\0';
- _outtext(obuf);
- ob = obuf;
- return;
- }
-#else
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
- if (is_tty && any_display)
- {
- *ob = '\0';
- if (ctldisp != OPT_ONPLUS)
- cputs(obuf);
- else
- {
- /*
- * Look for SGR escape sequences, and convert them
- * to color commands. Replace bold, underline,
- * and italic escapes into colors specified via
- * the -D command-line option.
- */
- char *anchor, *p, *p_next;
- int buflen = ob - obuf;
- unsigned char fg, bg, norm_attr;
- /*
- * Only dark colors mentioned here, so that
- * bold has visible effect.
- */
- static enum COLORS screen_color[] = {
- BLACK, RED, GREEN, BROWN,
- BLUE, MAGENTA, CYAN, LIGHTGRAY
- };
-
- /* Normal text colors are used as baseline. */
- bg = nm_bg_color & 0xf;
- fg = nm_fg_color & 0xf;
- norm_attr = (bg << 4) | fg;
- for (anchor = p_next = obuf;
- (p_next = memchr (p_next, ESC,
- buflen - (p_next - obuf)))
- != NULL; )
- {
- p = p_next;
-
- /*
- * Handle the null escape sequence
- * (ESC-[m), which is used to restore
- * the original color.
- */
- if (p[1] == '[' && is_ansi_end(p[2]))
- {
- textattr(norm_attr);
- p += 3;
- anchor = p_next = p;
- continue;
- }
-
- if (p[1] == '[') /* "Esc-[" sequence */
- {
- /*
- * If some chars seen since
- * the last escape sequence,
- * write it out to the screen
- * using current text attributes.
- */
- if (p > anchor)
- {
- *p = '\0';
- cputs (anchor);
- *p = ESC;
- anchor = p;
- }
- p += 2;
- p_next = p;
- while (!is_ansi_end(*p))
- {
- char *q;
- long code = strtol(p, &q, 10);
-
- if (!*q)
- {
- /*
- * Incomplete sequence.
- * Leave it unprocessed
- * in the buffer.
- */
- int slop = q - anchor;
- strcpy(obuf, anchor);
- ob = &obuf[slop];
- return;
- }
-
- if (q == p
- || code > 49 || code < 0
- || (!is_ansi_end(*q)
- && *q != ';'))
- {
- p_next = q;
- break;
- }
- if (*q == ';')
- q++;
-
- switch (code)
- {
- case 1: /* bold on */
- fg = bo_fg_color;
- bg = bo_bg_color;
- break;
- case 3: /* italic on */
- fg = so_fg_color;
- bg = so_bg_color;
- break;
- case 4: /* underline on */
- fg = ul_fg_color;
- bg = ul_bg_color;
- break;
- case 8: /* concealed on */
- fg = (bg & 7) | 8;
- break;
- case 0: /* all attrs off */
- case 22:/* bold off */
- case 23:/* italic off */
- case 24:/* underline off */
- fg = nm_fg_color;
- bg = nm_bg_color;
- break;
- case 30: case 31: case 32:
- case 33: case 34: case 35:
- case 36: case 37:
- fg = (fg & 8) | (screen_color[code - 30]);
- break;
- case 39: /* default fg */
- fg = nm_fg_color;
- break;
- case 40: case 41: case 42:
- case 43: case 44: case 45:
- case 46: case 47:
- bg = (bg & 8) | (screen_color[code - 40]);
- break;
- case 49: /* default fg */
- bg = nm_bg_color;
- break;
- }
- p = q;
- }
- if (is_ansi_end(*p) && p > p_next)
- {
- bg &= 15;
- fg &= 15;
- textattr ((bg << 4)| fg);
- p_next = anchor = p + 1;
- } else
- break;
- } else
- p_next++;
- }
-
- /* Output what's left in the buffer. */
- cputs (anchor);
- }
- ob = obuf;
- return;
- }
-#endif
-#endif
-#endif
- fd = (any_display) ? 1 : 2;
- if (write(fd, obuf, n) != n)
- screen_trashed = 1;
- ob = obuf;
-}
-
-/*
- * Output a character.
- */
- public int
-putchr(c)
- int c;
-{
-#if 0 /* fake UTF-8 output for testing */
- extern int utf_mode;
- if (utf_mode)
- {
- static char ubuf[MAX_UTF_CHAR_LEN];
- static int ubuf_len = 0;
- static int ubuf_index = 0;
- if (ubuf_len == 0)
- {
- ubuf_len = utf_len(c);
- ubuf_index = 0;
- }
- ubuf[ubuf_index++] = c;
- if (ubuf_index < ubuf_len)
- return c;
- c = get_wchar(ubuf) & 0xFF;
- ubuf_len = 0;
- }
-#endif
- if (need_clr)
- {
- need_clr = 0;
- clear_bot();
- }
-#if MSDOS_COMPILER
- if (c == '\n' && is_tty)
- {
- /* remove_top(1); */
- putchr('\r');
- }
-#else
-#ifdef _OSK
- if (c == '\n' && is_tty) /* In OS-9, '\n' == 0x0D */
- putchr(0x0A);
-#endif
-#endif
- /*
- * Some versions of flush() write to *ob, so we must flush
- * when we are still one char from the end of obuf.
- */
- if (ob >= &obuf[sizeof(obuf)-1])
- flush();
- *ob++ = c;
- at_prompt = 0;
- return (c);
-}
-
-/*
- * Output a string.
- */
- public void
-putstr(s)
- register char *s;
-{
- while (*s != '\0')
- putchr(*s++);
-}
-
-
-/*
- * Convert an integral type to a string.
- */
-#define TYPE_TO_A_FUNC(funcname, type) \
-void funcname(num, buf) \
- type num; \
- char *buf; \
-{ \
- int neg = (num < 0); \
- char tbuf[INT_STRLEN_BOUND(num)+2]; \
- register char *s = tbuf + sizeof(tbuf); \
- if (neg) num = -num; \
- *--s = '\0'; \
- do { \
- *--s = (num % 10) + '0'; \
- } while ((num /= 10) != 0); \
- if (neg) *--s = '-'; \
- strcpy(buf, s); \
-}
-
-TYPE_TO_A_FUNC(postoa, POSITION)
-TYPE_TO_A_FUNC(linenumtoa, LINENUM)
-TYPE_TO_A_FUNC(inttoa, int)
-
-/*
- * Output an integer in a given radix.
- */
- static int
-iprint_int(num)
- int num;
-{
- char buf[INT_STRLEN_BOUND(num)];
-
- inttoa(num, buf);
- putstr(buf);
- return (strlen(buf));
-}
-
-/*
- * Output a line number in a given radix.
- */
- static int
-iprint_linenum(num)
- LINENUM num;
-{
- char buf[INT_STRLEN_BOUND(num)];
-
- linenumtoa(num, buf);
- putstr(buf);
- return (strlen(buf));
-}
-
-/*
- * This function implements printf-like functionality
- * using a more portable argument list mechanism than printf's.
- */
- static int
-less_printf(fmt, parg)
- register char *fmt;
- PARG *parg;
-{
- register char *s;
- register int col;
-
- col = 0;
- while (*fmt != '\0')
- {
- if (*fmt != '%')
- {
- putchr(*fmt++);
- col++;
- } else
- {
- ++fmt;
- switch (*fmt++)
- {
- case 's':
- s = parg->p_string;
- parg++;
- while (*s != '\0')
- {
- putchr(*s++);
- col++;
- }
- break;
- case 'd':
- col += iprint_int(parg->p_int);
- parg++;
- break;
- case 'n':
- col += iprint_linenum(parg->p_linenum);
- parg++;
- break;
- }
- }
- }
- return (col);
-}
-
-/*
- * Get a RETURN.
- * If some other non-trivial char is pressed, unget it, so it will
- * become the next command.
- */
- public void
-get_return()
-{
- int c;
-
-#if ONLY_RETURN
- while ((c = getchr()) != '\n' && c != '\r')
- bell();
-#else
- c = getchr();
- if (c != '\n' && c != '\r' && c != ' ' && c != READ_INTR)
- ungetcc(c);
-#endif
-}
-
-/*
- * Output a message in the lower left corner of the screen
- * and wait for carriage return.
- */
- public void
-error(fmt, parg)
- char *fmt;
- PARG *parg;
-{
- int col = 0;
- static char return_to_continue[] = " (press RETURN)";
-
- errmsgs++;
-
- if (any_display && is_tty)
- {
- if (!oldbot)
- squish_check();
- at_exit();
- clear_bot();
- at_enter(AT_STANDOUT);
- col += so_s_width;
- }
-
- col += less_printf(fmt, parg);
-
- if (!(any_display && is_tty))
- {
- putchr('\n');
- return;
- }
-
- putstr(return_to_continue);
- at_exit();
- col += sizeof(return_to_continue) + so_e_width;
-
- get_return();
- lower_left();
-
- if (col >= sc_width)
- /*
- * Printing the message has probably scrolled the screen.
- * {{ Unless the terminal doesn't have auto margins,
- * in which case we just hammered on the right margin. }}
- */
- screen_trashed = 1;
-
- flush();
-}
-
-static char intr_to_abort[] = "... (interrupt to abort)";
-
-/*
- * Output a message in the lower left corner of the screen
- * and don't wait for carriage return.
- * Usually used to warn that we are beginning a potentially
- * time-consuming operation.
- */
- public void
-ierror(fmt, parg)
- char *fmt;
- PARG *parg;
-{
- at_exit();
- clear_bot();
- at_enter(AT_STANDOUT);
- (void) less_printf(fmt, parg);
- putstr(intr_to_abort);
- at_exit();
- flush();
- need_clr = 1;
-}
-
-/*
- * Output a message in the lower left corner of the screen
- * and return a single-character response.
- */
- public int
-query(fmt, parg)
- char *fmt;
- PARG *parg;
-{
- register int c;
- int col = 0;
-
- if (any_display && is_tty)
- clear_bot();
-
- (void) less_printf(fmt, parg);
- c = getchr();
-
- if (!(any_display && is_tty))
- {
- putchr('\n');
- return (c);
- }
-
- lower_left();
- if (col >= sc_width)
- screen_trashed = 1;
- flush();
-
- return (c);
-}
diff --git a/contrib/less/pckeys.h b/contrib/less/pckeys.h
deleted file mode 100644
index 8683e86d..0000000
--- a/contrib/less/pckeys.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Definitions of keys on the PC.
- * Special (non-ASCII) keys on the PC send a two-byte sequence,
- * where the first byte is 0 and the second is as defined below.
- */
-#define PCK_SHIFT_TAB '\017'
-#define PCK_ALT_E '\022'
-#define PCK_CAPS_LOCK '\072'
-#define PCK_F1 '\073'
-#define PCK_NUM_LOCK '\105'
-#define PCK_HOME '\107'
-#define PCK_UP '\110'
-#define PCK_PAGEUP '\111'
-#define PCK_LEFT '\113'
-#define PCK_RIGHT '\115'
-#define PCK_END '\117'
-#define PCK_DOWN '\120'
-#define PCK_PAGEDOWN '\121'
-#define PCK_INSERT '\122'
-#define PCK_DELETE '\123'
-#define PCK_CTL_LEFT '\163'
-#define PCK_CTL_RIGHT '\164'
-#define PCK_CTL_DELETE '\223'
diff --git a/contrib/less/position.c b/contrib/less/position.c
deleted file mode 100644
index da737dc..0000000
--- a/contrib/less/position.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines dealing with the "position" table.
- * This is a table which tells the position (in the input file) of the
- * first char on each currently displayed line.
- *
- * {{ The position table is scrolled by moving all the entries.
- * Would be better to have a circular table
- * and just change a couple of pointers. }}
- */
-
-#include "less.h"
-#include "position.h"
-
-static POSITION *table = NULL; /* The position table */
-static int table_size;
-
-extern int sc_width, sc_height;
-
-/*
- * Return the starting file position of a line displayed on the screen.
- * The line may be specified as a line number relative to the top
- * of the screen, but is usually one of these special cases:
- * the top (first) line on the screen
- * the second line on the screen
- * the bottom line on the screen
- * the line after the bottom line on the screen
- */
- public POSITION
-position(where)
- int where;
-{
- switch (where)
- {
- case BOTTOM:
- where = sc_height - 2;
- break;
- case BOTTOM_PLUS_ONE:
- where = sc_height - 1;
- break;
- case MIDDLE:
- where = (sc_height - 1) / 2;
- }
- return (table[where]);
-}
-
-/*
- * Add a new file position to the bottom of the position table.
- */
- public void
-add_forw_pos(pos)
- POSITION pos;
-{
- register int i;
-
- /*
- * Scroll the position table up.
- */
- for (i = 1; i < sc_height; i++)
- table[i-1] = table[i];
- table[sc_height - 1] = pos;
-}
-
-/*
- * Add a new file position to the top of the position table.
- */
- public void
-add_back_pos(pos)
- POSITION pos;
-{
- register int i;
-
- /*
- * Scroll the position table down.
- */
- for (i = sc_height - 1; i > 0; i--)
- table[i] = table[i-1];
- table[0] = pos;
-}
-
-/*
- * Initialize the position table, done whenever we clear the screen.
- */
- public void
-pos_clear()
-{
- register int i;
-
- for (i = 0; i < sc_height; i++)
- table[i] = NULL_POSITION;
-}
-
-/*
- * Allocate or reallocate the position table.
- */
- public void
-pos_init()
-{
- struct scrpos scrpos;
-
- if (sc_height <= table_size)
- return;
- /*
- * If we already have a table, remember the first line in it
- * before we free it, so we can copy that line to the new table.
- */
- if (table != NULL)
- {
- get_scrpos(&scrpos);
- free((char*)table);
- } else
- scrpos.pos = NULL_POSITION;
- table = (POSITION *) ecalloc(sc_height, sizeof(POSITION));
- table_size = sc_height;
- pos_clear();
- if (scrpos.pos != NULL_POSITION)
- table[scrpos.ln-1] = scrpos.pos;
-}
-
-/*
- * See if the byte at a specified position is currently on the screen.
- * Check the position table to see if the position falls within its range.
- * Return the position table entry if found, -1 if not.
- */
- public int
-onscreen(pos)
- POSITION pos;
-{
- register int i;
-
- if (pos < table[0])
- return (-1);
- for (i = 1; i < sc_height; i++)
- if (pos < table[i])
- return (i-1);
- return (-1);
-}
-
-/*
- * See if the entire screen is empty.
- */
- public int
-empty_screen()
-{
- return (empty_lines(0, sc_height-1));
-}
-
- public int
-empty_lines(s, e)
- int s;
- int e;
-{
- register int i;
-
- for (i = s; i <= e; i++)
- if (table[i] != NULL_POSITION)
- return (0);
- return (1);
-}
-
-/*
- * Get the current screen position.
- * The screen position consists of both a file position and
- * a screen line number where the file position is placed on the screen.
- * Normally the screen line number is 0, but if we are positioned
- * such that the top few lines are empty, we may have to set
- * the screen line to a number > 0.
- */
- public void
-get_scrpos(scrpos)
- struct scrpos *scrpos;
-{
- register int i;
-
- /*
- * Find the first line on the screen which has something on it,
- * and return the screen line number and the file position.
- */
- for (i = 0; i < sc_height; i++)
- if (table[i] != NULL_POSITION)
- {
- scrpos->ln = i+1;
- scrpos->pos = table[i];
- return;
- }
- /*
- * The screen is empty.
- */
- scrpos->pos = NULL_POSITION;
-}
-
-/*
- * Adjust a screen line number to be a simple positive integer
- * in the range { 0 .. sc_height-2 }.
- * (The bottom line, sc_height-1, is reserved for prompts, etc.)
- * The given "sline" may be in the range { 1 .. sc_height-1 }
- * to refer to lines relative to the top of the screen (starting from 1),
- * or it may be in { -1 .. -(sc_height-1) } to refer to lines
- * relative to the bottom of the screen.
- */
- public int
-adjsline(sline)
- int sline;
-{
- /*
- * Negative screen line number means
- * relative to the bottom of the screen.
- */
- if (sline < 0)
- sline += sc_height;
- /*
- * Can't be less than 1 or greater than sc_height-1.
- */
- if (sline <= 0)
- sline = 1;
- if (sline >= sc_height)
- sline = sc_height - 1;
- /*
- * Return zero-based line number, not one-based.
- */
- return (sline-1);
-}
diff --git a/contrib/less/position.h b/contrib/less/position.h
deleted file mode 100644
index 863707b..0000000
--- a/contrib/less/position.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Include file for interfacing to position.c modules.
- */
-#define TOP (0)
-#define TOP_PLUS_ONE (1)
-#define BOTTOM (-1)
-#define BOTTOM_PLUS_ONE (-2)
-#define MIDDLE (-3)
diff --git a/contrib/less/prompt.c b/contrib/less/prompt.c
deleted file mode 100644
index 67b5ddc..0000000
--- a/contrib/less/prompt.c
+++ /dev/null
@@ -1,584 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Prompting and other messages.
- * There are three flavors of prompts, SHORT, MEDIUM and LONG,
- * selected by the -m/-M options.
- * There is also the "equals message", printed by the = command.
- * A prompt is a message composed of various pieces, such as the
- * name of the file being viewed, the percentage into the file, etc.
- */
-
-#include "less.h"
-#include "position.h"
-
-extern int pr_type;
-extern int hit_eof;
-extern int new_file;
-extern int sc_width;
-extern int so_s_width, so_e_width;
-extern int linenums;
-extern int hshift;
-extern int sc_height;
-extern int jump_sline;
-extern int less_is_more;
-extern IFILE curr_ifile;
-#if EDITOR
-extern char *editor;
-extern char *editproto;
-#endif
-
-/*
- * Prototypes for the three flavors of prompts.
- * These strings are expanded by pr_expand().
- */
-static constant char s_proto[] =
- "?n?f%f .?m(%T %i of %m) ..?e(END) ?x- Next\\: %x..%t";
-static constant char m_proto[] =
- "?n?f%f .?m(%T %i of %m) ..?e(END) ?x- Next\\: %x.:?pB%pB\\%:byte %bB?s/%s...%t";
-static constant char M_proto[] =
- "?f%f .?n?m(%T %i of %m) ..?ltlines %lt-%lb?L/%L. :byte %bB?s/%s. .?e(END) ?x- Next\\: %x.:?pB%pB\\%..%t";
-static constant char e_proto[] =
- "?f%f .?m(%T %i of %m) .?ltlines %lt-%lb?L/%L. .byte %bB?s/%s. ?e(END) :?pB%pB\\%..%t";
-static constant char h_proto[] =
- "HELP -- ?eEND -- Press g to see it again:Press RETURN for more., or q when done";
-static constant char w_proto[] =
- "Waiting for data";
-static constant char more_proto[] =
- "--More--(?eEND ?x- Next\\: %x.:?pB%pB\\%:byte %bB?s/%s...%t)";
-
-public char *prproto[3];
-public char constant *eqproto = e_proto;
-public char constant *hproto = h_proto;
-public char constant *wproto = w_proto;
-
-static char message[PROMPT_SIZE];
-static char *mp;
-
-/*
- * Initialize the prompt prototype strings.
- */
- public void
-init_prompt()
-{
- prproto[0] = save(s_proto);
- prproto[1] = save(less_is_more ? more_proto : m_proto);
- prproto[2] = save(M_proto);
- eqproto = save(e_proto);
- hproto = save(h_proto);
- wproto = save(w_proto);
-}
-
-/*
- * Append a string to the end of the message.
- */
- static void
-ap_str(s)
- char *s;
-{
- int len;
-
- len = strlen(s);
- if (mp + len >= message + PROMPT_SIZE)
- len = message + PROMPT_SIZE - mp - 1;
- strncpy(mp, s, len);
- mp += len;
- *mp = '\0';
-}
-
-/*
- * Append a character to the end of the message.
- */
- static void
-ap_char(c)
- char c;
-{
- char buf[2];
-
- buf[0] = c;
- buf[1] = '\0';
- ap_str(buf);
-}
-
-/*
- * Append a POSITION (as a decimal integer) to the end of the message.
- */
- static void
-ap_pos(pos)
- POSITION pos;
-{
- char buf[INT_STRLEN_BOUND(pos) + 2];
-
- postoa(pos, buf);
- ap_str(buf);
-}
-
-/*
- * Append a line number to the end of the message.
- */
- static void
-ap_linenum(linenum)
- LINENUM linenum;
-{
- char buf[INT_STRLEN_BOUND(linenum) + 2];
-
- linenumtoa(linenum, buf);
- ap_str(buf);
-}
-
-/*
- * Append an integer to the end of the message.
- */
- static void
-ap_int(num)
- int num;
-{
- char buf[INT_STRLEN_BOUND(num) + 2];
-
- inttoa(num, buf);
- ap_str(buf);
-}
-
-/*
- * Append a question mark to the end of the message.
- */
- static void
-ap_quest()
-{
- ap_str("?");
-}
-
-/*
- * Return the "current" byte offset in the file.
- */
- static POSITION
-curr_byte(where)
- int where;
-{
- POSITION pos;
-
- pos = position(where);
- while (pos == NULL_POSITION && where >= 0 && where < sc_height-1)
- pos = position(++where);
- if (pos == NULL_POSITION)
- pos = ch_length();
- return (pos);
-}
-
-/*
- * Return the value of a prototype conditional.
- * A prototype string may include conditionals which consist of a
- * question mark followed by a single letter.
- * Here we decode that letter and return the appropriate boolean value.
- */
- static int
-cond(c, where)
- char c;
- int where;
-{
- POSITION len;
-
- switch (c)
- {
- case 'a': /* Anything in the message yet? */
- return (mp > message);
- case 'b': /* Current byte offset known? */
- return (curr_byte(where) != NULL_POSITION);
- case 'c':
- return (hshift != 0);
- case 'e': /* At end of file? */
- return (hit_eof);
- case 'f': /* Filename known? */
- return (strcmp(get_filename(curr_ifile), "-") != 0);
- case 'l': /* Line number known? */
- case 'd': /* Same as l */
- return (linenums);
- case 'L': /* Final line number known? */
- case 'D': /* Final page number known? */
- return (linenums && ch_length() != NULL_POSITION);
- case 'm': /* More than one file? */
-#if TAGS
- return (ntags() ? (ntags() > 1) : (nifile() > 1));
-#else
- return (nifile() > 1);
-#endif
- case 'n': /* First prompt in a new file? */
-#if TAGS
- return (ntags() ? 1 : new_file);
-#else
- return (new_file);
-#endif
- case 'p': /* Percent into file (bytes) known? */
- return (curr_byte(where) != NULL_POSITION &&
- ch_length() > 0);
- case 'P': /* Percent into file (lines) known? */
- return (currline(where) != 0 &&
- (len = ch_length()) > 0 &&
- find_linenum(len) != 0);
- case 's': /* Size of file known? */
- case 'B':
- return (ch_length() != NULL_POSITION);
- case 'x': /* Is there a "next" file? */
-#if TAGS
- if (ntags())
- return (0);
-#endif
- return (next_ifile(curr_ifile) != NULL_IFILE);
- }
- return (0);
-}
-
-/*
- * Decode a "percent" prototype character.
- * A prototype string may include various "percent" escapes;
- * that is, a percent sign followed by a single letter.
- * Here we decode that letter and take the appropriate action,
- * usually by appending something to the message being built.
- */
- static void
-protochar(c, where, iseditproto)
- int c;
- int where;
- int iseditproto;
-{
- POSITION pos;
- POSITION len;
- int n;
- LINENUM linenum;
- LINENUM last_linenum;
- IFILE h;
-
-#undef PAGE_NUM
-#define PAGE_NUM(linenum) ((((linenum) - 1) / (sc_height - 1)) + 1)
-
- switch (c)
- {
- case 'b': /* Current byte offset */
- pos = curr_byte(where);
- if (pos != NULL_POSITION)
- ap_pos(pos);
- else
- ap_quest();
- break;
- case 'c':
- ap_int(hshift);
- break;
- case 'd': /* Current page number */
- linenum = currline(where);
- if (linenum > 0 && sc_height > 1)
- ap_linenum(PAGE_NUM(linenum));
- else
- ap_quest();
- break;
- case 'D': /* Final page number */
- /* Find the page number of the last byte in the file (len-1). */
- len = ch_length();
- if (len == NULL_POSITION)
- ap_quest();
- else if (len == 0)
- /* An empty file has no pages. */
- ap_linenum(0);
- else
- {
- linenum = find_linenum(len - 1);
- if (linenum <= 0)
- ap_quest();
- else
- ap_linenum(PAGE_NUM(linenum));
- }
- break;
-#if EDITOR
- case 'E': /* Editor name */
- ap_str(editor);
- break;
-#endif
- case 'f': /* File name */
- ap_str(get_filename(curr_ifile));
- break;
- case 'i': /* Index into list of files */
-#if TAGS
- if (ntags())
- ap_int(curr_tag());
- else
-#endif
- ap_int(get_index(curr_ifile));
- break;
- case 'l': /* Current line number */
- linenum = currline(where);
- if (linenum != 0)
- ap_linenum(linenum);
- else
- ap_quest();
- break;
- case 'L': /* Final line number */
- len = ch_length();
- if (len == NULL_POSITION || len == ch_zero() ||
- (linenum = find_linenum(len)) <= 0)
- ap_quest();
- else
- ap_linenum(linenum-1);
- break;
- case 'm': /* Number of files */
-#if TAGS
- n = ntags();
- if (n)
- ap_int(n);
- else
-#endif
- ap_int(nifile());
- break;
- case 'p': /* Percent into file (bytes) */
- pos = curr_byte(where);
- len = ch_length();
- if (pos != NULL_POSITION && len > 0)
- ap_int(percentage(pos,len));
- else
- ap_quest();
- break;
- case 'P': /* Percent into file (lines) */
- linenum = currline(where);
- if (linenum == 0 ||
- (len = ch_length()) == NULL_POSITION || len == ch_zero() ||
- (last_linenum = find_linenum(len)) <= 0)
- ap_quest();
- else
- ap_int(percentage(linenum, last_linenum));
- break;
- case 's': /* Size of file */
- case 'B':
- len = ch_length();
- if (len != NULL_POSITION)
- ap_pos(len);
- else
- ap_quest();
- break;
- case 't': /* Truncate trailing spaces in the message */
- while (mp > message && mp[-1] == ' ')
- mp--;
- break;
- case 'T': /* Type of list */
-#if TAGS
- if (ntags())
- ap_str("tag");
- else
-#endif
- ap_str("file");
- break;
- case 'x': /* Name of next file */
- h = next_ifile(curr_ifile);
- if (h != NULL_IFILE)
- ap_str(get_filename(h));
- else
- ap_quest();
- break;
- }
-}
-
-/*
- * Skip a false conditional.
- * When a false condition is found (either a false IF or the ELSE part
- * of a true IF), this routine scans the prototype string to decide
- * where to resume parsing the string.
- * We must keep track of nested IFs and skip them properly.
- */
- static char *
-skipcond(p)
- register char *p;
-{
- register int iflevel;
-
- /*
- * We came in here after processing a ? or :,
- * so we start nested one level deep.
- */
- iflevel = 1;
-
- for (;;) switch (*++p)
- {
- case '?':
- /*
- * Start of a nested IF.
- */
- iflevel++;
- break;
- case ':':
- /*
- * Else.
- * If this matches the IF we came in here with,
- * then we're done.
- */
- if (iflevel == 1)
- return (p);
- break;
- case '.':
- /*
- * Endif.
- * If this matches the IF we came in here with,
- * then we're done.
- */
- if (--iflevel == 0)
- return (p);
- break;
- case '\\':
- /*
- * Backslash escapes the next character.
- */
- ++p;
- break;
- case '\0':
- /*
- * Whoops. Hit end of string.
- * This is a malformed conditional, but just treat it
- * as if all active conditionals ends here.
- */
- return (p-1);
- }
- /*NOTREACHED*/
-}
-
-/*
- * Decode a char that represents a position on the screen.
- */
- static char *
-wherechar(p, wp)
- char *p;
- int *wp;
-{
- switch (*p)
- {
- case 'b': case 'd': case 'l': case 'p': case 'P':
- switch (*++p)
- {
- case 't': *wp = TOP; break;
- case 'm': *wp = MIDDLE; break;
- case 'b': *wp = BOTTOM; break;
- case 'B': *wp = BOTTOM_PLUS_ONE; break;
- case 'j': *wp = adjsline(jump_sline); break;
- default: *wp = TOP; p--; break;
- }
- }
- return (p);
-}
-
-/*
- * Construct a message based on a prototype string.
- */
- public char *
-pr_expand(proto, maxwidth)
- char *proto;
- int maxwidth;
-{
- register char *p;
- register int c;
- int where;
-
- mp = message;
-
- if (*proto == '\0')
- return ("");
-
- for (p = proto; *p != '\0'; p++)
- {
- switch (*p)
- {
- default: /* Just put the character in the message */
- ap_char(*p);
- break;
- case '\\': /* Backslash escapes the next character */
- p++;
- ap_char(*p);
- break;
- case '?': /* Conditional (IF) */
- if ((c = *++p) == '\0')
- --p;
- else
- {
- where = 0;
- p = wherechar(p, &where);
- if (!cond(c, where))
- p = skipcond(p);
- }
- break;
- case ':': /* ELSE */
- p = skipcond(p);
- break;
- case '.': /* ENDIF */
- break;
- case '%': /* Percent escape */
- if ((c = *++p) == '\0')
- --p;
- else
- {
- where = 0;
- p = wherechar(p, &where);
- protochar(c, where,
-#if EDITOR
- (proto == editproto));
-#else
- 0);
-#endif
-
- }
- break;
- }
- }
-
- if (mp == message)
- return ("");
- if (maxwidth > 0 && mp >= message + maxwidth)
- {
- /*
- * Message is too long.
- * Return just the final portion of it.
- */
- return (mp - maxwidth);
- }
- return (message);
-}
-
-/*
- * Return a message suitable for printing by the "=" command.
- */
- public char *
-eq_message()
-{
- return (pr_expand(eqproto, 0));
-}
-
-/*
- * Return a prompt.
- * This depends on the prompt type (SHORT, MEDIUM, LONG), etc.
- * If we can't come up with an appropriate prompt, return NULL
- * and the caller will prompt with a colon.
- */
- public char *
-pr_string()
-{
- char *prompt;
- int type;
-
- type = (!less_is_more) ? pr_type : pr_type ? 0 : 1;
- prompt = pr_expand((ch_getflags() & CH_HELPFILE) ?
- hproto : prproto[type],
- sc_width-so_s_width-so_e_width-2);
- new_file = 0;
- return (prompt);
-}
-
-/*
- * Return a message suitable for printing while waiting in the F command.
- */
- public char *
-wait_message()
-{
- return (pr_expand(wproto, sc_width-so_s_width-so_e_width-2));
-}
diff --git a/contrib/less/regexp.c b/contrib/less/regexp.c
deleted file mode 100644
index 77ab611..0000000
--- a/contrib/less/regexp.c
+++ /dev/null
@@ -1,1250 +0,0 @@
-/*
- * regcomp and regexec -- regsub and regerror are elsewhere
- *
- * Copyright (c) 1986 by University of Toronto.
- * Written by Henry Spencer. Not derived from licensed software.
- *
- * Permission is granted to anyone to use this software for any
- * purpose on any computer system, and to redistribute it freely,
- * subject to the following restrictions:
- *
- * 1. The author is not responsible for the consequences of use of
- * this software, no matter how awful, even if they arise
- * from defects in it.
- *
- * 2. The origin of this software must not be misrepresented, either
- * by explicit claim or by omission.
- *
- * 3. Altered versions must be plainly marked as such, and must not
- * be misrepresented as being the original software.
- *
- * Beware that some of this code is subtly aware of the way operator
- * precedence is structured in regular expressions. Serious changes in
- * regular-expression syntax might require a total rethink.
- *
- * *** NOTE: this code has been altered slightly for use in Tcl. ***
- * Slightly modified by David MacKenzie to undo most of the changes for TCL.
- * Added regexec2 with notbol parameter. -- 4/19/99 Mark Nudelman
- */
-
-#include "less.h"
-#if HAVE_STDIO_H
-#include <stdio.h>
-#endif
-#if HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#if HAVE_STRING_H
-#include <string.h>
-#endif
-#include "regexp.h"
-
-/*
- * The "internal use only" fields in regexp.h are present to pass info from
- * compile to execute that permits the execute phase to run lots faster on
- * simple cases. They are:
- *
- * regstart char that must begin a match; '\0' if none obvious
- * reganch is the match anchored (at beginning-of-line only)?
- * regmust string (pointer into program) that match must include, or NULL
- * regmlen length of regmust string
- *
- * Regstart and reganch permit very fast decisions on suitable starting points
- * for a match, cutting down the work a lot. Regmust permits fast rejection
- * of lines that cannot possibly match. The regmust tests are costly enough
- * that regcomp() supplies a regmust only if the r.e. contains something
- * potentially expensive (at present, the only such thing detected is * or +
- * at the start of the r.e., which can involve a lot of backup). Regmlen is
- * supplied because the test in regexec() needs it and regcomp() is
- * computing it anyway.
- */
-
-/*
- * Structure for regexp "program". This is essentially a linear encoding
- * of a nondeterministic finite-state machine (aka syntax charts or
- * "railroad normal form" in parsing technology). Each node is an opcode
- * plus a "next" pointer, possibly plus an operand. "Next" pointers of
- * all nodes except BRANCH implement concatenation; a "next" pointer with
- * a BRANCH on both ends of it is connecting two alternatives. (Here we
- * have one of the subtle syntax dependencies: an individual BRANCH (as
- * opposed to a collection of them) is never concatenated with anything
- * because of operator precedence.) The operand of some types of node is
- * a literal string; for others, it is a node leading into a sub-FSM. In
- * particular, the operand of a BRANCH node is the first node of the branch.
- * (NB this is *not* a tree structure: the tail of the branch connects
- * to the thing following the set of BRANCHes.) The opcodes are:
- */
-
-/* definition number opnd? meaning */
-#undef EOL
-#define END 0 /* no End of program. */
-#define BOL 1 /* no Match "" at beginning of line. */
-#define EOL 2 /* no Match "" at end of line. */
-#define ANY 3 /* no Match any one character. */
-#define ANYOF 4 /* str Match any character in this string. */
-#define ANYBUT 5 /* str Match any character not in this string. */
-#define BRANCH 6 /* node Match this alternative, or the next... */
-#define BACK 7 /* no Match "", "next" ptr points backward. */
-#define EXACTLY 8 /* str Match this string. */
-#define NOTHING 9 /* no Match empty string. */
-#define STAR 10 /* node Match this (simple) thing 0 or more times. */
-#define PLUS 11 /* node Match this (simple) thing 1 or more times. */
-#define OPEN 20 /* no Mark this point in input as start of #n. */
- /* OPEN+1 is number 1, etc. */
-#define CLOSE 30 /* no Analogous to OPEN. */
-
-/*
- * Opcode notes:
- *
- * BRANCH The set of branches constituting a single choice are hooked
- * together with their "next" pointers, since precedence prevents
- * anything being concatenated to any individual branch. The
- * "next" pointer of the last BRANCH in a choice points to the
- * thing following the whole choice. This is also where the
- * final "next" pointer of each individual branch points; each
- * branch starts with the operand node of a BRANCH node.
- *
- * BACK Normal "next" pointers all implicitly point forward; BACK
- * exists to make loop structures possible.
- *
- * STAR,PLUS '?', and complex '*' and '+', are implemented as circular
- * BRANCH structures using BACK. Simple cases (one character
- * per match) are implemented with STAR and PLUS for speed
- * and to minimize recursive plunges.
- *
- * OPEN,CLOSE ...are numbered at compile time.
- */
-
-/*
- * A node is one char of opcode followed by two chars of "next" pointer.
- * "Next" pointers are stored as two 8-bit pieces, high order first. The
- * value is a positive offset from the opcode of the node containing it.
- * An operand, if any, simply follows the node. (Note that much of the
- * code generation knows about this implicit relationship.)
- *
- * Using two bytes for the "next" pointer is vast overkill for most things,
- * but allows patterns to get big without disasters.
- */
-#define OP(p) (*(p))
-#define NEXT(p) (((*((p)+1)&0377)<<8) + (*((p)+2)&0377))
-#define OPERAND(p) ((p) + 3)
-
-/*
- * See regmagic.h for one further detail of program structure.
- */
-
-
-/*
- * Utility definitions.
- */
-#ifndef CHARBITS
-#define UCHARAT(p) ((int)*(unsigned char *)(p))
-#else
-#define UCHARAT(p) ((int)*(p)&CHARBITS)
-#endif
-
-#define FAIL(m) { regerror(m); return(NULL); }
-#define ISMULT(c) ((c) == '*' || (c) == '+' || (c) == '?')
-#define META "^$.[()|?+*\\"
-
-/*
- * Flags to be passed up and down.
- */
-#define HASWIDTH 01 /* Known never to match null string. */
-#define SIMPLE 02 /* Simple enough to be STAR/PLUS operand. */
-#define SPSTART 04 /* Starts with * or +. */
-#define WORST 0 /* Worst case. */
-
-/*
- * Global work variables for regcomp().
- */
-static char *regparse; /* Input-scan pointer. */
-static int regnpar; /* () count. */
-static char regdummy;
-static char *regcode; /* Code-emit pointer; &regdummy = don't. */
-static long regsize; /* Code size. */
-
-/*
- * The first byte of the regexp internal "program" is actually this magic
- * number; the start node begins in the second byte.
- */
-#define MAGIC 0234
-
-
-/*
- * Forward declarations for regcomp()'s friends.
- */
-#ifndef STATIC
-#define STATIC static
-#endif
-STATIC char *reg();
-STATIC char *regbranch();
-STATIC char *regpiece();
-STATIC char *regatom();
-STATIC char *regnode();
-STATIC char *regnext();
-STATIC void regc();
-STATIC void reginsert();
-STATIC void regtail();
-STATIC void regoptail();
-#ifdef STRCSPN
-STATIC int strcspn();
-#endif
-
-/*
- - regcomp - compile a regular expression into internal code
- *
- * We can't allocate space until we know how big the compiled form will be,
- * but we can't compile it (and thus know how big it is) until we've got a
- * place to put the code. So we cheat: we compile it twice, once with code
- * generation turned off and size counting turned on, and once "for real".
- * This also means that we don't allocate space until we are sure that the
- * thing really will compile successfully, and we never have to move the
- * code and thus invalidate pointers into it. (Note that it has to be in
- * one piece because free() must be able to free it all.)
- *
- * Beware that the optimization-preparation code in here knows about some
- * of the structure of the compiled regexp.
- */
-regexp *
-regcomp(exp)
-char *exp;
-{
- register regexp *r;
- register char *scan;
- register char *longest;
- register int len;
- int flags;
-
- if (exp == NULL)
- FAIL("NULL argument");
-
- /* First pass: determine size, legality. */
- regparse = exp;
- regnpar = 1;
- regsize = 0L;
- regcode = &regdummy;
- regc(MAGIC);
- if (reg(0, &flags) == NULL)
- return(NULL);
-
- /* Small enough for pointer-storage convention? */
- if (regsize >= 32767L) /* Probably could be 65535L. */
- FAIL("regexp too big");
-
- /* Allocate space. */
- r = (regexp *)malloc(sizeof(regexp) + (unsigned)regsize);
- if (r == NULL)
- FAIL("out of space");
-
- /* Second pass: emit code. */
- regparse = exp;
- regnpar = 1;
- regcode = r->program;
- regc(MAGIC);
- if (reg(0, &flags) == NULL)
- return(NULL);
-
- /* Dig out information for optimizations. */
- r->regstart = '\0'; /* Worst-case defaults. */
- r->reganch = 0;
- r->regmust = NULL;
- r->regmlen = 0;
- scan = r->program+1; /* First BRANCH. */
- if (OP(regnext(scan)) == END) { /* Only one top-level choice. */
- scan = OPERAND(scan);
-
- /* Starting-point info. */
- if (OP(scan) == EXACTLY)
- r->regstart = *OPERAND(scan);
- else if (OP(scan) == BOL)
- r->reganch++;
-
- /*
- * If there's something expensive in the r.e., find the
- * longest literal string that must appear and make it the
- * regmust. Resolve ties in favor of later strings, since
- * the regstart check works with the beginning of the r.e.
- * and avoiding duplication strengthens checking. Not a
- * strong reason, but sufficient in the absence of others.
- */
- if (flags&SPSTART) {
- longest = NULL;
- len = 0;
- for (; scan != NULL; scan = regnext(scan))
- if (OP(scan) == EXACTLY && ((int) strlen(OPERAND(scan))) >= len) {
- longest = OPERAND(scan);
- len = strlen(OPERAND(scan));
- }
- r->regmust = longest;
- r->regmlen = len;
- }
- }
-
- return(r);
-}
-
-/*
- - reg - regular expression, i.e. main body or parenthesized thing
- *
- * Caller must absorb opening parenthesis.
- *
- * Combining parenthesis handling with the base level of regular expression
- * is a trifle forced, but the need to tie the tails of the branches to what
- * follows makes it hard to avoid.
- */
-static char *
-reg(paren, flagp)
-int paren; /* Parenthesized? */
-int *flagp;
-{
- register char *ret;
- register char *br;
- register char *ender;
- register int parno = 0;
- int flags;
-
- *flagp = HASWIDTH; /* Tentatively. */
-
- /* Make an OPEN node, if parenthesized. */
- if (paren) {
- if (regnpar >= NSUBEXP)
- FAIL("too many ()");
- parno = regnpar;
- regnpar++;
- ret = regnode(OPEN+parno);
- } else
- ret = NULL;
-
- /* Pick up the branches, linking them together. */
- br = regbranch(&flags);
- if (br == NULL)
- return(NULL);
- if (ret != NULL)
- regtail(ret, br); /* OPEN -> first. */
- else
- ret = br;
- if (!(flags&HASWIDTH))
- *flagp &= ~HASWIDTH;
- *flagp |= flags&SPSTART;
- while (*regparse == '|') {
- regparse++;
- br = regbranch(&flags);
- if (br == NULL)
- return(NULL);
- regtail(ret, br); /* BRANCH -> BRANCH. */
- if (!(flags&HASWIDTH))
- *flagp &= ~HASWIDTH;
- *flagp |= flags&SPSTART;
- }
-
- /* Make a closing node, and hook it on the end. */
- ender = regnode((paren) ? CLOSE+parno : END);
- regtail(ret, ender);
-
- /* Hook the tails of the branches to the closing node. */
- for (br = ret; br != NULL; br = regnext(br))
- regoptail(br, ender);
-
- /* Check for proper termination. */
- if (paren && *regparse++ != ')') {
- FAIL("unmatched ()");
- } else if (!paren && *regparse != '\0') {
- if (*regparse == ')') {
- FAIL("unmatched ()");
- } else
- FAIL("junk on end"); /* "Can't happen". */
- /* NOTREACHED */
- }
-
- return(ret);
-}
-
-/*
- - regbranch - one alternative of an | operator
- *
- * Implements the concatenation operator.
- */
-static char *
-regbranch(flagp)
-int *flagp;
-{
- register char *ret;
- register char *chain;
- register char *latest;
- int flags;
-
- *flagp = WORST; /* Tentatively. */
-
- ret = regnode(BRANCH);
- chain = NULL;
- while (*regparse != '\0' && *regparse != '|' && *regparse != ')') {
- latest = regpiece(&flags);
- if (latest == NULL)
- return(NULL);
- *flagp |= flags&HASWIDTH;
- if (chain == NULL) /* First piece. */
- *flagp |= flags&SPSTART;
- else
- regtail(chain, latest);
- chain = latest;
- }
- if (chain == NULL) /* Loop ran zero times. */
- (void) regnode(NOTHING);
-
- return(ret);
-}
-
-/*
- - regpiece - something followed by possible [*+?]
- *
- * Note that the branching code sequences used for ? and the general cases
- * of * and + are somewhat optimized: they use the same NOTHING node as
- * both the endmarker for their branch list and the body of the last branch.
- * It might seem that this node could be dispensed with entirely, but the
- * endmarker role is not redundant.
- */
-static char *
-regpiece(flagp)
-int *flagp;
-{
- register char *ret;
- register char op;
- register char *next;
- int flags;
-
- ret = regatom(&flags);
- if (ret == NULL)
- return(NULL);
-
- op = *regparse;
- if (!ISMULT(op)) {
- *flagp = flags;
- return(ret);
- }
-
- if (!(flags&HASWIDTH) && op != '?')
- FAIL("*+ operand could be empty");
- *flagp = (op != '+') ? (WORST|SPSTART) : (WORST|HASWIDTH);
-
- if (op == '*' && (flags&SIMPLE))
- reginsert(STAR, ret);
- else if (op == '*') {
- /* Emit x* as (x&|), where & means "self". */
- reginsert(BRANCH, ret); /* Either x */
- regoptail(ret, regnode(BACK)); /* and loop */
- regoptail(ret, ret); /* back */
- regtail(ret, regnode(BRANCH)); /* or */
- regtail(ret, regnode(NOTHING)); /* null. */
- } else if (op == '+' && (flags&SIMPLE))
- reginsert(PLUS, ret);
- else if (op == '+') {
- /* Emit x+ as x(&|), where & means "self". */
- next = regnode(BRANCH); /* Either */
- regtail(ret, next);
- regtail(regnode(BACK), ret); /* loop back */
- regtail(next, regnode(BRANCH)); /* or */
- regtail(ret, regnode(NOTHING)); /* null. */
- } else if (op == '?') {
- /* Emit x? as (x|) */
- reginsert(BRANCH, ret); /* Either x */
- regtail(ret, regnode(BRANCH)); /* or */
- next = regnode(NOTHING); /* null. */
- regtail(ret, next);
- regoptail(ret, next);
- }
- regparse++;
- if (ISMULT(*regparse))
- FAIL("nested *?+");
-
- return(ret);
-}
-
-/*
- - regatom - the lowest level
- *
- * Optimization: gobbles an entire sequence of ordinary characters so that
- * it can turn them into a single node, which is smaller to store and
- * faster to run. Backslashed characters are exceptions, each becoming a
- * separate node; the code is simpler that way and it's not worth fixing.
- */
-static char *
-regatom(flagp)
-int *flagp;
-{
- register char *ret;
- int flags;
-
- *flagp = WORST; /* Tentatively. */
-
- switch (*regparse++) {
- case '^':
- ret = regnode(BOL);
- break;
- case '$':
- ret = regnode(EOL);
- break;
- case '.':
- ret = regnode(ANY);
- *flagp |= HASWIDTH|SIMPLE;
- break;
- case '[': {
- register int clss;
- register int classend;
-
- if (*regparse == '^') { /* Complement of range. */
- ret = regnode(ANYBUT);
- regparse++;
- } else
- ret = regnode(ANYOF);
- if (*regparse == ']' || *regparse == '-')
- regc(*regparse++);
- while (*regparse != '\0' && *regparse != ']') {
- if (*regparse == '-') {
- regparse++;
- if (*regparse == ']' || *regparse == '\0')
- regc('-');
- else {
- clss = UCHARAT(regparse-2)+1;
- classend = UCHARAT(regparse);
- if (clss > classend+1)
- FAIL("invalid [] range");
- for (; clss <= classend; clss++)
- regc(clss);
- regparse++;
- }
- } else
- regc(*regparse++);
- }
- regc('\0');
- if (*regparse != ']')
- FAIL("unmatched []");
- regparse++;
- *flagp |= HASWIDTH|SIMPLE;
- }
- break;
- case '(':
- ret = reg(1, &flags);
- if (ret == NULL)
- return(NULL);
- *flagp |= flags&(HASWIDTH|SPSTART);
- break;
- case '\0':
- case '|':
- case ')':
- FAIL("internal urp"); /* Supposed to be caught earlier. */
- /* NOTREACHED */
- break;
- case '?':
- case '+':
- case '*':
- FAIL("?+* follows nothing");
- /* NOTREACHED */
- break;
- case '\\':
- if (*regparse == '\0')
- FAIL("trailing \\");
- ret = regnode(EXACTLY);
- regc(*regparse++);
- regc('\0');
- *flagp |= HASWIDTH|SIMPLE;
- break;
- default: {
- register int len;
- register char ender;
-
- regparse--;
- len = strcspn(regparse, META);
- if (len <= 0)
- FAIL("internal disaster");
- ender = *(regparse+len);
- if (len > 1 && ISMULT(ender))
- len--; /* Back off clear of ?+* operand. */
- *flagp |= HASWIDTH;
- if (len == 1)
- *flagp |= SIMPLE;
- ret = regnode(EXACTLY);
- while (len > 0) {
- regc(*regparse++);
- len--;
- }
- regc('\0');
- }
- break;
- }
-
- return(ret);
-}
-
-/*
- - regnode - emit a node
- */
-static char * /* Location. */
-regnode(op)
-char op;
-{
- register char *ret;
- register char *ptr;
-
- ret = regcode;
- if (ret == &regdummy) {
- regsize += 3;
- return(ret);
- }
-
- ptr = ret;
- *ptr++ = op;
- *ptr++ = '\0'; /* Null "next" pointer. */
- *ptr++ = '\0';
- regcode = ptr;
-
- return(ret);
-}
-
-/*
- - regc - emit (if appropriate) a byte of code
- */
-static void
-regc(b)
-char b;
-{
- if (regcode != &regdummy)
- *regcode++ = b;
- else
- regsize++;
-}
-
-/*
- - reginsert - insert an operator in front of already-emitted operand
- *
- * Means relocating the operand.
- */
-static void
-reginsert(op, opnd)
-char op;
-char *opnd;
-{
- register char *src;
- register char *dst;
- register char *place;
-
- if (regcode == &regdummy) {
- regsize += 3;
- return;
- }
-
- src = regcode;
- regcode += 3;
- dst = regcode;
- while (src > opnd)
- *--dst = *--src;
-
- place = opnd; /* Op node, where operand used to be. */
- *place++ = op;
- *place++ = '\0';
- *place++ = '\0';
-}
-
-/*
- - regtail - set the next-pointer at the end of a node chain
- */
-static void
-regtail(p, val)
-char *p;
-char *val;
-{
- register char *scan;
- register char *temp;
- register int offset;
-
- if (p == &regdummy)
- return;
-
- /* Find last node. */
- scan = p;
- for (;;) {
- temp = regnext(scan);
- if (temp == NULL)
- break;
- scan = temp;
- }
-
- if (OP(scan) == BACK)
- offset = scan - val;
- else
- offset = val - scan;
- *(scan+1) = (offset>>8)&0377;
- *(scan+2) = offset&0377;
-}
-
-/*
- - regoptail - regtail on operand of first argument; nop if operandless
- */
-static void
-regoptail(p, val)
-char *p;
-char *val;
-{
- /* "Operandless" and "op != BRANCH" are synonymous in practice. */
- if (p == NULL || p == &regdummy || OP(p) != BRANCH)
- return;
- regtail(OPERAND(p), val);
-}
-
-/*
- * regexec and friends
- */
-
-/*
- * Global work variables for regexec().
- */
-static char *reginput; /* String-input pointer. */
-static char *regbol; /* Beginning of input, for ^ check. */
-static char **regstartp; /* Pointer to startp array. */
-static char **regendp; /* Ditto for endp. */
-
-/*
- * Forwards.
- */
-STATIC int regtry();
-STATIC int regmatch();
-STATIC int regrepeat();
-
-#ifdef DEBUG
-int regnarrate = 0;
-void regdump();
-STATIC char *regprop();
-#endif
-
-/*
- - regexec - match a regexp against a string
- */
-int
-regexec2(prog, string, notbol)
-register regexp *prog;
-register char *string;
-int notbol;
-{
- register char *s;
-
- /* Be paranoid... */
- if (prog == NULL || string == NULL) {
- regerror("NULL parameter");
- return(0);
- }
-
- /* Check validity of program. */
- if (UCHARAT(prog->program) != MAGIC) {
- regerror("corrupted program");
- return(0);
- }
-
- /* If there is a "must appear" string, look for it. */
- if (prog->regmust != NULL) {
- s = string;
- while ((s = strchr(s, prog->regmust[0])) != NULL) {
- if (strncmp(s, prog->regmust, prog->regmlen) == 0)
- break; /* Found it. */
- s++;
- }
- if (s == NULL) /* Not present. */
- return(0);
- }
-
- /* Mark beginning of line for ^ . */
- if (notbol)
- regbol = NULL;
- else
- regbol = string;
-
- /* Simplest case: anchored match need be tried only once. */
- if (prog->reganch)
- return(regtry(prog, string));
-
- /* Messy cases: unanchored match. */
- s = string;
- if (prog->regstart != '\0')
- /* We know what char it must start with. */
- while ((s = strchr(s, prog->regstart)) != NULL) {
- if (regtry(prog, s))
- return(1);
- s++;
- }
- else
- /* We don't -- general case. */
- do {
- if (regtry(prog, s))
- return(1);
- } while (*s++ != '\0');
-
- /* Failure. */
- return(0);
-}
-
-int
-regexec(prog, string)
-register regexp *prog;
-register char *string;
-{
- return regexec2(prog, string, 0);
-}
-
-/*
- - regtry - try match at specific point
- */
-static int /* 0 failure, 1 success */
-regtry(prog, string)
-regexp *prog;
-char *string;
-{
- register int i;
- register char **sp;
- register char **ep;
-
- reginput = string;
- regstartp = prog->startp;
- regendp = prog->endp;
-
- sp = prog->startp;
- ep = prog->endp;
- for (i = NSUBEXP; i > 0; i--) {
- *sp++ = NULL;
- *ep++ = NULL;
- }
- if (regmatch(prog->program + 1)) {
- prog->startp[0] = string;
- prog->endp[0] = reginput;
- return(1);
- } else
- return(0);
-}
-
-/*
- - regmatch - main matching routine
- *
- * Conceptually the strategy is simple: check to see whether the current
- * node matches, call self recursively to see whether the rest matches,
- * and then act accordingly. In practice we make some effort to avoid
- * recursion, in particular by going through "ordinary" nodes (that don't
- * need to know whether the rest of the match failed) by a loop instead of
- * by recursion.
- */
-static int /* 0 failure, 1 success */
-regmatch(prog)
-char *prog;
-{
- register char *scan; /* Current node. */
- char *next; /* Next node. */
-
- scan = prog;
-#ifdef DEBUG
- if (scan != NULL && regnarrate)
- fprintf(stderr, "%s(\n", regprop(scan));
-#endif
- while (scan != NULL) {
-#ifdef DEBUG
- if (regnarrate)
- fprintf(stderr, "%s...\n", regprop(scan));
-#endif
- next = regnext(scan);
-
- switch (OP(scan)) {
- case BOL:
- if (reginput != regbol)
- return(0);
- break;
- case EOL:
- if (*reginput != '\0')
- return(0);
- break;
- case ANY:
- if (*reginput == '\0')
- return(0);
- reginput++;
- break;
- case EXACTLY: {
- register int len;
- register char *opnd;
-
- opnd = OPERAND(scan);
- /* Inline the first character, for speed. */
- if (*opnd != *reginput)
- return(0);
- len = strlen(opnd);
- if (len > 1 && strncmp(opnd, reginput, len) != 0)
- return(0);
- reginput += len;
- }
- break;
- case ANYOF:
- if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) == NULL)
- return(0);
- reginput++;
- break;
- case ANYBUT:
- if (*reginput == '\0' || strchr(OPERAND(scan), *reginput) != NULL)
- return(0);
- reginput++;
- break;
- case NOTHING:
- break;
- case BACK:
- break;
- case OPEN+1:
- case OPEN+2:
- case OPEN+3:
- case OPEN+4:
- case OPEN+5:
- case OPEN+6:
- case OPEN+7:
- case OPEN+8:
- case OPEN+9: {
- register int no;
- register char *save;
-
- no = OP(scan) - OPEN;
- save = reginput;
-
- if (regmatch(next)) {
- /*
- * Don't set startp if some later
- * invocation of the same parentheses
- * already has.
- */
- if (regstartp[no] == NULL)
- regstartp[no] = save;
- return(1);
- } else
- return(0);
- }
- /* NOTREACHED */
- break;
- case CLOSE+1:
- case CLOSE+2:
- case CLOSE+3:
- case CLOSE+4:
- case CLOSE+5:
- case CLOSE+6:
- case CLOSE+7:
- case CLOSE+8:
- case CLOSE+9: {
- register int no;
- register char *save;
-
- no = OP(scan) - CLOSE;
- save = reginput;
-
- if (regmatch(next)) {
- /*
- * Don't set endp if some later
- * invocation of the same parentheses
- * already has.
- */
- if (regendp[no] == NULL)
- regendp[no] = save;
- return(1);
- } else
- return(0);
- }
- /* NOTREACHED */
- break;
- case BRANCH: {
- register char *save;
-
- if (OP(next) != BRANCH) /* No choice. */
- next = OPERAND(scan); /* Avoid recursion. */
- else {
- do {
- save = reginput;
- if (regmatch(OPERAND(scan)))
- return(1);
- reginput = save;
- scan = regnext(scan);
- } while (scan != NULL && OP(scan) == BRANCH);
- return(0);
- /* NOTREACHED */
- }
- }
- /* NOTREACHED */
- break;
- case STAR:
- case PLUS: {
- register char nextch;
- register int no;
- register char *save;
- register int min;
-
- /*
- * Lookahead to avoid useless match attempts
- * when we know what character comes next.
- */
- nextch = '\0';
- if (OP(next) == EXACTLY)
- nextch = *OPERAND(next);
- min = (OP(scan) == STAR) ? 0 : 1;
- save = reginput;
- no = regrepeat(OPERAND(scan));
- while (no >= min) {
- /* If it could work, try it. */
- if (nextch == '\0' || *reginput == nextch)
- if (regmatch(next))
- return(1);
- /* Couldn't or didn't -- back up. */
- no--;
- reginput = save + no;
- }
- return(0);
- }
- /* NOTREACHED */
- break;
- case END:
- return(1); /* Success! */
- /* NOTREACHED */
- break;
- default:
- regerror("memory corruption");
- return(0);
- /* NOTREACHED */
- break;
- }
-
- scan = next;
- }
-
- /*
- * We get here only if there's trouble -- normally "case END" is
- * the terminating point.
- */
- regerror("corrupted pointers");
- return(0);
-}
-
-/*
- - regrepeat - repeatedly match something simple, report how many
- */
-static int
-regrepeat(p)
-char *p;
-{
- register int count = 0;
- register char *scan;
- register char *opnd;
-
- scan = reginput;
- opnd = OPERAND(p);
- switch (OP(p)) {
- case ANY:
- count = strlen(scan);
- scan += count;
- break;
- case EXACTLY:
- while (*opnd == *scan) {
- count++;
- scan++;
- }
- break;
- case ANYOF:
- while (*scan != '\0' && strchr(opnd, *scan) != NULL) {
- count++;
- scan++;
- }
- break;
- case ANYBUT:
- while (*scan != '\0' && strchr(opnd, *scan) == NULL) {
- count++;
- scan++;
- }
- break;
- default: /* Oh dear. Called inappropriately. */
- regerror("internal foulup");
- count = 0; /* Best compromise. */
- break;
- }
- reginput = scan;
-
- return(count);
-}
-
-/*
- - regnext - dig the "next" pointer out of a node
- */
-static char *
-regnext(p)
-register char *p;
-{
- register int offset;
-
- if (p == &regdummy)
- return(NULL);
-
- offset = NEXT(p);
- if (offset == 0)
- return(NULL);
-
- if (OP(p) == BACK)
- return(p-offset);
- else
- return(p+offset);
-}
-
-#ifdef DEBUG
-
-STATIC char *regprop();
-
-/*
- - regdump - dump a regexp onto stdout in vaguely comprehensible form
- */
-void
-regdump(r)
-regexp *r;
-{
- register char *s;
- register char op = EXACTLY; /* Arbitrary non-END op. */
- register char *next;
-
-
- s = r->program + 1;
- while (op != END) { /* While that wasn't END last time... */
- op = OP(s);
- printf("%2d%s", s-r->program, regprop(s)); /* Where, what. */
- next = regnext(s);
- if (next == NULL) /* Next ptr. */
- printf("(0)");
- else
- printf("(%d)", (s-r->program)+(next-s));
- s += 3;
- if (op == ANYOF || op == ANYBUT || op == EXACTLY) {
- /* Literal string, where present. */
- while (*s != '\0') {
- putchar(*s);
- s++;
- }
- s++;
- }
- putchar('\n');
- }
-
- /* Header fields of interest. */
- if (r->regstart != '\0')
- printf("start `%c' ", r->regstart);
- if (r->reganch)
- printf("anchored ");
- if (r->regmust != NULL)
- printf("must have \"%s\"", r->regmust);
- printf("\n");
-}
-
-/*
- - regprop - printable representation of opcode
- */
-static char *
-regprop(op)
-char *op;
-{
- register char *p;
- static char buf[50];
-
- (void) strcpy(buf, ":");
-
- switch (OP(op)) {
- case BOL:
- p = "BOL";
- break;
- case EOL:
- p = "EOL";
- break;
- case ANY:
- p = "ANY";
- break;
- case ANYOF:
- p = "ANYOF";
- break;
- case ANYBUT:
- p = "ANYBUT";
- break;
- case BRANCH:
- p = "BRANCH";
- break;
- case EXACTLY:
- p = "EXACTLY";
- break;
- case NOTHING:
- p = "NOTHING";
- break;
- case BACK:
- p = "BACK";
- break;
- case END:
- p = "END";
- break;
- case OPEN+1:
- case OPEN+2:
- case OPEN+3:
- case OPEN+4:
- case OPEN+5:
- case OPEN+6:
- case OPEN+7:
- case OPEN+8:
- case OPEN+9:
- sprintf(buf+strlen(buf), "OPEN%d", OP(op)-OPEN);
- p = NULL;
- break;
- case CLOSE+1:
- case CLOSE+2:
- case CLOSE+3:
- case CLOSE+4:
- case CLOSE+5:
- case CLOSE+6:
- case CLOSE+7:
- case CLOSE+8:
- case CLOSE+9:
- sprintf(buf+strlen(buf), "CLOSE%d", OP(op)-CLOSE);
- p = NULL;
- break;
- case STAR:
- p = "STAR";
- break;
- case PLUS:
- p = "PLUS";
- break;
- default:
- regerror("corrupted opcode");
- break;
- }
- if (p != NULL)
- (void) strcat(buf, p);
- return(buf);
-}
-#endif
-
-/*
- * The following is provided for those people who do not have strcspn() in
- * their C libraries. They should get off their butts and do something
- * about it; at least one public-domain implementation of those (highly
- * useful) string routines has been published on Usenet.
- */
-#ifdef STRCSPN
-/*
- * strcspn - find length of initial segment of s1 consisting entirely
- * of characters not from s2
- */
-
-static int
-strcspn(s1, s2)
-char *s1;
-char *s2;
-{
- register char *scan1;
- register char *scan2;
- register int count;
-
- count = 0;
- for (scan1 = s1; *scan1 != '\0'; scan1++) {
- for (scan2 = s2; *scan2 != '\0';) /* ++ moved down. */
- if (*scan1 == *scan2++)
- return(count);
- count++;
- }
- return(count);
-}
-#endif
diff --git a/contrib/less/regexp.h b/contrib/less/regexp.h
deleted file mode 100644
index bcef6d1..0000000
--- a/contrib/less/regexp.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Definitions etc. for regexp(3) routines.
- *
- * Caveat: this is V8 regexp(3) [actually, a reimplementation thereof],
- * not the System V one.
- */
-
-#ifndef _REGEXP
-#define _REGEXP 1
-
-#define NSUBEXP 10
-typedef struct regexp {
- char *startp[NSUBEXP];
- char *endp[NSUBEXP];
- char regstart; /* Internal use only. */
- char reganch; /* Internal use only. */
- char *regmust; /* Internal use only. */
- int regmlen; /* Internal use only. */
- char program[1]; /* Unwarranted chumminess with compiler. */
-} regexp;
-
-#if defined(__STDC__) || defined(__cplusplus)
-# define _ANSI_ARGS_(x) x
-#else
-# define _ANSI_ARGS_(x) ()
-#endif
-
-extern regexp *regcomp _ANSI_ARGS_((char *exp));
-extern int regexec _ANSI_ARGS_((regexp *prog, char *string));
-extern int regexec2 _ANSI_ARGS_((regexp *prog, char *string, int notbol));
-extern void regsub _ANSI_ARGS_((regexp *prog, char *source, char *dest));
-extern void regerror _ANSI_ARGS_((char *msg));
-
-#endif /* REGEXP */
diff --git a/contrib/less/screen.c b/contrib/less/screen.c
deleted file mode 100644
index 8e3a060..0000000
--- a/contrib/less/screen.c
+++ /dev/null
@@ -1,2471 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines which deal with the characteristics of the terminal.
- * Uses termcap to be as terminal-independent as possible.
- */
-
-#include "less.h"
-#include "cmd.h"
-
-#if MSDOS_COMPILER
-#include "pckeys.h"
-#if MSDOS_COMPILER==MSOFTC
-#include <graph.h>
-#else
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
-#include <conio.h>
-#if MSDOS_COMPILER==DJGPPC
-#include <pc.h>
-extern int fd0;
-#endif
-#else
-#if MSDOS_COMPILER==WIN32C
-#include <windows.h>
-#endif
-#endif
-#endif
-#include <time.h>
-
-#else
-
-#if HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-
-#if HAVE_TERMIOS_H && HAVE_TERMIOS_FUNCS
-#include <termios.h>
-#else
-#if HAVE_TERMIO_H
-#include <termio.h>
-#else
-#if HAVE_SGSTAT_H
-#include <sgstat.h>
-#else
-#include <sgtty.h>
-#endif
-#endif
-#endif
-
-#if HAVE_TERMCAP_H
-#include <termcap.h>
-#endif
-#ifdef _OSK
-#include <signal.h>
-#endif
-#if OS2
-#include <sys/signal.h>
-#include "pckeys.h"
-#endif
-#if HAVE_SYS_STREAM_H
-#include <sys/stream.h>
-#endif
-#if HAVE_SYS_PTEM_H
-#include <sys/ptem.h>
-#endif
-
-#endif /* MSDOS_COMPILER */
-
-/*
- * Check for broken termios package that forces you to manually
- * set the line discipline.
- */
-#ifdef __ultrix__
-#define MUST_SET_LINE_DISCIPLINE 1
-#else
-#define MUST_SET_LINE_DISCIPLINE 0
-#endif
-
-#if OS2
-#define DEFAULT_TERM "ansi"
-static char *windowid;
-#else
-#define DEFAULT_TERM "unknown"
-#endif
-
-#if MSDOS_COMPILER==MSOFTC
-static int videopages;
-static long msec_loops;
-static int flash_created = 0;
-#define SETCOLORS(fg,bg) { _settextcolor(fg); _setbkcolor(bg); }
-#endif
-
-#if MSDOS_COMPILER==BORLANDC
-static unsigned short *whitescreen;
-static int flash_created = 0;
-#endif
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
-#define _settextposition(y,x) gotoxy(x,y)
-#define _clearscreen(m) clrscr()
-#define _outtext(s) cputs(s)
-#define SETCOLORS(fg,bg) { textcolor(fg); textbackground(bg); }
-extern int sc_height;
-#endif
-
-#if MSDOS_COMPILER==WIN32C
-struct keyRecord
-{
- int ascii;
- int scan;
-} currentKey;
-
-static int keyCount = 0;
-static WORD curr_attr;
-static int pending_scancode = 0;
-static WORD *whitescreen;
-
-static HANDLE con_out_save = INVALID_HANDLE_VALUE; /* previous console */
-static HANDLE con_out_ours = INVALID_HANDLE_VALUE; /* our own */
-HANDLE con_out = INVALID_HANDLE_VALUE; /* current console */
-
-extern int quitting;
-static void win32_init_term();
-static void win32_deinit_term();
-
-#define FG_COLORS (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY)
-#define BG_COLORS (BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY)
-#define MAKEATTR(fg,bg) ((WORD)((fg)|((bg)<<4)))
-#define SETCOLORS(fg,bg) { curr_attr = MAKEATTR(fg,bg); \
- if (SetConsoleTextAttribute(con_out, curr_attr) == 0) \
- error("SETCOLORS failed"); }
-#endif
-
-#if MSDOS_COMPILER
-public int nm_fg_color; /* Color of normal text */
-public int nm_bg_color;
-public int bo_fg_color; /* Color of bold text */
-public int bo_bg_color;
-public int ul_fg_color; /* Color of underlined text */
-public int ul_bg_color;
-public int so_fg_color; /* Color of standout text */
-public int so_bg_color;
-public int bl_fg_color; /* Color of blinking text */
-public int bl_bg_color;
-static int sy_fg_color; /* Color of system text (before less) */
-static int sy_bg_color;
-
-#else
-
-/*
- * Strings passed to tputs() to do various terminal functions.
- */
-static char
- *sc_pad, /* Pad string */
- *sc_home, /* Cursor home */
- *sc_addline, /* Add line, scroll down following lines */
- *sc_lower_left, /* Cursor to last line, first column */
- *sc_return, /* Cursor to beginning of current line */
- *sc_move, /* General cursor positioning */
- *sc_clear, /* Clear screen */
- *sc_eol_clear, /* Clear to end of line */
- *sc_eos_clear, /* Clear to end of screen */
- *sc_s_in, /* Enter standout (highlighted) mode */
- *sc_s_out, /* Exit standout mode */
- *sc_u_in, /* Enter underline mode */
- *sc_u_out, /* Exit underline mode */
- *sc_b_in, /* Enter bold mode */
- *sc_b_out, /* Exit bold mode */
- *sc_bl_in, /* Enter blink mode */
- *sc_bl_out, /* Exit blink mode */
- *sc_visual_bell, /* Visual bell (flash screen) sequence */
- *sc_backspace, /* Backspace cursor */
- *sc_s_keypad, /* Start keypad mode */
- *sc_e_keypad, /* End keypad mode */
- *sc_init, /* Startup terminal initialization */
- *sc_deinit; /* Exit terminal de-initialization */
-#endif
-
-static int init_done = 0;
-
-public int auto_wrap; /* Terminal does \r\n when write past margin */
-public int ignaw; /* Terminal ignores \n immediately after wrap */
-public int erase_char; /* The user's erase char */
-public int erase2_char; /* The user's other erase char */
-public int kill_char; /* The user's line-kill char */
-public int werase_char; /* The user's word-erase char */
-public int sc_width, sc_height; /* Height & width of screen */
-public int bo_s_width, bo_e_width; /* Printing width of boldface seq */
-public int ul_s_width, ul_e_width; /* Printing width of underline seq */
-public int so_s_width, so_e_width; /* Printing width of standout seq */
-public int bl_s_width, bl_e_width; /* Printing width of blink seq */
-public int above_mem, below_mem; /* Memory retained above/below screen */
-public int can_goto_line; /* Can move cursor to any line */
-public int clear_bg; /* Clear fills with background color */
-public int missing_cap = 0; /* Some capability is missing */
-
-static int attrmode = AT_NORMAL;
-extern int binattr;
-
-#if !MSDOS_COMPILER
-static char *cheaper();
-static void tmodes();
-#endif
-
-/*
- * These two variables are sometimes defined in,
- * and needed by, the termcap library.
- */
-#if MUST_DEFINE_OSPEED
-extern short ospeed; /* Terminal output baud rate */
-extern char PC; /* Pad character */
-#endif
-#ifdef _OSK
-short ospeed;
-char PC_, *UP, *BC;
-#endif
-
-extern int quiet; /* If VERY_QUIET, use visual bell for bell */
-extern int no_back_scroll;
-extern int swindow;
-extern int no_init;
-extern int no_keypad;
-extern int sigs;
-extern int wscroll;
-extern int screen_trashed;
-extern int tty;
-extern int top_scroll;
-extern int oldbot;
-#if HILITE_SEARCH
-extern int hilite_search;
-#endif
-
-extern char *tgetstr();
-extern char *tgoto();
-
-
-/*
- * Change terminal to "raw mode", or restore to "normal" mode.
- * "Raw mode" means
- * 1. An outstanding read will complete on receipt of a single keystroke.
- * 2. Input is not echoed.
- * 3. On output, \n is mapped to \r\n.
- * 4. \t is NOT expanded into spaces.
- * 5. Signal-causing characters such as ctrl-C (interrupt),
- * etc. are NOT disabled.
- * It doesn't matter whether an input \n is mapped to \r, or vice versa.
- */
- public void
-raw_mode(on)
- int on;
-{
- static int curr_on = 0;
-
- if (on == curr_on)
- return;
- erase2_char = '\b'; /* in case OS doesn't know about erase2 */
-#if HAVE_TERMIOS_H && HAVE_TERMIOS_FUNCS
- {
- struct termios s;
- static struct termios save_term;
- static int saved_term = 0;
-
- if (on)
- {
- /*
- * Get terminal modes.
- */
- tcgetattr(tty, &s);
-
- /*
- * Save modes and set certain variables dependent on modes.
- */
- if (!saved_term)
- {
- save_term = s;
- saved_term = 1;
- }
-#if HAVE_OSPEED
- switch (cfgetospeed(&s))
- {
-#ifdef B0
- case B0: ospeed = 0; break;
-#endif
-#ifdef B50
- case B50: ospeed = 1; break;
-#endif
-#ifdef B75
- case B75: ospeed = 2; break;
-#endif
-#ifdef B110
- case B110: ospeed = 3; break;
-#endif
-#ifdef B134
- case B134: ospeed = 4; break;
-#endif
-#ifdef B150
- case B150: ospeed = 5; break;
-#endif
-#ifdef B200
- case B200: ospeed = 6; break;
-#endif
-#ifdef B300
- case B300: ospeed = 7; break;
-#endif
-#ifdef B600
- case B600: ospeed = 8; break;
-#endif
-#ifdef B1200
- case B1200: ospeed = 9; break;
-#endif
-#ifdef B1800
- case B1800: ospeed = 10; break;
-#endif
-#ifdef B2400
- case B2400: ospeed = 11; break;
-#endif
-#ifdef B4800
- case B4800: ospeed = 12; break;
-#endif
-#ifdef B9600
- case B9600: ospeed = 13; break;
-#endif
-#ifdef EXTA
- case EXTA: ospeed = 14; break;
-#endif
-#ifdef EXTB
- case EXTB: ospeed = 15; break;
-#endif
-#ifdef B57600
- case B57600: ospeed = 16; break;
-#endif
-#ifdef B115200
- case B115200: ospeed = 17; break;
-#endif
- default: ;
- }
-#endif
- erase_char = s.c_cc[VERASE];
-#ifdef VERASE2
- erase2_char = s.c_cc[VERASE2];
-#endif
- kill_char = s.c_cc[VKILL];
-#ifdef VWERASE
- werase_char = s.c_cc[VWERASE];
-#else
- werase_char = CONTROL('W');
-#endif
-
- /*
- * Set the modes to the way we want them.
- */
- s.c_lflag &= ~(0
-#ifdef ICANON
- | ICANON
-#endif
-#ifdef ECHO
- | ECHO
-#endif
-#ifdef ECHOE
- | ECHOE
-#endif
-#ifdef ECHOK
- | ECHOK
-#endif
-#if ECHONL
- | ECHONL
-#endif
- );
-
- s.c_oflag |= (0
-#ifdef OXTABS
- | OXTABS
-#else
-#ifdef TAB3
- | TAB3
-#else
-#ifdef XTABS
- | XTABS
-#endif
-#endif
-#endif
-#ifdef OPOST
- | OPOST
-#endif
-#ifdef ONLCR
- | ONLCR
-#endif
- );
-
- s.c_oflag &= ~(0
-#ifdef ONOEOT
- | ONOEOT
-#endif
-#ifdef OCRNL
- | OCRNL
-#endif
-#ifdef ONOCR
- | ONOCR
-#endif
-#ifdef ONLRET
- | ONLRET
-#endif
- );
- s.c_cc[VMIN] = 1;
- s.c_cc[VTIME] = 0;
-#ifdef VLNEXT
- s.c_cc[VLNEXT] = 0;
-#endif
-#ifdef VDSUSP
- s.c_cc[VDSUSP] = 0;
-#endif
-#if MUST_SET_LINE_DISCIPLINE
- /*
- * System's termios is broken; need to explicitly
- * request TERMIODISC line discipline.
- */
- s.c_line = TERMIODISC;
-#endif
- } else
- {
- /*
- * Restore saved modes.
- */
- s = save_term;
- }
-#if HAVE_FSYNC
- fsync(tty);
-#endif
- tcsetattr(tty, TCSADRAIN, &s);
-#if MUST_SET_LINE_DISCIPLINE
- if (!on)
- {
- /*
- * Broken termios *ignores* any line discipline
- * except TERMIODISC. A different old line discipline
- * is therefore not restored, yet. Restore the old
- * line discipline by hand.
- */
- ioctl(tty, TIOCSETD, &save_term.c_line);
- }
-#endif
- }
-#else
-#ifdef TCGETA
- {
- struct termio s;
- static struct termio save_term;
- static int saved_term = 0;
-
- if (on)
- {
- /*
- * Get terminal modes.
- */
- ioctl(tty, TCGETA, &s);
-
- /*
- * Save modes and set certain variables dependent on modes.
- */
- if (!saved_term)
- {
- save_term = s;
- saved_term = 1;
- }
-#if HAVE_OSPEED
- ospeed = s.c_cflag & CBAUD;
-#endif
- erase_char = s.c_cc[VERASE];
- kill_char = s.c_cc[VKILL];
-#ifdef VWERASE
- werase_char = s.c_cc[VWERASE];
-#else
- werase_char = CONTROL('W');
-#endif
-
- /*
- * Set the modes to the way we want them.
- */
- s.c_lflag &= ~(ICANON|ECHO|ECHOE|ECHOK|ECHONL);
- s.c_oflag |= (OPOST|ONLCR|TAB3);
- s.c_oflag &= ~(OCRNL|ONOCR|ONLRET);
- s.c_cc[VMIN] = 1;
- s.c_cc[VTIME] = 0;
- } else
- {
- /*
- * Restore saved modes.
- */
- s = save_term;
- }
- ioctl(tty, TCSETAW, &s);
- }
-#else
-#ifdef TIOCGETP
- {
- struct sgttyb s;
- static struct sgttyb save_term;
- static int saved_term = 0;
-
- if (on)
- {
- /*
- * Get terminal modes.
- */
- ioctl(tty, TIOCGETP, &s);
-
- /*
- * Save modes and set certain variables dependent on modes.
- */
- if (!saved_term)
- {
- save_term = s;
- saved_term = 1;
- }
-#if HAVE_OSPEED
- ospeed = s.sg_ospeed;
-#endif
- erase_char = s.sg_erase;
- kill_char = s.sg_kill;
- werase_char = CONTROL('W');
-
- /*
- * Set the modes to the way we want them.
- */
- s.sg_flags |= CBREAK;
- s.sg_flags &= ~(ECHO|XTABS);
- } else
- {
- /*
- * Restore saved modes.
- */
- s = save_term;
- }
- ioctl(tty, TIOCSETN, &s);
- }
-#else
-#ifdef _OSK
- {
- struct sgbuf s;
- static struct sgbuf save_term;
- static int saved_term = 0;
-
- if (on)
- {
- /*
- * Get terminal modes.
- */
- _gs_opt(tty, &s);
-
- /*
- * Save modes and set certain variables dependent on modes.
- */
- if (!saved_term)
- {
- save_term = s;
- saved_term = 1;
- }
- erase_char = s.sg_bspch;
- kill_char = s.sg_dlnch;
- werase_char = CONTROL('W');
-
- /*
- * Set the modes to the way we want them.
- */
- s.sg_echo = 0;
- s.sg_eofch = 0;
- s.sg_pause = 0;
- s.sg_psch = 0;
- } else
- {
- /*
- * Restore saved modes.
- */
- s = save_term;
- }
- _ss_opt(tty, &s);
- }
-#else
- /* MS-DOS, Windows, or OS2 */
-#if OS2
- /* OS2 */
- LSIGNAL(SIGINT, SIG_IGN);
-#endif
- erase_char = '\b';
-#if MSDOS_COMPILER==DJGPPC
- kill_char = CONTROL('U');
- /*
- * So that when we shell out or run another program, its
- * stdin is in cooked mode. We do not switch stdin to binary
- * mode if fd0 is zero, since that means we were called before
- * tty was reopened in open_getchr, in which case we would be
- * changing the original stdin device outside less.
- */
- if (fd0 != 0)
- setmode(0, on ? O_BINARY : O_TEXT);
-#else
- kill_char = ESC;
-#endif
- werase_char = CONTROL('W');
-#endif
-#endif
-#endif
-#endif
- curr_on = on;
-}
-
-#if !MSDOS_COMPILER
-/*
- * Some glue to prevent calling termcap functions if tgetent() failed.
- */
-static int hardcopy;
-
- static char *
-ltget_env(capname)
- char *capname;
-{
- char name[16];
- char *s;
-
- s = lgetenv("LESS_TERMCAP_DEBUG");
- if (s != NULL && *s != '\0')
- {
- struct env { struct env *next; char *name; char *value; };
- static struct env *envs = NULL;
- struct env *p;
- for (p = envs; p != NULL; p = p->next)
- if (strcmp(p->name, capname) == 0)
- return p->value;
- p = (struct env *) ecalloc(1, sizeof(struct env));
- p->name = save(capname);
- p->value = (char *) ecalloc(strlen(capname)+3, sizeof(char));
- sprintf(p->value, "<%s>", capname);
- p->next = envs;
- envs = p;
- return p->value;
- }
- strcpy(name, "LESS_TERMCAP_");
- strcat(name, capname);
- return (lgetenv(name));
-}
-
- static int
-ltgetflag(capname)
- char *capname;
-{
- char *s;
-
- if ((s = ltget_env(capname)) != NULL)
- return (*s != '\0' && *s != '0');
- if (hardcopy)
- return (0);
- return (tgetflag(capname));
-}
-
- static int
-ltgetnum(capname)
- char *capname;
-{
- char *s;
-
- if ((s = ltget_env(capname)) != NULL)
- return (atoi(s));
- if (hardcopy)
- return (-1);
- return (tgetnum(capname));
-}
-
- static char *
-ltgetstr(capname, pp)
- char *capname;
- char **pp;
-{
- char *s;
-
- if ((s = ltget_env(capname)) != NULL)
- return (s);
- if (hardcopy)
- return (NULL);
- return (tgetstr(capname, pp));
-}
-#endif /* MSDOS_COMPILER */
-
-/*
- * Get size of the output screen.
- */
- public void
-scrsize()
-{
- register char *s;
- int sys_height;
- int sys_width;
-#if !MSDOS_COMPILER
- int n;
-#endif
-
-#define DEF_SC_WIDTH 80
-#if MSDOS_COMPILER
-#define DEF_SC_HEIGHT 25
-#else
-#define DEF_SC_HEIGHT 24
-#endif
-
-
- sys_width = sys_height = 0;
-
-#if MSDOS_COMPILER==MSOFTC
- {
- struct videoconfig w;
- _getvideoconfig(&w);
- sys_height = w.numtextrows;
- sys_width = w.numtextcols;
- }
-#else
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
- {
- struct text_info w;
- gettextinfo(&w);
- sys_height = w.screenheight;
- sys_width = w.screenwidth;
- }
-#else
-#if MSDOS_COMPILER==WIN32C
- {
- CONSOLE_SCREEN_BUFFER_INFO scr;
- GetConsoleScreenBufferInfo(con_out, &scr);
- sys_height = scr.srWindow.Bottom - scr.srWindow.Top + 1;
- sys_width = scr.srWindow.Right - scr.srWindow.Left + 1;
- }
-#else
-#if OS2
- {
- int s[2];
- _scrsize(s);
- sys_width = s[0];
- sys_height = s[1];
- /*
- * When using terminal emulators for XFree86/OS2, the
- * _scrsize function does not work well.
- * Call the scrsize.exe program to get the window size.
- */
- windowid = getenv("WINDOWID");
- if (windowid != NULL)
- {
- FILE *fd = popen("scrsize", "rt");
- if (fd != NULL)
- {
- int w, h;
- fscanf(fd, "%i %i", &w, &h);
- if (w > 0 && h > 0)
- {
- sys_width = w;
- sys_height = h;
- }
- pclose(fd);
- }
- }
- }
-#else
-#ifdef TIOCGWINSZ
- {
- struct winsize w;
- if (ioctl(2, TIOCGWINSZ, &w) == 0)
- {
- if (w.ws_row > 0)
- sys_height = w.ws_row;
- if (w.ws_col > 0)
- sys_width = w.ws_col;
- }
- }
-#else
-#ifdef WIOCGETD
- {
- struct uwdata w;
- if (ioctl(2, WIOCGETD, &w) == 0)
- {
- if (w.uw_height > 0)
- sys_height = w.uw_height / w.uw_vs;
- if (w.uw_width > 0)
- sys_width = w.uw_width / w.uw_hs;
- }
- }
-#endif
-#endif
-#endif
-#endif
-#endif
-#endif
-
- if (sys_height > 0)
- sc_height = sys_height;
- else if ((s = lgetenv("LINES")) != NULL)
- sc_height = atoi(s);
-#if !MSDOS_COMPILER
- else if ((n = ltgetnum("li")) > 0)
- sc_height = n;
-#endif
- else
- sc_height = DEF_SC_HEIGHT;
-
- if (sys_width > 0)
- sc_width = sys_width;
- else if ((s = lgetenv("COLUMNS")) != NULL)
- sc_width = atoi(s);
-#if !MSDOS_COMPILER
- else if ((n = ltgetnum("co")) > 0)
- sc_width = n;
-#endif
- else
- sc_width = DEF_SC_WIDTH;
-}
-
-#if MSDOS_COMPILER==MSOFTC
-/*
- * Figure out how many empty loops it takes to delay a millisecond.
- */
- static void
-get_clock()
-{
- clock_t start;
-
- /*
- * Get synchronized at the start of a tick.
- */
- start = clock();
- while (clock() == start)
- ;
- /*
- * Now count loops till the next tick.
- */
- start = clock();
- msec_loops = 0;
- while (clock() == start)
- msec_loops++;
- /*
- * Convert from (loops per clock) to (loops per millisecond).
- */
- msec_loops *= CLOCKS_PER_SEC;
- msec_loops /= 1000;
-}
-
-/*
- * Delay for a specified number of milliseconds.
- */
- static void
-dummy_func()
-{
- static long delay_dummy = 0;
- delay_dummy++;
-}
-
- static void
-delay(msec)
- int msec;
-{
- long i;
-
- while (msec-- > 0)
- {
- for (i = 0; i < msec_loops; i++)
- {
- /*
- * Make it look like we're doing something here,
- * so the optimizer doesn't remove the whole loop.
- */
- dummy_func();
- }
- }
-}
-#endif
-
-/*
- * Return the characters actually input by a "special" key.
- */
- public char *
-special_key_str(key)
- int key;
-{
- static char tbuf[40];
- char *s;
-#if MSDOS_COMPILER || OS2
- static char k_right[] = { '\340', PCK_RIGHT, 0 };
- static char k_left[] = { '\340', PCK_LEFT, 0 };
- static char k_ctl_right[] = { '\340', PCK_CTL_RIGHT, 0 };
- static char k_ctl_left[] = { '\340', PCK_CTL_LEFT, 0 };
- static char k_insert[] = { '\340', PCK_INSERT, 0 };
- static char k_delete[] = { '\340', PCK_DELETE, 0 };
- static char k_ctl_delete[] = { '\340', PCK_CTL_DELETE, 0 };
- static char k_ctl_backspace[] = { '\177', 0 };
- static char k_home[] = { '\340', PCK_HOME, 0 };
- static char k_end[] = { '\340', PCK_END, 0 };
- static char k_up[] = { '\340', PCK_UP, 0 };
- static char k_down[] = { '\340', PCK_DOWN, 0 };
- static char k_backtab[] = { '\340', PCK_SHIFT_TAB, 0 };
- static char k_pagedown[] = { '\340', PCK_PAGEDOWN, 0 };
- static char k_pageup[] = { '\340', PCK_PAGEUP, 0 };
- static char k_f1[] = { '\340', PCK_F1, 0 };
-#endif
-#if !MSDOS_COMPILER
- char *sp = tbuf;
-#endif
-
- switch (key)
- {
-#if OS2
- /*
- * If windowid is not NULL, assume less is executed in
- * the XFree86 environment.
- */
- case SK_RIGHT_ARROW:
- s = windowid ? ltgetstr("kr", &sp) : k_right;
- break;
- case SK_LEFT_ARROW:
- s = windowid ? ltgetstr("kl", &sp) : k_left;
- break;
- case SK_UP_ARROW:
- s = windowid ? ltgetstr("ku", &sp) : k_up;
- break;
- case SK_DOWN_ARROW:
- s = windowid ? ltgetstr("kd", &sp) : k_down;
- break;
- case SK_PAGE_UP:
- s = windowid ? ltgetstr("kP", &sp) : k_pageup;
- break;
- case SK_PAGE_DOWN:
- s = windowid ? ltgetstr("kN", &sp) : k_pagedown;
- break;
- case SK_HOME:
- s = windowid ? ltgetstr("kh", &sp) : k_home;
- break;
- case SK_END:
- s = windowid ? ltgetstr("@7", &sp) : k_end;
- break;
- case SK_DELETE:
- if (windowid)
- {
- s = ltgetstr("kD", &sp);
- if (s == NULL)
- {
- tbuf[0] = '\177';
- tbuf[1] = '\0';
- s = tbuf;
- }
- } else
- s = k_delete;
- break;
-#endif
-#if MSDOS_COMPILER
- case SK_RIGHT_ARROW:
- s = k_right;
- break;
- case SK_LEFT_ARROW:
- s = k_left;
- break;
- case SK_UP_ARROW:
- s = k_up;
- break;
- case SK_DOWN_ARROW:
- s = k_down;
- break;
- case SK_PAGE_UP:
- s = k_pageup;
- break;
- case SK_PAGE_DOWN:
- s = k_pagedown;
- break;
- case SK_HOME:
- s = k_home;
- break;
- case SK_END:
- s = k_end;
- break;
- case SK_DELETE:
- s = k_delete;
- break;
-#endif
-#if MSDOS_COMPILER || OS2
- case SK_INSERT:
- s = k_insert;
- break;
- case SK_CTL_LEFT_ARROW:
- s = k_ctl_left;
- break;
- case SK_CTL_RIGHT_ARROW:
- s = k_ctl_right;
- break;
- case SK_CTL_BACKSPACE:
- s = k_ctl_backspace;
- break;
- case SK_CTL_DELETE:
- s = k_ctl_delete;
- break;
- case SK_F1:
- s = k_f1;
- break;
- case SK_BACKTAB:
- s = k_backtab;
- break;
-#else
- case SK_RIGHT_ARROW:
- s = ltgetstr("kr", &sp);
- break;
- case SK_LEFT_ARROW:
- s = ltgetstr("kl", &sp);
- break;
- case SK_UP_ARROW:
- s = ltgetstr("ku", &sp);
- break;
- case SK_DOWN_ARROW:
- s = ltgetstr("kd", &sp);
- break;
- case SK_PAGE_UP:
- s = ltgetstr("kP", &sp);
- break;
- case SK_PAGE_DOWN:
- s = ltgetstr("kN", &sp);
- break;
- case SK_HOME:
- s = ltgetstr("kh", &sp);
- break;
- case SK_END:
- s = ltgetstr("@7", &sp);
- break;
- case SK_DELETE:
- s = ltgetstr("kD", &sp);
- if (s == NULL)
- {
- tbuf[0] = '\177';
- tbuf[1] = '\0';
- s = tbuf;
- }
- break;
-#endif
- case SK_CONTROL_K:
- tbuf[0] = CONTROL('K');
- tbuf[1] = '\0';
- s = tbuf;
- break;
- default:
- return (NULL);
- }
- return (s);
-}
-
-/*
- * Get terminal capabilities via termcap.
- */
- public void
-get_term()
-{
-#if MSDOS_COMPILER
- auto_wrap = 1;
- ignaw = 0;
- can_goto_line = 1;
- clear_bg = 1;
- /*
- * Set up default colors.
- * The xx_s_width and xx_e_width vars are already initialized to 0.
- */
-#if MSDOS_COMPILER==MSOFTC
- sy_bg_color = _getbkcolor();
- sy_fg_color = _gettextcolor();
- get_clock();
-#else
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
- {
- struct text_info w;
- gettextinfo(&w);
- sy_bg_color = (w.attribute >> 4) & 0x0F;
- sy_fg_color = (w.attribute >> 0) & 0x0F;
- }
-#else
-#if MSDOS_COMPILER==WIN32C
- {
- DWORD nread;
- CONSOLE_SCREEN_BUFFER_INFO scr;
-
- con_out_save = con_out = GetStdHandle(STD_OUTPUT_HANDLE);
- /*
- * Always open stdin in binary. Note this *must* be done
- * before any file operations have been done on fd0.
- */
- SET_BINARY(0);
- GetConsoleScreenBufferInfo(con_out, &scr);
- ReadConsoleOutputAttribute(con_out, &curr_attr,
- 1, scr.dwCursorPosition, &nread);
- sy_bg_color = (curr_attr & BG_COLORS) >> 4; /* normalize */
- sy_fg_color = curr_attr & FG_COLORS;
- }
-#endif
-#endif
-#endif
- nm_fg_color = sy_fg_color;
- nm_bg_color = sy_bg_color;
- bo_fg_color = 11;
- bo_bg_color = 0;
- ul_fg_color = 9;
- ul_bg_color = 0;
- so_fg_color = 15;
- so_bg_color = 9;
- bl_fg_color = 15;
- bl_bg_color = 0;
-
- /*
- * Get size of the screen.
- */
- scrsize();
- pos_init();
-
-
-#else /* !MSDOS_COMPILER */
-
- char *sp;
- register char *t1, *t2;
- char *term;
- char termbuf[TERMBUF_SIZE];
-
- static char sbuf[TERMSBUF_SIZE];
-
-#if OS2
- /*
- * Make sure the termcap database is available.
- */
- sp = lgetenv("TERMCAP");
- if (sp == NULL || *sp == '\0')
- {
- char *termcap;
- if ((sp = homefile("termcap.dat")) != NULL)
- {
- termcap = (char *) ecalloc(strlen(sp)+9, sizeof(char));
- sprintf(termcap, "TERMCAP=%s", sp);
- free(sp);
- putenv(termcap);
- }
- }
-#endif
- /*
- * Find out what kind of terminal this is.
- */
- if ((term = lgetenv("TERM")) == NULL)
- term = DEFAULT_TERM;
- hardcopy = 0;
- if (tgetent(termbuf, term) != TGETENT_OK)
- hardcopy = 1;
- if (ltgetflag("hc"))
- hardcopy = 1;
-
- /*
- * Get size of the screen.
- */
- scrsize();
- pos_init();
-
- auto_wrap = ltgetflag("am");
- ignaw = ltgetflag("xn");
- above_mem = ltgetflag("da");
- below_mem = ltgetflag("db");
- clear_bg = ltgetflag("ut");
-
- /*
- * Assumes termcap variable "sg" is the printing width of:
- * the standout sequence, the end standout sequence,
- * the underline sequence, the end underline sequence,
- * the boldface sequence, and the end boldface sequence.
- */
- if ((so_s_width = ltgetnum("sg")) < 0)
- so_s_width = 0;
- so_e_width = so_s_width;
-
- bo_s_width = bo_e_width = so_s_width;
- ul_s_width = ul_e_width = so_s_width;
- bl_s_width = bl_e_width = so_s_width;
-
-#if HILITE_SEARCH
- if (so_s_width > 0 || so_e_width > 0)
- /*
- * Disable highlighting by default on magic cookie terminals.
- * Turning on highlighting might change the displayed width
- * of a line, causing the display to get messed up.
- * The user can turn it back on with -g,
- * but she won't like the results.
- */
- hilite_search = 0;
-#endif
-
- /*
- * Get various string-valued capabilities.
- */
- sp = sbuf;
-
-#if HAVE_OSPEED
- sc_pad = ltgetstr("pc", &sp);
- if (sc_pad != NULL)
- PC = *sc_pad;
-#endif
-
- sc_s_keypad = ltgetstr("ks", &sp);
- if (sc_s_keypad == NULL)
- sc_s_keypad = "";
- sc_e_keypad = ltgetstr("ke", &sp);
- if (sc_e_keypad == NULL)
- sc_e_keypad = "";
-
- sc_init = ltgetstr("ti", &sp);
- if (sc_init == NULL)
- sc_init = "";
-
- sc_deinit= ltgetstr("te", &sp);
- if (sc_deinit == NULL)
- sc_deinit = "";
-
- sc_eol_clear = ltgetstr("ce", &sp);
- if (sc_eol_clear == NULL || *sc_eol_clear == '\0')
- {
- missing_cap = 1;
- sc_eol_clear = "";
- }
-
- sc_eos_clear = ltgetstr("cd", &sp);
- if (below_mem && (sc_eos_clear == NULL || *sc_eos_clear == '\0'))
- {
- missing_cap = 1;
- sc_eos_clear = "";
- }
-
- sc_clear = ltgetstr("cl", &sp);
- if (sc_clear == NULL || *sc_clear == '\0')
- {
- missing_cap = 1;
- sc_clear = "\n\n";
- }
-
- sc_move = ltgetstr("cm", &sp);
- if (sc_move == NULL || *sc_move == '\0')
- {
- /*
- * This is not an error here, because we don't
- * always need sc_move.
- * We need it only if we don't have home or lower-left.
- */
- sc_move = "";
- can_goto_line = 0;
- } else
- can_goto_line = 1;
-
- tmodes("so", "se", &sc_s_in, &sc_s_out, "", "", &sp);
- tmodes("us", "ue", &sc_u_in, &sc_u_out, sc_s_in, sc_s_out, &sp);
- tmodes("md", "me", &sc_b_in, &sc_b_out, sc_s_in, sc_s_out, &sp);
- tmodes("mb", "me", &sc_bl_in, &sc_bl_out, sc_s_in, sc_s_out, &sp);
-
- sc_visual_bell = ltgetstr("vb", &sp);
- if (sc_visual_bell == NULL)
- sc_visual_bell = "";
-
- if (ltgetflag("bs"))
- sc_backspace = "\b";
- else
- {
- sc_backspace = ltgetstr("bc", &sp);
- if (sc_backspace == NULL || *sc_backspace == '\0')
- sc_backspace = "\b";
- }
-
- /*
- * Choose between using "ho" and "cm" ("home" and "cursor move")
- * to move the cursor to the upper left corner of the screen.
- */
- t1 = ltgetstr("ho", &sp);
- if (t1 == NULL)
- t1 = "";
- if (*sc_move == '\0')
- t2 = "";
- else
- {
- strcpy(sp, tgoto(sc_move, 0, 0));
- t2 = sp;
- sp += strlen(sp) + 1;
- }
- sc_home = cheaper(t1, t2, "|\b^");
-
- /*
- * Choose between using "ll" and "cm" ("lower left" and "cursor move")
- * to move the cursor to the lower left corner of the screen.
- */
- t1 = ltgetstr("ll", &sp);
- if (t1 == NULL)
- t1 = "";
- if (*sc_move == '\0')
- t2 = "";
- else
- {
- strcpy(sp, tgoto(sc_move, 0, sc_height-1));
- t2 = sp;
- sp += strlen(sp) + 1;
- }
- sc_lower_left = cheaper(t1, t2, "\r");
-
- /*
- * Get carriage return string.
- */
- sc_return = ltgetstr("cr", &sp);
- if (sc_return == NULL)
- sc_return = "\r";
-
- /*
- * Choose between using "al" or "sr" ("add line" or "scroll reverse")
- * to add a line at the top of the screen.
- */
- t1 = ltgetstr("al", &sp);
- if (t1 == NULL)
- t1 = "";
- t2 = ltgetstr("sr", &sp);
- if (t2 == NULL)
- t2 = "";
-#if OS2
- if (*t1 == '\0' && *t2 == '\0')
- sc_addline = "";
- else
-#endif
- if (above_mem)
- sc_addline = t1;
- else
- sc_addline = cheaper(t1, t2, "");
- if (*sc_addline == '\0')
- {
- /*
- * Force repaint on any backward movement.
- */
- no_back_scroll = 1;
- }
-#endif /* MSDOS_COMPILER */
-}
-
-#if !MSDOS_COMPILER
-/*
- * Return the cost of displaying a termcap string.
- * We use the trick of calling tputs, but as a char printing function
- * we give it inc_costcount, which just increments "costcount".
- * This tells us how many chars would be printed by using this string.
- * {{ Couldn't we just use strlen? }}
- */
-static int costcount;
-
-/*ARGSUSED*/
- static int
-inc_costcount(c)
- int c;
-{
- costcount++;
- return (c);
-}
-
- static int
-cost(t)
- char *t;
-{
- costcount = 0;
- tputs(t, sc_height, inc_costcount);
- return (costcount);
-}
-
-/*
- * Return the "best" of the two given termcap strings.
- * The best, if both exist, is the one with the lower
- * cost (see cost() function).
- */
- static char *
-cheaper(t1, t2, def)
- char *t1, *t2;
- char *def;
-{
- if (*t1 == '\0' && *t2 == '\0')
- {
- missing_cap = 1;
- return (def);
- }
- if (*t1 == '\0')
- return (t2);
- if (*t2 == '\0')
- return (t1);
- if (cost(t1) < cost(t2))
- return (t1);
- return (t2);
-}
-
- static void
-tmodes(incap, outcap, instr, outstr, def_instr, def_outstr, spp)
- char *incap;
- char *outcap;
- char **instr;
- char **outstr;
- char *def_instr;
- char *def_outstr;
- char **spp;
-{
- *instr = ltgetstr(incap, spp);
- if (*instr == NULL)
- {
- /* Use defaults. */
- *instr = def_instr;
- *outstr = def_outstr;
- return;
- }
-
- *outstr = ltgetstr(outcap, spp);
- if (*outstr == NULL)
- /* No specific out capability; use "me". */
- *outstr = ltgetstr("me", spp);
- if (*outstr == NULL)
- /* Don't even have "me"; use a null string. */
- *outstr = "";
-}
-
-#endif /* MSDOS_COMPILER */
-
-
-/*
- * Below are the functions which perform all the
- * terminal-specific screen manipulation.
- */
-
-
-#if MSDOS_COMPILER
-
-#if MSDOS_COMPILER==WIN32C
- static void
-_settextposition(int row, int col)
-{
- COORD cpos;
- CONSOLE_SCREEN_BUFFER_INFO csbi;
-
- GetConsoleScreenBufferInfo(con_out, &csbi);
- cpos.X = csbi.srWindow.Left + (col - 1);
- cpos.Y = csbi.srWindow.Top + (row - 1);
- SetConsoleCursorPosition(con_out, cpos);
-}
-#endif
-
-/*
- * Initialize the screen to the correct color at startup.
- */
- static void
-initcolor()
-{
- SETCOLORS(nm_fg_color, nm_bg_color);
-#if 0
- /*
- * This clears the screen at startup. This is different from
- * the behavior of other versions of less. Disable it for now.
- */
- char *blanks;
- int row;
- int col;
-
- /*
- * Create a complete, blank screen using "normal" colors.
- */
- SETCOLORS(nm_fg_color, nm_bg_color);
- blanks = (char *) ecalloc(width+1, sizeof(char));
- for (col = 0; col < sc_width; col++)
- blanks[col] = ' ';
- blanks[sc_width] = '\0';
- for (row = 0; row < sc_height; row++)
- _outtext(blanks);
- free(blanks);
-#endif
-}
-#endif
-
-#if MSDOS_COMPILER==WIN32C
-
-/*
- * Termcap-like init with a private win32 console.
- */
- static void
-win32_init_term()
-{
- CONSOLE_SCREEN_BUFFER_INFO scr;
- COORD size;
-
- if (con_out_save == INVALID_HANDLE_VALUE)
- return;
-
- GetConsoleScreenBufferInfo(con_out_save, &scr);
-
- if (con_out_ours == INVALID_HANDLE_VALUE)
- {
- /*
- * Create our own screen buffer, so that we
- * may restore the original when done.
- */
- con_out_ours = CreateConsoleScreenBuffer(
- GENERIC_WRITE | GENERIC_READ,
- FILE_SHARE_WRITE | FILE_SHARE_READ,
- (LPSECURITY_ATTRIBUTES) NULL,
- CONSOLE_TEXTMODE_BUFFER,
- (LPVOID) NULL);
- }
-
- size.X = scr.srWindow.Right - scr.srWindow.Left + 1;
- size.Y = scr.srWindow.Bottom - scr.srWindow.Top + 1;
- SetConsoleScreenBufferSize(con_out_ours, size);
- SetConsoleActiveScreenBuffer(con_out_ours);
- con_out = con_out_ours;
-}
-
-/*
- * Restore the startup console.
- */
-static void
-win32_deinit_term()
-{
- if (con_out_save == INVALID_HANDLE_VALUE)
- return;
- if (quitting)
- (void) CloseHandle(con_out_ours);
- SetConsoleActiveScreenBuffer(con_out_save);
- con_out = con_out_save;
-}
-
-#endif
-
-/*
- * Initialize terminal
- */
- public void
-init()
-{
-#if !MSDOS_COMPILER
- if (!no_init)
- tputs(sc_init, sc_height, putchr);
- if (!no_keypad)
- tputs(sc_s_keypad, sc_height, putchr);
- if (top_scroll)
- {
- int i;
-
- /*
- * This is nice to terminals with no alternate screen,
- * but with saved scrolled-off-the-top lines. This way,
- * no previous line is lost, but we start with a whole
- * screen to ourself.
- */
- for (i = 1; i < sc_height; i++)
- putchr('\n');
- }
-#else
-#if MSDOS_COMPILER==WIN32C
- if (!no_init)
- win32_init_term();
-#endif
- initcolor();
- flush();
-#endif
- init_done = 1;
-}
-
-/*
- * Deinitialize terminal
- */
- public void
-deinit()
-{
- if (!init_done)
- return;
-#if !MSDOS_COMPILER
- if (!no_keypad)
- tputs(sc_e_keypad, sc_height, putchr);
- if (!no_init)
- tputs(sc_deinit, sc_height, putchr);
-#else
- /* Restore system colors. */
- SETCOLORS(sy_fg_color, sy_bg_color);
-#if MSDOS_COMPILER==WIN32C
- if (!no_init)
- win32_deinit_term();
-#else
- /* Need clreol to make SETCOLORS take effect. */
- clreol();
-#endif
-#endif
- init_done = 0;
-}
-
-/*
- * Home cursor (move to upper left corner of screen).
- */
- public void
-home()
-{
-#if !MSDOS_COMPILER
- tputs(sc_home, 1, putchr);
-#else
- flush();
- _settextposition(1,1);
-#endif
-}
-
-/*
- * Add a blank line (called with cursor at home).
- * Should scroll the display down.
- */
- public void
-add_line()
-{
-#if !MSDOS_COMPILER
- tputs(sc_addline, sc_height, putchr);
-#else
- flush();
-#if MSDOS_COMPILER==MSOFTC
- _scrolltextwindow(_GSCROLLDOWN);
- _settextposition(1,1);
-#else
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
- movetext(1,1, sc_width,sc_height-1, 1,2);
- gotoxy(1,1);
- clreol();
-#else
-#if MSDOS_COMPILER==WIN32C
- {
- CHAR_INFO fillchar;
- SMALL_RECT rcSrc, rcClip;
- COORD new_org;
- CONSOLE_SCREEN_BUFFER_INFO csbi;
-
- GetConsoleScreenBufferInfo(con_out,&csbi);
-
- /* The clip rectangle is the entire visible screen. */
- rcClip.Left = csbi.srWindow.Left;
- rcClip.Top = csbi.srWindow.Top;
- rcClip.Right = csbi.srWindow.Right;
- rcClip.Bottom = csbi.srWindow.Bottom;
-
- /* The source rectangle is the visible screen minus the last line. */
- rcSrc = rcClip;
- rcSrc.Bottom--;
-
- /* Move the top left corner of the source window down one row. */
- new_org.X = rcSrc.Left;
- new_org.Y = rcSrc.Top + 1;
-
- /* Fill the right character and attributes. */
- fillchar.Char.AsciiChar = ' ';
- curr_attr = MAKEATTR(nm_fg_color, nm_bg_color);
- fillchar.Attributes = curr_attr;
- ScrollConsoleScreenBuffer(con_out, &rcSrc, &rcClip, new_org, &fillchar);
- _settextposition(1,1);
- }
-#endif
-#endif
-#endif
-#endif
-}
-
-#if 0
-/*
- * Remove the n topmost lines and scroll everything below it in the
- * window upward. This is needed to stop leaking the topmost line
- * into the scrollback buffer when we go down-one-line (in WIN32).
- */
- public void
-remove_top(n)
- int n;
-{
-#if MSDOS_COMPILER==WIN32C
- SMALL_RECT rcSrc, rcClip;
- CHAR_INFO fillchar;
- COORD new_org;
- CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */
-
- if (n >= sc_height - 1)
- {
- clear();
- home();
- return;
- }
-
- flush();
-
- GetConsoleScreenBufferInfo(con_out, &csbi);
-
- /* Get the extent of all-visible-rows-but-the-last. */
- rcSrc.Left = csbi.srWindow.Left;
- rcSrc.Top = csbi.srWindow.Top + n;
- rcSrc.Right = csbi.srWindow.Right;
- rcSrc.Bottom = csbi.srWindow.Bottom;
-
- /* Get the clip rectangle. */
- rcClip.Left = rcSrc.Left;
- rcClip.Top = csbi.srWindow.Top;
- rcClip.Right = rcSrc.Right;
- rcClip.Bottom = rcSrc.Bottom ;
-
- /* Move the source window up n rows. */
- new_org.X = rcSrc.Left;
- new_org.Y = rcSrc.Top - n;
-
- /* Fill the right character and attributes. */
- fillchar.Char.AsciiChar = ' ';
- curr_attr = MAKEATTR(nm_fg_color, nm_bg_color);
- fillchar.Attributes = curr_attr;
-
- ScrollConsoleScreenBuffer(con_out, &rcSrc, &rcClip, new_org, &fillchar);
-
- /* Position cursor on first blank line. */
- goto_line(sc_height - n - 1);
-#endif
-}
-#endif
-
-#if MSDOS_COMPILER==WIN32C
-/*
- * Clear the screen.
- */
- static void
-win32_clear()
-{
- /*
- * This will clear only the currently visible rows of the NT
- * console buffer, which means none of the precious scrollback
- * rows are touched making for faster scrolling. Note that, if
- * the window has fewer columns than the console buffer (i.e.
- * there is a horizontal scrollbar as well), the entire width
- * of the visible rows will be cleared.
- */
- COORD topleft;
- DWORD nchars;
- DWORD winsz;
- CONSOLE_SCREEN_BUFFER_INFO csbi;
-
- /* get the number of cells in the current buffer */
- GetConsoleScreenBufferInfo(con_out, &csbi);
- winsz = csbi.dwSize.X * (csbi.srWindow.Bottom - csbi.srWindow.Top + 1);
- topleft.X = 0;
- topleft.Y = csbi.srWindow.Top;
-
- curr_attr = MAKEATTR(nm_fg_color, nm_bg_color);
- FillConsoleOutputCharacter(con_out, ' ', winsz, topleft, &nchars);
- FillConsoleOutputAttribute(con_out, curr_attr, winsz, topleft, &nchars);
-}
-
-/*
- * Remove the n topmost lines and scroll everything below it in the
- * window upward.
- */
- public void
-win32_scroll_up(n)
- int n;
-{
- SMALL_RECT rcSrc, rcClip;
- CHAR_INFO fillchar;
- COORD topleft;
- COORD new_org;
- DWORD nchars;
- DWORD size;
- CONSOLE_SCREEN_BUFFER_INFO csbi;
-
- if (n <= 0)
- return;
-
- if (n >= sc_height - 1)
- {
- win32_clear();
- _settextposition(1,1);
- return;
- }
-
- /* Get the extent of what will remain visible after scrolling. */
- GetConsoleScreenBufferInfo(con_out, &csbi);
- rcSrc.Left = csbi.srWindow.Left;
- rcSrc.Top = csbi.srWindow.Top + n;
- rcSrc.Right = csbi.srWindow.Right;
- rcSrc.Bottom = csbi.srWindow.Bottom;
-
- /* Get the clip rectangle. */
- rcClip.Left = rcSrc.Left;
- rcClip.Top = csbi.srWindow.Top;
- rcClip.Right = rcSrc.Right;
- rcClip.Bottom = rcSrc.Bottom ;
-
- /* Move the source text to the top of the screen. */
- new_org.X = rcSrc.Left;
- new_org.Y = 0;
-
- /* Fill the right character and attributes. */
- fillchar.Char.AsciiChar = ' ';
- fillchar.Attributes = MAKEATTR(nm_fg_color, nm_bg_color);
-
- /* Scroll the window. */
- SetConsoleTextAttribute(con_out, fillchar.Attributes);
- ScrollConsoleScreenBuffer(con_out, &rcSrc, &rcClip, new_org, &fillchar);
-
- /* Clear remaining lines at bottom. */
- topleft.X = csbi.dwCursorPosition.X;
- topleft.Y = rcSrc.Bottom - n;
- size = (n * csbi.dwSize.X) + (rcSrc.Right - topleft.X);
- FillConsoleOutputCharacter(con_out, ' ', size, topleft,
- &nchars);
- FillConsoleOutputAttribute(con_out, fillchar.Attributes, size, topleft,
- &nchars);
- SetConsoleTextAttribute(con_out, curr_attr);
-
- /* Move cursor n lines up from where it was. */
- csbi.dwCursorPosition.Y -= n;
- SetConsoleCursorPosition(con_out, csbi.dwCursorPosition);
-}
-#endif
-
-/*
- * Move cursor to lower left corner of screen.
- */
- public void
-lower_left()
-{
-#if !MSDOS_COMPILER
- tputs(sc_lower_left, 1, putchr);
-#else
- flush();
- _settextposition(sc_height, 1);
-#endif
-}
-
-/*
- * Move cursor to left position of current line.
- */
- public void
-line_left()
-{
-#if !MSDOS_COMPILER
- tputs(sc_return, 1, putchr);
-#else
- int row;
- flush();
-#if MSDOS_COMPILER==WIN32C
- {
- CONSOLE_SCREEN_BUFFER_INFO scr;
- GetConsoleScreenBufferInfo(con_out, &scr);
- row = scr.dwCursorPosition.Y - scr.srWindow.Top + 1;
- }
-#else
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
- row = wherey();
-#else
- {
- struct rccoord tpos = _gettextposition();
- row = tpos.row;
- }
-#endif
-#endif
- _settextposition(row, 1);
-#endif
-}
-
-/*
- * Check if the console size has changed and reset internals
- * (in lieu of SIGWINCH for WIN32).
- */
- public void
-check_winch()
-{
-#if MSDOS_COMPILER==WIN32C
- CONSOLE_SCREEN_BUFFER_INFO scr;
- COORD size;
-
- if (con_out == INVALID_HANDLE_VALUE)
- return;
-
- flush();
- GetConsoleScreenBufferInfo(con_out, &scr);
- size.Y = scr.srWindow.Bottom - scr.srWindow.Top + 1;
- size.X = scr.srWindow.Right - scr.srWindow.Left + 1;
- if (size.Y != sc_height || size.X != sc_width)
- {
- sc_height = size.Y;
- sc_width = size.X;
- if (!no_init && con_out_ours == con_out)
- SetConsoleScreenBufferSize(con_out, size);
- pos_init();
- wscroll = (sc_height + 1) / 2;
- screen_trashed = 1;
- }
-#endif
-}
-
-/*
- * Goto a specific line on the screen.
- */
- public void
-goto_line(slinenum)
- int slinenum;
-{
-#if !MSDOS_COMPILER
- tputs(tgoto(sc_move, 0, slinenum), 1, putchr);
-#else
- flush();
- _settextposition(slinenum+1, 1);
-#endif
-}
-
-#if MSDOS_COMPILER==MSOFTC || MSDOS_COMPILER==BORLANDC
-/*
- * Create an alternate screen which is all white.
- * This screen is used to create a "flash" effect, by displaying it
- * briefly and then switching back to the normal screen.
- * {{ Yuck! There must be a better way to get a visual bell. }}
- */
- static void
-create_flash()
-{
-#if MSDOS_COMPILER==MSOFTC
- struct videoconfig w;
- char *blanks;
- int row, col;
-
- _getvideoconfig(&w);
- videopages = w.numvideopages;
- if (videopages < 2)
- {
- at_enter(AT_STANDOUT);
- at_exit();
- } else
- {
- _setactivepage(1);
- at_enter(AT_STANDOUT);
- blanks = (char *) ecalloc(w.numtextcols, sizeof(char));
- for (col = 0; col < w.numtextcols; col++)
- blanks[col] = ' ';
- for (row = w.numtextrows; row > 0; row--)
- _outmem(blanks, w.numtextcols);
- _setactivepage(0);
- _setvisualpage(0);
- free(blanks);
- at_exit();
- }
-#else
-#if MSDOS_COMPILER==BORLANDC
- register int n;
-
- whitescreen = (unsigned short *)
- malloc(sc_width * sc_height * sizeof(short));
- if (whitescreen == NULL)
- return;
- for (n = 0; n < sc_width * sc_height; n++)
- whitescreen[n] = 0x7020;
-#else
-#if MSDOS_COMPILER==WIN32C
- register int n;
-
- whitescreen = (WORD *)
- malloc(sc_height * sc_width * sizeof(WORD));
- if (whitescreen == NULL)
- return;
- /* Invert the standard colors. */
- for (n = 0; n < sc_width * sc_height; n++)
- whitescreen[n] = (WORD)((nm_fg_color << 4) | nm_bg_color);
-#endif
-#endif
-#endif
- flash_created = 1;
-}
-#endif /* MSDOS_COMPILER */
-
-/*
- * Output the "visual bell", if there is one.
- */
- public void
-vbell()
-{
-#if !MSDOS_COMPILER
- if (*sc_visual_bell == '\0')
- return;
- tputs(sc_visual_bell, sc_height, putchr);
-#else
-#if MSDOS_COMPILER==DJGPPC
- ScreenVisualBell();
-#else
-#if MSDOS_COMPILER==MSOFTC
- /*
- * Create a flash screen on the second video page.
- * Switch to that page, then switch back.
- */
- if (!flash_created)
- create_flash();
- if (videopages < 2)
- return;
- _setvisualpage(1);
- delay(100);
- _setvisualpage(0);
-#else
-#if MSDOS_COMPILER==BORLANDC
- unsigned short *currscreen;
-
- /*
- * Get a copy of the current screen.
- * Display the flash screen.
- * Then restore the old screen.
- */
- if (!flash_created)
- create_flash();
- if (whitescreen == NULL)
- return;
- currscreen = (unsigned short *)
- malloc(sc_width * sc_height * sizeof(short));
- if (currscreen == NULL) return;
- gettext(1, 1, sc_width, sc_height, currscreen);
- puttext(1, 1, sc_width, sc_height, whitescreen);
- delay(100);
- puttext(1, 1, sc_width, sc_height, currscreen);
- free(currscreen);
-#else
-#if MSDOS_COMPILER==WIN32C
- /* paint screen with an inverse color */
- clear();
-
- /* leave it displayed for 100 msec. */
- Sleep(100);
-
- /* restore with a redraw */
- repaint();
-#endif
-#endif
-#endif
-#endif
-#endif
-}
-
-/*
- * Make a noise.
- */
- static void
-beep()
-{
-#if !MSDOS_COMPILER
- putchr(CONTROL('G'));
-#else
-#if MSDOS_COMPILER==WIN32C
- MessageBeep(0);
-#else
- write(1, "\7", 1);
-#endif
-#endif
-}
-
-/*
- * Ring the terminal bell.
- */
- public void
-bell()
-{
- if (quiet == VERY_QUIET)
- vbell();
- else
- beep();
-}
-
-/*
- * Clear the screen.
- */
- public void
-clear()
-{
-#if !MSDOS_COMPILER
- tputs(sc_clear, sc_height, putchr);
-#else
- flush();
-#if MSDOS_COMPILER==WIN32C
- win32_clear();
-#else
- _clearscreen(_GCLEARSCREEN);
-#endif
-#endif
-}
-
-/*
- * Clear from the cursor to the end of the cursor's line.
- * {{ This must not move the cursor. }}
- */
- public void
-clear_eol()
-{
-#if !MSDOS_COMPILER
- tputs(sc_eol_clear, 1, putchr);
-#else
-#if MSDOS_COMPILER==MSOFTC
- short top, left;
- short bot, right;
- struct rccoord tpos;
-
- flush();
- /*
- * Save current state.
- */
- tpos = _gettextposition();
- _gettextwindow(&top, &left, &bot, &right);
- /*
- * Set a temporary window to the current line,
- * from the cursor's position to the right edge of the screen.
- * Then clear that window.
- */
- _settextwindow(tpos.row, tpos.col, tpos.row, sc_width);
- _clearscreen(_GWINDOW);
- /*
- * Restore state.
- */
- _settextwindow(top, left, bot, right);
- _settextposition(tpos.row, tpos.col);
-#else
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
- flush();
- clreol();
-#else
-#if MSDOS_COMPILER==WIN32C
- DWORD nchars;
- COORD cpos;
- CONSOLE_SCREEN_BUFFER_INFO scr;
-
- flush();
- memset(&scr, 0, sizeof(scr));
- GetConsoleScreenBufferInfo(con_out, &scr);
- cpos.X = scr.dwCursorPosition.X;
- cpos.Y = scr.dwCursorPosition.Y;
- curr_attr = MAKEATTR(nm_fg_color, nm_bg_color);
- FillConsoleOutputAttribute(con_out, curr_attr,
- scr.dwSize.X - cpos.X, cpos, &nchars);
- FillConsoleOutputCharacter(con_out, ' ',
- scr.dwSize.X - cpos.X, cpos, &nchars);
-#endif
-#endif
-#endif
-#endif
-}
-
-/*
- * Clear the current line.
- * Clear the screen if there's off-screen memory below the display.
- */
- static void
-clear_eol_bot()
-{
-#if MSDOS_COMPILER
- clear_eol();
-#else
- if (below_mem)
- tputs(sc_eos_clear, 1, putchr);
- else
- tputs(sc_eol_clear, 1, putchr);
-#endif
-}
-
-/*
- * Clear the bottom line of the display.
- * Leave the cursor at the beginning of the bottom line.
- */
- public void
-clear_bot()
-{
- /*
- * If we're in a non-normal attribute mode, temporarily exit
- * the mode while we do the clear. Some terminals fill the
- * cleared area with the current attribute.
- */
- if (oldbot)
- lower_left();
- else
- line_left();
-
- if (attrmode == AT_NORMAL)
- clear_eol_bot();
- else
- {
- int saved_attrmode = attrmode;
-
- at_exit();
- clear_eol_bot();
- at_enter(saved_attrmode);
- }
-}
-
- public void
-at_enter(attr)
- int attr;
-{
- attr = apply_at_specials(attr);
-
-#if !MSDOS_COMPILER
- /* The one with the most priority is last. */
- if (attr & AT_UNDERLINE)
- tputs(sc_u_in, 1, putchr);
- if (attr & AT_BOLD)
- tputs(sc_b_in, 1, putchr);
- if (attr & AT_BLINK)
- tputs(sc_bl_in, 1, putchr);
- if (attr & AT_STANDOUT)
- tputs(sc_s_in, 1, putchr);
-#else
- flush();
- /* The one with the most priority is first. */
- if (attr & AT_STANDOUT)
- {
- SETCOLORS(so_fg_color, so_bg_color);
- } else if (attr & AT_BLINK)
- {
- SETCOLORS(bl_fg_color, bl_bg_color);
- }
- else if (attr & AT_BOLD)
- {
- SETCOLORS(bo_fg_color, bo_bg_color);
- }
- else if (attr & AT_UNDERLINE)
- {
- SETCOLORS(ul_fg_color, ul_bg_color);
- }
-#endif
-
- attrmode = attr;
-}
-
- public void
-at_exit()
-{
-#if !MSDOS_COMPILER
- /* Undo things in the reverse order we did them. */
- if (attrmode & AT_STANDOUT)
- tputs(sc_s_out, 1, putchr);
- if (attrmode & AT_BLINK)
- tputs(sc_bl_out, 1, putchr);
- if (attrmode & AT_BOLD)
- tputs(sc_b_out, 1, putchr);
- if (attrmode & AT_UNDERLINE)
- tputs(sc_u_out, 1, putchr);
-#else
- flush();
- SETCOLORS(nm_fg_color, nm_bg_color);
-#endif
-
- attrmode = AT_NORMAL;
-}
-
- public void
-at_switch(attr)
- int attr;
-{
- int new_attrmode = apply_at_specials(attr);
- int ignore_modes = AT_ANSI;
-
- if ((new_attrmode & ~ignore_modes) != (attrmode & ~ignore_modes))
- {
- at_exit();
- at_enter(attr);
- }
-}
-
- public int
-is_at_equiv(attr1, attr2)
- int attr1;
- int attr2;
-{
- attr1 = apply_at_specials(attr1);
- attr2 = apply_at_specials(attr2);
-
- return (attr1 == attr2);
-}
-
- public int
-apply_at_specials(attr)
- int attr;
-{
- if (attr & AT_BINARY)
- attr |= binattr;
- if (attr & AT_HILITE)
- attr |= AT_STANDOUT;
- attr &= ~(AT_BINARY|AT_HILITE);
-
- return attr;
-}
-
-#if 0 /* No longer used */
-/*
- * Erase the character to the left of the cursor
- * and move the cursor left.
- */
- public void
-backspace()
-{
-#if !MSDOS_COMPILER
- /*
- * Erase the previous character by overstriking with a space.
- */
- tputs(sc_backspace, 1, putchr);
- putchr(' ');
- tputs(sc_backspace, 1, putchr);
-#else
-#if MSDOS_COMPILER==MSOFTC
- struct rccoord tpos;
-
- flush();
- tpos = _gettextposition();
- if (tpos.col <= 1)
- return;
- _settextposition(tpos.row, tpos.col-1);
- _outtext(" ");
- _settextposition(tpos.row, tpos.col-1);
-#else
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
- cputs("\b");
-#else
-#if MSDOS_COMPILER==WIN32C
- COORD cpos;
- DWORD cChars;
- CONSOLE_SCREEN_BUFFER_INFO scr;
-
- flush();
- GetConsoleScreenBufferInfo(con_out, &scr);
- cpos = scr.dwCursorPosition;
- if (cpos.X <= 0)
- return;
- cpos.X--;
- SetConsoleCursorPosition(con_out, cpos);
- FillConsoleOutputCharacter(con_out, (TCHAR)' ', 1, cpos, &cChars);
- SetConsoleCursorPosition(con_out, cpos);
-#endif
-#endif
-#endif
-#endif
-}
-#endif /* 0 */
-
-/*
- * Output a plain backspace, without erasing the previous char.
- */
- public void
-putbs()
-{
-#if !MSDOS_COMPILER
- tputs(sc_backspace, 1, putchr);
-#else
- int row, col;
-
- flush();
- {
-#if MSDOS_COMPILER==MSOFTC
- struct rccoord tpos;
- tpos = _gettextposition();
- row = tpos.row;
- col = tpos.col;
-#else
-#if MSDOS_COMPILER==BORLANDC || MSDOS_COMPILER==DJGPPC
- row = wherey();
- col = wherex();
-#else
-#if MSDOS_COMPILER==WIN32C
- CONSOLE_SCREEN_BUFFER_INFO scr;
- GetConsoleScreenBufferInfo(con_out, &scr);
- row = scr.dwCursorPosition.Y - scr.srWindow.Top + 1;
- col = scr.dwCursorPosition.X - scr.srWindow.Left + 1;
-#endif
-#endif
-#endif
- }
- if (col <= 1)
- return;
- _settextposition(row, col-1);
-#endif /* MSDOS_COMPILER */
-}
-
-#if MSDOS_COMPILER==WIN32C
-/*
- * Determine whether an input character is waiting to be read.
- */
- static int
-win32_kbhit(tty)
- HANDLE tty;
-{
- INPUT_RECORD ip;
- DWORD read;
-
- if (keyCount > 0)
- return (TRUE);
-
- currentKey.ascii = 0;
- currentKey.scan = 0;
-
- /*
- * Wait for a real key-down event, but
- * ignore SHIFT and CONTROL key events.
- */
- do
- {
- PeekConsoleInput(tty, &ip, 1, &read);
- if (read == 0)
- return (FALSE);
- ReadConsoleInput(tty, &ip, 1, &read);
- } while (ip.EventType != KEY_EVENT ||
- ip.Event.KeyEvent.bKeyDown != TRUE ||
- ip.Event.KeyEvent.wVirtualScanCode == 0 ||
- ip.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT ||
- ip.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL ||
- ip.Event.KeyEvent.wVirtualKeyCode == VK_MENU);
-
- currentKey.ascii = ip.Event.KeyEvent.uChar.AsciiChar;
- currentKey.scan = ip.Event.KeyEvent.wVirtualScanCode;
- keyCount = ip.Event.KeyEvent.wRepeatCount;
-
- if (ip.Event.KeyEvent.dwControlKeyState &
- (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED))
- {
- switch (currentKey.scan)
- {
- case PCK_ALT_E: /* letter 'E' */
- currentKey.ascii = 0;
- break;
- }
- } else if (ip.Event.KeyEvent.dwControlKeyState &
- (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))
- {
- switch (currentKey.scan)
- {
- case PCK_RIGHT: /* right arrow */
- currentKey.scan = PCK_CTL_RIGHT;
- break;
- case PCK_LEFT: /* left arrow */
- currentKey.scan = PCK_CTL_LEFT;
- break;
- case PCK_DELETE: /* delete */
- currentKey.scan = PCK_CTL_DELETE;
- break;
- }
- }
- return (TRUE);
-}
-
-/*
- * Read a character from the keyboard.
- */
- public char
-WIN32getch(tty)
- int tty;
-{
- int ascii;
-
- if (pending_scancode)
- {
- pending_scancode = 0;
- return ((char)(currentKey.scan & 0x00FF));
- }
-
- while (win32_kbhit((HANDLE)tty) == FALSE)
- {
- Sleep(20);
- if (ABORT_SIGS())
- return ('\003');
- continue;
- }
- keyCount --;
- ascii = currentKey.ascii;
- /*
- * On PC's, the extended keys return a 2 byte sequence beginning
- * with '00', so if the ascii code is 00, the next byte will be
- * the lsb of the scan code.
- */
- pending_scancode = (ascii == 0x00);
- return ((char)ascii);
-}
-#endif
diff --git a/contrib/less/scrsize.c b/contrib/less/scrsize.c
deleted file mode 100644
index 45cf20a..0000000
--- a/contrib/less/scrsize.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-/*
- * This program is used to determine the screen dimensions on OS/2 systems.
- * Adapted from code written by Kyosuke Tokoro (NBG01720@nifty.ne.jp).
- */
-
-/*
- * When I wrote this routine, I consulted some part of the source code
- * of the xwininfo utility by X Consortium.
- *
- * Copyright (c) 1987, X Consortium
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the X Consortium shall not
- * be used in advertising or otherwise to promote the sale, use or other
- * dealings in this Software without prior written authorization from the X
- * Consortium.
- */
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-static int get_winsize(dpy, window, p_width, p_height)
- Display *dpy;
- Window window;
- int *p_width;
- int *p_height;
-{
- XWindowAttributes win_attributes;
- XSizeHints hints;
- long longjunk;
-
- if (!XGetWindowAttributes(dpy, window, &win_attributes))
- return 1;
- if (!XGetWMNormalHints(dpy, window, &hints, &longjunk))
- return 1;
- if (!(hints.flags & PResizeInc))
- return 1;
- if (hints.width_inc == 0 || hints.height_inc == 0)
- return 1;
- if (!(hints.flags & (PBaseSize|PMinSize)))
- return 1;
- if (hints.flags & PBaseSize)
- {
- win_attributes.width -= hints.base_width;
- win_attributes.height -= hints.base_height;
- } else
- {
- win_attributes.width -= hints.min_width;
- win_attributes.height -= hints.min_height;
- }
- *p_width = win_attributes.width / hints.width_inc;
- *p_height = win_attributes.height / hints.height_inc;
- return 0;
-}
-
-int main(argc, argv)
- int argc;
- char *argv[];
-{
- char *cp;
- Display *dpy;
- int size[2];
-
- _scrsize(size);
- cp = getenv("WINDOWID");
- if (cp != NULL)
- {
- dpy = XOpenDisplay(NULL);
- if (dpy != NULL)
- {
- get_winsize(dpy, (Window) atol(cp), &size[0], &size[1]);
- XCloseDisplay(dpy);
- }
- }
- printf("%i %i\n", size[0], size[1]);
- return (0);
-}
diff --git a/contrib/less/search.c b/contrib/less/search.c
deleted file mode 100644
index 3a15380..0000000
--- a/contrib/less/search.c
+++ /dev/null
@@ -1,1551 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines to search a file for a pattern.
- */
-
-#include "less.h"
-#include "position.h"
-#include "charset.h"
-
-#define MINPOS(a,b) (((a) < (b)) ? (a) : (b))
-#define MAXPOS(a,b) (((a) > (b)) ? (a) : (b))
-
-#if HAVE_POSIX_REGCOMP
-#include <regex.h>
-#ifdef REG_EXTENDED
-#define REGCOMP_FLAG REG_EXTENDED
-#else
-#define REGCOMP_FLAG 0
-#endif
-#endif
-#if HAVE_PCRE
-#include <pcre.h>
-#endif
-#if HAVE_RE_COMP
-char *re_comp();
-int re_exec();
-#endif
-#if HAVE_REGCMP
-char *regcmp();
-char *regex();
-extern char *__loc1;
-#endif
-#if HAVE_V8_REGCOMP
-#include "regexp.h"
-#endif
-
-static int match();
-
-extern int sigs;
-extern int how_search;
-extern int caseless;
-extern int linenums;
-extern int sc_height;
-extern int jump_sline;
-extern int bs_mode;
-extern int ctldisp;
-extern int status_col;
-extern void * constant ml_search;
-extern POSITION start_attnpos;
-extern POSITION end_attnpos;
-#if HILITE_SEARCH
-extern int hilite_search;
-extern int screen_trashed;
-extern int size_linebuf;
-extern int squished;
-extern int can_goto_line;
-extern int utf_mode;
-static int hide_hilite;
-static int oldbot;
-static POSITION prep_startpos;
-static POSITION prep_endpos;
-
-struct hilite
-{
- struct hilite *hl_next;
- POSITION hl_startpos;
- POSITION hl_endpos;
-};
-static struct hilite hilite_anchor = { NULL, NULL_POSITION, NULL_POSITION };
-#define hl_first hl_next
-#endif
-
-/*
- * These are the static variables that represent the "remembered"
- * search pattern.
- */
-#if HAVE_POSIX_REGCOMP
-static regex_t *regpattern = NULL;
-#endif
-#if HAVE_PCRE
-pcre *regpattern = NULL;
-#endif
-#if HAVE_RE_COMP
-int re_pattern = 0;
-#endif
-#if HAVE_REGCMP
-static char *cpattern = NULL;
-#endif
-#if HAVE_V8_REGCOMP
-static struct regexp *regpattern = NULL;
-#endif
-
-static int is_caseless;
-static int is_ucase_pattern;
-static int last_search_type;
-static char *last_pattern = NULL;
-
-#define CVT_TO_LC 01 /* Convert upper-case to lower-case */
-#define CVT_BS 02 /* Do backspace processing */
-#define CVT_CRLF 04 /* Remove CR after LF */
-#define CVT_ANSI 010 /* Remove ANSI escape sequences */
-
-/*
- * Get the length of a buffer needed to convert a string.
- */
- static int
-cvt_length(len, ops)
- int len;
- int ops;
-{
- if (utf_mode)
- /*
- * Just copying a string in UTF-8 mode can cause it to grow
- * in length.
- * Six output bytes for one input byte is the worst case
- * (and unfortunately is far more than is needed in any
- * non-pathological situation, so this is very wasteful).
- */
- len *= 6;
- return len + 1;
-}
-
-/*
- * Convert text. Perform one or more of these transformations:
- */
- static void
-cvt_text(odst, osrc, lenp, ops)
- char *odst;
- char *osrc;
- int *lenp;
- int ops;
-{
- char *dst;
- char *src;
- register char *src_end;
- LWCHAR ch;
-
- if (lenp != NULL)
- src_end = osrc + *lenp;
- else
- src_end = osrc + strlen(osrc);
-
- for (src = osrc, dst = odst; src < src_end; )
- {
- ch = step_char(&src, +1, src_end);
- if ((ops & CVT_TO_LC) && IS_UPPER(ch))
- {
- /* Convert uppercase to lowercase. */
- put_wchar(&dst, TO_LOWER(ch));
- } else if ((ops & CVT_BS) && ch == '\b' && dst > odst)
- {
- /* Delete backspace and preceding char. */
- do {
- dst--;
- } while (dst > odst &&
- !IS_ASCII_OCTET(*dst) && !IS_UTF8_LEAD(*dst));
- } else if ((ops & CVT_ANSI) && IS_CSI_START(ch))
- {
- /* Skip to end of ANSI escape sequence. */
- while (src + 1 != src_end)
- if (!is_ansi_middle(*++src))
- break;
- } else
- /* Just copy. */
- put_wchar(&dst, ch);
- }
- if ((ops & CVT_CRLF) && dst > odst && dst[-1] == '\r')
- dst--;
- *dst = '\0';
- if (lenp != NULL)
- *lenp = dst - odst;
-}
-
-/*
- * Determine which conversions to perform.
- */
- static int
-get_cvt_ops()
-{
- int ops = 0;
- if (is_caseless || bs_mode == BS_SPECIAL)
- {
- if (is_caseless)
- ops |= CVT_TO_LC;
- if (bs_mode == BS_SPECIAL)
- ops |= CVT_BS;
- if (bs_mode != BS_CONTROL)
- ops |= CVT_CRLF;
- } else if (bs_mode != BS_CONTROL)
- {
- ops |= CVT_CRLF;
- }
- if (ctldisp == OPT_ONPLUS)
- ops |= CVT_ANSI;
- return (ops);
-}
-
-/*
- * Are there any uppercase letters in this string?
- */
- static int
-is_ucase(str)
- char *str;
-{
- char *str_end = str + strlen(str);
- LWCHAR ch;
-
- while (str < str_end)
- {
- ch = step_char(&str, +1, str_end);
- if (IS_UPPER(ch))
- return (1);
- }
- return (0);
-}
-
-/*
- * Is there a previous (remembered) search pattern?
- */
- static int
-prev_pattern()
-{
- if (last_search_type & SRCH_NO_REGEX)
- return (last_pattern != NULL);
-#if HAVE_POSIX_REGCOMP
- return (regpattern != NULL);
-#endif
-#if HAVE_PCRE
- return (regpattern != NULL);
-#endif
-#if HAVE_RE_COMP
- return (re_pattern != 0);
-#endif
-#if HAVE_REGCMP
- return (cpattern != NULL);
-#endif
-#if HAVE_V8_REGCOMP
- return (regpattern != NULL);
-#endif
-#if NO_REGEX
- return (last_pattern != NULL);
-#endif
-}
-
-#if HILITE_SEARCH
-/*
- * Repaint the hilites currently displayed on the screen.
- * Repaint each line which contains highlighted text.
- * If on==0, force all hilites off.
- */
- public void
-repaint_hilite(on)
- int on;
-{
- int slinenum;
- POSITION pos;
- POSITION epos;
- int save_hide_hilite;
-
- if (squished)
- repaint();
-
- save_hide_hilite = hide_hilite;
- if (!on)
- {
- if (hide_hilite)
- return;
- hide_hilite = 1;
- }
-
- if (!can_goto_line)
- {
- repaint();
- hide_hilite = save_hide_hilite;
- return;
- }
-
- for (slinenum = TOP; slinenum < TOP + sc_height-1; slinenum++)
- {
- pos = position(slinenum);
- if (pos == NULL_POSITION)
- continue;
- epos = position(slinenum+1);
-#if 0
- /*
- * If any character in the line is highlighted,
- * repaint the line.
- *
- * {{ This doesn't work -- if line is drawn with highlights
- * which should be erased (e.g. toggle -i with status column),
- * we must redraw the line even if it has no highlights.
- * For now, just repaint every line. }}
- */
- if (is_hilited(pos, epos, 1, NULL))
-#endif
- {
- (void) forw_line(pos);
- goto_line(slinenum);
- put_line();
- }
- }
- if (!oldbot)
- lower_left();
- hide_hilite = save_hide_hilite;
-}
-
-/*
- * Clear the attn hilite.
- */
- public void
-clear_attn()
-{
- int slinenum;
- POSITION old_start_attnpos;
- POSITION old_end_attnpos;
- POSITION pos;
- POSITION epos;
- int moved = 0;
-
- if (start_attnpos == NULL_POSITION)
- return;
- old_start_attnpos = start_attnpos;
- old_end_attnpos = end_attnpos;
- start_attnpos = end_attnpos = NULL_POSITION;
-
- if (!can_goto_line)
- {
- repaint();
- return;
- }
- if (squished)
- repaint();
-
- for (slinenum = TOP; slinenum < TOP + sc_height-1; slinenum++)
- {
- pos = position(slinenum);
- if (pos == NULL_POSITION)
- continue;
- epos = position(slinenum+1);
- if (pos < old_end_attnpos &&
- (epos == NULL_POSITION || epos > old_start_attnpos))
- {
- (void) forw_line(pos);
- goto_line(slinenum);
- put_line();
- moved = 1;
- }
- }
- if (moved)
- lower_left();
-}
-#endif
-
-/*
- * Hide search string highlighting.
- */
- public void
-undo_search()
-{
- if (!prev_pattern())
- {
- error("No previous regular expression", NULL_PARG);
- return;
- }
-#if HILITE_SEARCH
- hide_hilite = !hide_hilite;
- repaint_hilite(1);
-#endif
-}
-
-/*
- * Compile a search pattern, for future use by match_pattern.
- */
- static int
-compile_pattern2(pattern, search_type)
- char *pattern;
- int search_type;
-{
- if ((search_type & SRCH_NO_REGEX) == 0)
- {
-#if HAVE_POSIX_REGCOMP
- regex_t *s = (regex_t *) ecalloc(1, sizeof(regex_t));
- if (regcomp(s, pattern, REGCOMP_FLAG))
- {
- free(s);
- error("Invalid pattern", NULL_PARG);
- return (-1);
- }
- if (regpattern != NULL)
- regfree(regpattern);
- regpattern = s;
-#endif
-#if HAVE_PCRE
- pcre *comp;
- const char *errstring;
- int erroffset;
- PARG parg;
- comp = pcre_compile(pattern, 0,
- &errstring, &erroffset, NULL);
- if (comp == NULL)
- {
- parg.p_string = (char *) errstring;
- error("%s", &parg);
- return (-1);
- }
- regpattern = comp;
-#endif
-#if HAVE_RE_COMP
- PARG parg;
- if ((parg.p_string = re_comp(pattern)) != NULL)
- {
- error("%s", &parg);
- return (-1);
- }
- re_pattern = 1;
-#endif
-#if HAVE_REGCMP
- char *s;
- if ((s = regcmp(pattern, 0)) == NULL)
- {
- error("Invalid pattern", NULL_PARG);
- return (-1);
- }
- if (cpattern != NULL)
- free(cpattern);
- cpattern = s;
-#endif
-#if HAVE_V8_REGCOMP
- struct regexp *s;
- if ((s = regcomp(pattern)) == NULL)
- {
- /*
- * regcomp has already printed an error message
- * via regerror().
- */
- return (-1);
- }
- if (regpattern != NULL)
- free(regpattern);
- regpattern = s;
-#endif
- }
-
- if (last_pattern != NULL)
- free(last_pattern);
- last_pattern = (char *) calloc(1, strlen(pattern)+1);
- if (last_pattern != NULL)
- strcpy(last_pattern, pattern);
-
- last_search_type = search_type;
- return (0);
-}
-
-/*
- * Like compile_pattern, but convert the pattern to lowercase if necessary.
- */
- static int
-compile_pattern(pattern, search_type)
- char *pattern;
- int search_type;
-{
- char *cvt_pattern;
- int result;
-
- if (caseless != OPT_ONPLUS)
- cvt_pattern = pattern;
- else
- {
- cvt_pattern = (char*) ecalloc(1, cvt_length(strlen(pattern), CVT_TO_LC));
- cvt_text(cvt_pattern, pattern, (int *)NULL, CVT_TO_LC);
- }
- result = compile_pattern2(cvt_pattern, search_type);
- if (cvt_pattern != pattern)
- free(cvt_pattern);
- return (result);
-}
-
-/*
- * Forget that we have a compiled pattern.
- */
- static void
-uncompile_pattern()
-{
-#if HAVE_POSIX_REGCOMP
- if (regpattern != NULL)
- regfree(regpattern);
- regpattern = NULL;
-#endif
-#if HAVE_PCRE
- if (regpattern != NULL)
- pcre_free(regpattern);
- regpattern = NULL;
-#endif
-#if HAVE_RE_COMP
- re_pattern = 0;
-#endif
-#if HAVE_REGCMP
- if (cpattern != NULL)
- free(cpattern);
- cpattern = NULL;
-#endif
-#if HAVE_V8_REGCOMP
- if (regpattern != NULL)
- free(regpattern);
- regpattern = NULL;
-#endif
- last_pattern = NULL;
-}
-
-/*
- * Perform a pattern match with the previously compiled pattern.
- * Set sp and ep to the start and end of the matched string.
- */
- static int
-match_pattern(line, line_len, sp, ep, notbol)
- char *line;
- int line_len;
- char **sp;
- char **ep;
- int notbol;
-{
- int matched;
-
- if (last_search_type & SRCH_NO_REGEX)
- return (match(last_pattern, strlen(last_pattern), line, line_len, sp, ep));
-
-#if HAVE_POSIX_REGCOMP
- {
- regmatch_t rm;
- int flags = (notbol) ? REG_NOTBOL : 0;
- matched = !regexec(regpattern, line, 1, &rm, flags);
- if (!matched)
- return (0);
-#ifndef __WATCOMC__
- *sp = line + rm.rm_so;
- *ep = line + rm.rm_eo;
-#else
- *sp = rm.rm_sp;
- *ep = rm.rm_ep;
-#endif
- }
-#endif
-#if HAVE_PCRE
- {
- int flags = (notbol) ? PCRE_NOTBOL : 0;
- int ovector[3];
- matched = pcre_exec(regpattern, NULL, line, line_len,
- 0, flags, ovector, 3) >= 0;
- if (!matched)
- return (0);
- *sp = line + ovector[0];
- *ep = line + ovector[1];
- }
-#endif
-#if HAVE_RE_COMP
- matched = (re_exec(line) == 1);
- /*
- * re_exec doesn't seem to provide a way to get the matched string.
- */
- *sp = *ep = NULL;
-#endif
-#if HAVE_REGCMP
- *ep = regex(cpattern, line);
- matched = (*ep != NULL);
- if (!matched)
- return (0);
- *sp = __loc1;
-#endif
-#if HAVE_V8_REGCOMP
-#if HAVE_REGEXEC2
- matched = regexec2(regpattern, line, notbol);
-#else
- matched = regexec(regpattern, line);
-#endif
- if (!matched)
- return (0);
- *sp = regpattern->startp[0];
- *ep = regpattern->endp[0];
-#endif
-#if NO_REGEX
- matched = match(last_pattern, strlen(last_pattern), line, line_len, sp, ep);
-#endif
- return (matched);
-}
-
-#if HILITE_SEARCH
-/*
- * Clear the hilite list.
- */
- public void
-clr_hilite()
-{
- struct hilite *hl;
- struct hilite *nexthl;
-
- for (hl = hilite_anchor.hl_first; hl != NULL; hl = nexthl)
- {
- nexthl = hl->hl_next;
- free((void*)hl);
- }
- hilite_anchor.hl_first = NULL;
- prep_startpos = prep_endpos = NULL_POSITION;
-}
-
-/*
- * Should any characters in a specified range be highlighted?
- */
- static int
-is_hilited_range(pos, epos)
- POSITION pos;
- POSITION epos;
-{
- struct hilite *hl;
-
- /*
- * Look at each highlight and see if any part of it falls in the range.
- */
- for (hl = hilite_anchor.hl_first; hl != NULL; hl = hl->hl_next)
- {
- if (hl->hl_endpos > pos &&
- (epos == NULL_POSITION || epos > hl->hl_startpos))
- return (1);
- }
- return (0);
-}
-
-/*
- * Should any characters in a specified range be highlighted?
- * If nohide is nonzero, don't consider hide_hilite.
- */
- public int
-is_hilited(pos, epos, nohide, p_matches)
- POSITION pos;
- POSITION epos;
- int nohide;
- int *p_matches;
-{
- int match;
-
- if (p_matches != NULL)
- *p_matches = 0;
-
- if (!status_col &&
- start_attnpos != NULL_POSITION &&
- pos < end_attnpos &&
- (epos == NULL_POSITION || epos > start_attnpos))
- /*
- * The attn line overlaps this range.
- */
- return (1);
-
- match = is_hilited_range(pos, epos);
- if (!match)
- return (0);
-
- if (p_matches != NULL)
- /*
- * Report matches, even if we're hiding highlights.
- */
- *p_matches = 1;
-
- if (hilite_search == 0)
- /*
- * Not doing highlighting.
- */
- return (0);
-
- if (!nohide && hide_hilite)
- /*
- * Highlighting is hidden.
- */
- return (0);
-
- return (1);
-}
-
-/*
- * Add a new hilite to a hilite list.
- */
- static void
-add_hilite(anchor, hl)
- struct hilite *anchor;
- struct hilite *hl;
-{
- struct hilite *ihl;
-
- /*
- * Hilites are sorted in the list; find where new one belongs.
- * Insert new one after ihl.
- */
- for (ihl = anchor; ihl->hl_next != NULL; ihl = ihl->hl_next)
- {
- if (ihl->hl_next->hl_startpos > hl->hl_startpos)
- break;
- }
-
- /*
- * Truncate hilite so it doesn't overlap any existing ones
- * above and below it.
- */
- if (ihl != anchor)
- hl->hl_startpos = MAXPOS(hl->hl_startpos, ihl->hl_endpos);
- if (ihl->hl_next != NULL)
- hl->hl_endpos = MINPOS(hl->hl_endpos, ihl->hl_next->hl_startpos);
- if (hl->hl_startpos >= hl->hl_endpos)
- {
- /*
- * Hilite was truncated out of existence.
- */
- free(hl);
- return;
- }
- hl->hl_next = ihl->hl_next;
- ihl->hl_next = hl;
-}
-
-/*
- * Adjust hl_startpos & hl_endpos to account for processing by cvt_text.
- */
- static void
-adj_hilite(anchor, linepos, cvt_ops)
- struct hilite *anchor;
- POSITION linepos;
- int cvt_ops;
-{
- char *line;
- char *oline;
- int line_len;
- char *line_end;
- struct hilite *hl;
- int checkstart;
- POSITION opos;
- POSITION npos;
- LWCHAR ch;
- int ncwidth;
-
- /*
- * The line was already scanned and hilites were added (in hilite_line).
- * But it was assumed that each char position in the line
- * correponds to one char position in the file.
- * This may not be true if cvt_text modified the line.
- * Get the raw line again. Look at each character.
- */
- (void) forw_raw_line(linepos, &line, &line_len);
- line_end = line + line_len;
- opos = npos = linepos;
- hl = anchor->hl_first;
- checkstart = TRUE;
- while (hl != NULL)
- {
- /*
- * See if we need to adjust the current hl_startpos or
- * hl_endpos. After adjusting startpos[i], move to endpos[i].
- * After adjusting endpos[i], move to startpos[i+1].
- * The hilite list must be sorted thus:
- * startpos[0] < endpos[0] <= startpos[1] < endpos[1] <= etc.
- */
- if (checkstart && hl->hl_startpos == opos)
- {
- hl->hl_startpos = npos;
- checkstart = FALSE;
- continue; /* {{ not really necessary }} */
- } else if (!checkstart && hl->hl_endpos == opos)
- {
- hl->hl_endpos = npos;
- checkstart = TRUE;
- hl = hl->hl_next;
- continue; /* {{ necessary }} */
- }
- if (line == line_end)
- break;
-
- /* Get the next char from the line. */
- oline = line;
- ch = step_char(&line, +1, line_end);
- ncwidth = line - oline;
- npos += ncwidth;
-
- /* Figure out how this char was processed by cvt_text. */
- if ((cvt_ops & CVT_BS) && ch == '\b')
- {
- /* Skip the backspace and the following char. */
- oline = line;
- ch = step_char(&line, +1, line_end);
- ncwidth = line - oline;
- npos += ncwidth;
- } else if ((cvt_ops & CVT_TO_LC) && IS_UPPER(ch))
- {
- /* Converted uppercase to lower.
- * Note that this may have changed the number of bytes
- * that the character occupies. */
- char dbuf[6];
- char *dst = dbuf;
- put_wchar(&dst, TO_LOWER(ch));
- opos += dst - dbuf;
- } else if ((cvt_ops & CVT_ANSI) && IS_CSI_START(ch))
- {
- /* Skip to end of ANSI escape sequence. */
- while (line < line_end)
- {
- npos++;
- if (!is_ansi_middle(*++line))
- break;
- }
- } else
- {
- /* Ordinary unprocessed character. */
- opos += ncwidth;
- }
- }
-}
-
-/*
- * Make a hilite for each string in a physical line which matches
- * the current pattern.
- * sp,ep delimit the first match already found.
- */
- static void
-hilite_line(linepos, line, line_len, sp, ep, cvt_ops)
- POSITION linepos;
- char *line;
- int line_len;
- char *sp;
- char *ep;
- int cvt_ops;
-{
- char *searchp;
- char *line_end = line + line_len;
- struct hilite *hl;
- struct hilite hilites;
-
- if (sp == NULL || ep == NULL)
- return;
- /*
- * sp and ep delimit the first match in the line.
- * Mark the corresponding file positions, then
- * look for further matches and mark them.
- * {{ This technique, of calling match_pattern on subsequent
- * substrings of the line, may mark more than is correct
- * if the pattern starts with "^". This bug is fixed
- * for those regex functions that accept a notbol parameter
- * (currently POSIX, PCRE and V8-with-regexec2). }}
- */
- searchp = line;
- /*
- * Put the hilites into a temporary list until they're adjusted.
- */
- hilites.hl_first = NULL;
- do {
- if (ep > sp)
- {
- /*
- * Assume that each char position in the "line"
- * buffer corresponds to one char position in the file.
- * This is not quite true; we need to adjust later.
- */
- hl = (struct hilite *) ecalloc(1, sizeof(struct hilite));
- hl->hl_startpos = linepos + (sp-line);
- hl->hl_endpos = linepos + (ep-line);
- add_hilite(&hilites, hl);
- }
- /*
- * If we matched more than zero characters,
- * move to the first char after the string we matched.
- * If we matched zero, just move to the next char.
- */
- if (ep > searchp)
- searchp = ep;
- else if (searchp != line_end)
- searchp++;
- else /* end of line */
- break;
- } while (match_pattern(searchp, line_end - searchp, &sp, &ep, 1));
-
- /*
- * If there were backspaces in the original line, they
- * were removed, and hl_startpos/hl_endpos are not correct.
- * {{ This is very ugly. }}
- */
- adj_hilite(&hilites, linepos, cvt_ops);
-
- /*
- * Now put the hilites into the real list.
- */
- while ((hl = hilites.hl_next) != NULL)
- {
- hilites.hl_next = hl->hl_next;
- add_hilite(&hilite_anchor, hl);
- }
-}
-#endif
-
-/*
- * Change the caseless-ness of searches.
- * Updates the internal search state to reflect a change in the -i flag.
- */
- public void
-chg_caseless()
-{
- if (!is_ucase_pattern)
- /*
- * Pattern did not have uppercase.
- * Just set the search caselessness to the global caselessness.
- */
- is_caseless = caseless;
- else
- /*
- * Pattern did have uppercase.
- * Discard the pattern; we can't change search caselessness now.
- */
- uncompile_pattern();
-}
-
-#if HILITE_SEARCH
-/*
- * Find matching text which is currently on screen and highlight it.
- */
- static void
-hilite_screen()
-{
- struct scrpos scrpos;
-
- get_scrpos(&scrpos);
- if (scrpos.pos == NULL_POSITION)
- return;
- prep_hilite(scrpos.pos, position(BOTTOM_PLUS_ONE), -1);
- repaint_hilite(1);
-}
-
-/*
- * Change highlighting parameters.
- */
- public void
-chg_hilite()
-{
- /*
- * Erase any highlights currently on screen.
- */
- clr_hilite();
- hide_hilite = 0;
-
- if (hilite_search == OPT_ONPLUS)
- /*
- * Display highlights.
- */
- hilite_screen();
-}
-#endif
-
-/*
- * Figure out where to start a search.
- */
- static POSITION
-search_pos(search_type)
- int search_type;
-{
- POSITION pos;
- int linenum;
-
- if (empty_screen())
- {
- /*
- * Start at the beginning (or end) of the file.
- * The empty_screen() case is mainly for
- * command line initiated searches;
- * for example, "+/xyz" on the command line.
- * Also for multi-file (SRCH_PAST_EOF) searches.
- */
- if (search_type & SRCH_FORW)
- {
- return (ch_zero());
- } else
- {
- pos = ch_length();
- if (pos == NULL_POSITION)
- {
- (void) ch_end_seek();
- pos = ch_length();
- }
- return (pos);
- }
- }
- if (how_search)
- {
- /*
- * Search does not include current screen.
- */
- if (search_type & SRCH_FORW)
- linenum = BOTTOM_PLUS_ONE;
- else
- linenum = TOP;
- pos = position(linenum);
- } else
- {
- /*
- * Search includes current screen.
- * It starts at the jump target (if searching backwards),
- * or at the jump target plus one (if forwards).
- */
- linenum = adjsline(jump_sline);
- pos = position(linenum);
- if (search_type & SRCH_FORW)
- {
- pos = forw_raw_line(pos, (char **)NULL, (int *)NULL);
- while (pos == NULL_POSITION)
- {
- if (++linenum >= sc_height)
- break;
- pos = position(linenum);
- }
- } else
- {
- while (pos == NULL_POSITION)
- {
- if (--linenum < 0)
- break;
- pos = position(linenum);
- }
- }
- }
- return (pos);
-}
-
-/*
- * Search a subset of the file, specified by start/end position.
- */
- static int
-search_range(pos, endpos, search_type, matches, maxlines, plinepos, pendpos)
- POSITION pos;
- POSITION endpos;
- int search_type;
- int matches;
- int maxlines;
- POSITION *plinepos;
- POSITION *pendpos;
-{
- char *line;
- char *cline;
- int line_len;
- LINENUM linenum;
- char *sp, *ep;
- int line_match;
- int cvt_ops;
- POSITION linepos, oldpos;
-
- linenum = find_linenum(pos);
- oldpos = pos;
- for (;;)
- {
- /*
- * Get lines until we find a matching one or until
- * we hit end-of-file (or beginning-of-file if we're
- * going backwards), or until we hit the end position.
- */
- if (ABORT_SIGS())
- {
- /*
- * A signal aborts the search.
- */
- return (-1);
- }
-
- if ((endpos != NULL_POSITION && pos >= endpos) || maxlines == 0)
- {
- /*
- * Reached end position without a match.
- */
- if (pendpos != NULL)
- *pendpos = pos;
- return (matches);
- }
- if (maxlines > 0)
- maxlines--;
-
- if (search_type & SRCH_FORW)
- {
- /*
- * Read the next line, and save the
- * starting position of that line in linepos.
- */
- linepos = pos;
- pos = forw_raw_line(pos, &line, &line_len);
- if (linenum != 0)
- linenum++;
- } else
- {
- /*
- * Read the previous line and save the
- * starting position of that line in linepos.
- */
- pos = back_raw_line(pos, &line, &line_len);
- linepos = pos;
- if (linenum != 0)
- linenum--;
- }
-
- if (pos == NULL_POSITION)
- {
- /*
- * Reached EOF/BOF without a match.
- */
- if (pendpos != NULL)
- *pendpos = oldpos;
- return (matches);
- }
-
- /*
- * If we're using line numbers, we might as well
- * remember the information we have now (the position
- * and line number of the current line).
- * Don't do it for every line because it slows down
- * the search. Remember the line number only if
- * we're "far" from the last place we remembered it.
- */
- if (linenums && abs((int)(pos - oldpos)) > 1024)
- add_lnum(linenum, pos);
- oldpos = pos;
-
- /*
- * If it's a caseless search, convert the line to lowercase.
- * If we're doing backspace processing, delete backspaces.
- */
- cvt_ops = get_cvt_ops();
- cline = calloc(1, cvt_length(line_len, cvt_ops));
- cvt_text(cline, line, &line_len, cvt_ops);
-
- /*
- * Test the next line to see if we have a match.
- * We are successful if we either want a match and got one,
- * or if we want a non-match and got one.
- */
- line_match = match_pattern(cline, line_len, &sp, &ep, 0);
- line_match = (!(search_type & SRCH_NO_MATCH) && line_match) ||
- ((search_type & SRCH_NO_MATCH) && !line_match);
- if (!line_match)
- {
- free(cline);
- continue;
- }
- /*
- * Got a match.
- */
- if (search_type & SRCH_FIND_ALL)
- {
-#if HILITE_SEARCH
- /*
- * We are supposed to find all matches in the range.
- * Just add the matches in this line to the
- * hilite list and keep searching.
- */
- if (line_match)
- hilite_line(linepos, cline, line_len, sp, ep, cvt_ops);
-#endif
- free(cline);
- } else if (--matches <= 0)
- {
- /*
- * Found the one match we're looking for.
- * Return it.
- */
-#if HILITE_SEARCH
- if (hilite_search == OPT_ON)
- {
- /*
- * Clear the hilite list and add only
- * the matches in this one line.
- */
- clr_hilite();
- if (line_match)
- hilite_line(linepos, cline, line_len, sp, ep, cvt_ops);
- }
-#endif
- free(cline);
- if (plinepos != NULL)
- *plinepos = linepos;
- return (0);
- }
- }
-}
-
- /*
- * search for a pattern in history. If found, compile that pattern.
- */
- static int
-hist_pattern(search_type)
- int search_type;
-{
-#if CMD_HISTORY
- char *pattern;
-
- set_mlist(ml_search, 0);
- pattern = cmd_lastpattern();
- if (pattern == NULL)
- return (0);
-
- if (compile_pattern(pattern, search_type) < 0)
- return (0);
-
- is_ucase_pattern = is_ucase(pattern);
- if (is_ucase_pattern && caseless != OPT_ONPLUS)
- is_caseless = 0;
- else
- is_caseless = caseless;
-
-#if HILITE_SEARCH
- if (hilite_search == OPT_ONPLUS && !hide_hilite)
- hilite_screen();
-#endif
-
- return (1);
-#else /* CMD_HISTORY */
- return (0);
-#endif /* CMD_HISTORY */
-}
-
-/*
- * Search for the n-th occurrence of a specified pattern,
- * either forward or backward.
- * Return the number of matches not yet found in this file
- * (that is, n minus the number of matches found).
- * Return -1 if the search should be aborted.
- * Caller may continue the search in another file
- * if less than n matches are found in this file.
- */
- public int
-search(search_type, pattern, n)
- int search_type;
- char *pattern;
- int n;
-{
- POSITION pos;
- int result;
-
- if (pattern == NULL || *pattern == '\0')
- {
- /*
- * A null pattern means use the previously compiled pattern.
- */
- if (!prev_pattern() && !hist_pattern(search_type))
- {
- error("No previous regular expression", NULL_PARG);
- return (-1);
- }
- if ((search_type & SRCH_NO_REGEX) !=
- (last_search_type & SRCH_NO_REGEX))
- {
- error("Please re-enter search pattern", NULL_PARG);
- return -1;
- }
-#if HILITE_SEARCH
- if (hilite_search == OPT_ON)
- {
- /*
- * Erase the highlights currently on screen.
- * If the search fails, we'll redisplay them later.
- */
- repaint_hilite(0);
- }
- if (hilite_search == OPT_ONPLUS && hide_hilite)
- {
- /*
- * Highlight any matches currently on screen,
- * before we actually start the search.
- */
- hide_hilite = 0;
- hilite_screen();
- }
- hide_hilite = 0;
-#endif
- } else
- {
- /*
- * Compile the pattern.
- */
- if (compile_pattern(pattern, search_type) < 0)
- return (-1);
- /*
- * Ignore case if -I is set OR
- * -i is set AND the pattern is all lowercase.
- */
- is_ucase_pattern = is_ucase(pattern);
- if (is_ucase_pattern && caseless != OPT_ONPLUS)
- is_caseless = 0;
- else
- is_caseless = caseless;
-#if HILITE_SEARCH
- if (hilite_search)
- {
- /*
- * Erase the highlights currently on screen.
- * Also permanently delete them from the hilite list.
- */
- repaint_hilite(0);
- hide_hilite = 0;
- clr_hilite();
- }
- if (hilite_search == OPT_ONPLUS)
- {
- /*
- * Highlight any matches currently on screen,
- * before we actually start the search.
- */
- hilite_screen();
- }
-#endif
- }
-
- /*
- * Figure out where to start the search.
- */
- pos = search_pos(search_type);
- if (pos == NULL_POSITION)
- {
- /*
- * Can't find anyplace to start searching from.
- */
- if (search_type & SRCH_PAST_EOF)
- return (n);
- /* repaint(); -- why was this here? */
- error("Nothing to search", NULL_PARG);
- return (-1);
- }
-
- n = search_range(pos, NULL_POSITION, search_type, n, -1,
- &pos, (POSITION*)NULL);
- if (n != 0)
- {
- /*
- * Search was unsuccessful.
- */
-#if HILITE_SEARCH
- if (hilite_search == OPT_ON && n > 0)
- /*
- * Redisplay old hilites.
- */
- repaint_hilite(1);
-#endif
- return (n);
- }
-
- if (!(search_type & SRCH_NO_MOVE))
- {
- /*
- * Go to the matching line.
- */
- jump_loc(pos, jump_sline);
- }
-
-#if HILITE_SEARCH
- if (hilite_search == OPT_ON)
- /*
- * Display new hilites in the matching line.
- */
- repaint_hilite(1);
-#endif
- return (0);
-}
-
-
-#if HILITE_SEARCH
-/*
- * Prepare hilites in a given range of the file.
- *
- * The pair (prep_startpos,prep_endpos) delimits a contiguous region
- * of the file that has been "prepared"; that is, scanned for matches for
- * the current search pattern, and hilites have been created for such matches.
- * If prep_startpos == NULL_POSITION, the prep region is empty.
- * If prep_endpos == NULL_POSITION, the prep region extends to EOF.
- * prep_hilite asks that the range (spos,epos) be covered by the prep region.
- */
- public void
-prep_hilite(spos, epos, maxlines)
- POSITION spos;
- POSITION epos;
- int maxlines;
-{
- POSITION nprep_startpos = prep_startpos;
- POSITION nprep_endpos = prep_endpos;
- POSITION new_epos;
- POSITION max_epos;
- int result;
- int i;
-/*
- * Search beyond where we're asked to search, so the prep region covers
- * more than we need. Do one big search instead of a bunch of small ones.
- */
-#define SEARCH_MORE (3*size_linebuf)
-
- if (!prev_pattern())
- return;
-
- /*
- * If we're limited to a max number of lines, figure out the
- * file position we should stop at.
- */
- if (maxlines < 0)
- max_epos = NULL_POSITION;
- else
- {
- max_epos = spos;
- for (i = 0; i < maxlines; i++)
- max_epos = forw_raw_line(max_epos, (char **)NULL, (int *)NULL);
- }
-
- /*
- * Find two ranges:
- * The range that we need to search (spos,epos); and the range that
- * the "prep" region will then cover (nprep_startpos,nprep_endpos).
- */
-
- if (prep_startpos == NULL_POSITION ||
- (epos != NULL_POSITION && epos < prep_startpos) ||
- spos > prep_endpos)
- {
- /*
- * New range is not contiguous with old prep region.
- * Discard the old prep region and start a new one.
- */
- clr_hilite();
- if (epos != NULL_POSITION)
- epos += SEARCH_MORE;
- nprep_startpos = spos;
- } else
- {
- /*
- * New range partially or completely overlaps old prep region.
- */
- if (epos == NULL_POSITION)
- {
- /*
- * New range goes to end of file.
- */
- ;
- } else if (epos > prep_endpos)
- {
- /*
- * New range ends after old prep region.
- * Extend prep region to end at end of new range.
- */
- epos += SEARCH_MORE;
- } else /* (epos <= prep_endpos) */
- {
- /*
- * New range ends within old prep region.
- * Truncate search to end at start of old prep region.
- */
- epos = prep_startpos;
- }
-
- if (spos < prep_startpos)
- {
- /*
- * New range starts before old prep region.
- * Extend old prep region backwards to start at
- * start of new range.
- */
- if (spos < SEARCH_MORE)
- spos = 0;
- else
- spos -= SEARCH_MORE;
- nprep_startpos = spos;
- } else /* (spos >= prep_startpos) */
- {
- /*
- * New range starts within or after old prep region.
- * Trim search to start at end of old prep region.
- */
- spos = prep_endpos;
- }
- }
-
- if (epos != NULL_POSITION && max_epos != NULL_POSITION &&
- epos > max_epos)
- /*
- * Don't go past the max position we're allowed.
- */
- epos = max_epos;
-
- if (epos == NULL_POSITION || epos > spos)
- {
- result = search_range(spos, epos, SRCH_FORW|SRCH_FIND_ALL, 0,
- maxlines, (POSITION*)NULL, &new_epos);
- if (result < 0)
- return;
- if (prep_endpos == NULL_POSITION || new_epos > prep_endpos)
- nprep_endpos = new_epos;
- }
- prep_startpos = nprep_startpos;
- prep_endpos = nprep_endpos;
-}
-#endif
-
-/*
- * Simple pattern matching function.
- * It supports no metacharacters like *, etc.
- */
- static int
-match(pattern, pattern_len, buf, buf_len, pfound, pend)
- char *pattern;
- int pattern_len;
- char *buf;
- int buf_len;
- char **pfound, **pend;
-{
- register char *pp, *lp;
- register char *pattern_end = pattern + pattern_len;
- register char *buf_end = buf + buf_len;
-
- for ( ; buf < buf_end; buf++)
- {
- for (pp = pattern, lp = buf; *pp == *lp; pp++, lp++)
- if (pp == pattern_end || lp == buf_end)
- break;
- if (pp == pattern_end)
- {
- if (pfound != NULL)
- *pfound = buf;
- if (pend != NULL)
- *pend = lp;
- return (1);
- }
- }
- return (0);
-}
-
-#if HAVE_V8_REGCOMP
-/*
- * This function is called by the V8 regcomp to report
- * errors in regular expressions.
- */
- void
-regerror(s)
- char *s;
-{
- PARG parg;
-
- parg.p_string = s;
- error("%s", &parg);
-}
-#endif
-
diff --git a/contrib/less/signal.c b/contrib/less/signal.c
deleted file mode 100644
index ce3714c..0000000
--- a/contrib/less/signal.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines dealing with signals.
- *
- * A signal usually merely causes a bit to be set in the "signals" word.
- * At some convenient time, the mainline code checks to see if any
- * signals need processing by calling psignal().
- * If we happen to be reading from a file [in iread()] at the time
- * the signal is received, we call intread to interrupt the iread.
- */
-
-#include "less.h"
-#include <signal.h>
-
-/*
- * "sigs" contains bits indicating signals which need to be processed.
- */
-public int sigs;
-
-extern int sc_width, sc_height;
-extern int screen_trashed;
-extern int lnloop;
-extern int linenums;
-extern int wscroll;
-extern int reading;
-extern int quit_on_intr;
-extern long jump_sline_fraction;
-
-/*
- * Interrupt signal handler.
- */
- /* ARGSUSED*/
- static RETSIGTYPE
-u_interrupt(type)
- int type;
-{
-#if OS2
- LSIGNAL(SIGINT, SIG_ACK);
-#endif
- LSIGNAL(SIGINT, u_interrupt);
- sigs |= S_INTERRUPT;
-#if MSDOS_COMPILER==DJGPPC
- /*
- * If a keyboard has been hit, it must be Ctrl-C
- * (as opposed to Ctrl-Break), so consume it.
- * (Otherwise, Less will beep when it sees Ctrl-C from keyboard.)
- */
- if (kbhit())
- getkey();
-#endif
- if (reading)
- intread();
-}
-
-#ifdef SIGTSTP
-/*
- * "Stop" (^Z) signal handler.
- */
- /* ARGSUSED*/
- static RETSIGTYPE
-stop(type)
- int type;
-{
- LSIGNAL(SIGTSTP, stop);
- sigs |= S_STOP;
- if (reading)
- intread();
-}
-#endif
-
-#ifdef SIGWINCH
-/*
- * "Window" change handler
- */
- /* ARGSUSED*/
- public RETSIGTYPE
-winch(type)
- int type;
-{
- LSIGNAL(SIGWINCH, winch);
- sigs |= S_WINCH;
- if (reading)
- intread();
-}
-#else
-#ifdef SIGWIND
-/*
- * "Window" change handler
- */
- /* ARGSUSED*/
- public RETSIGTYPE
-winch(type)
- int type;
-{
- LSIGNAL(SIGWIND, winch);
- sigs |= S_WINCH;
- if (reading)
- intread();
-}
-#endif
-#endif
-
-#if MSDOS_COMPILER==WIN32C
-/*
- * Handle CTRL-C and CTRL-BREAK keys.
- */
-#include "windows.h"
-
- static BOOL WINAPI
-wbreak_handler(dwCtrlType)
- DWORD dwCtrlType;
-{
- switch (dwCtrlType)
- {
- case CTRL_C_EVENT:
- case CTRL_BREAK_EVENT:
- sigs |= S_INTERRUPT;
- return (TRUE);
- default:
- break;
- }
- return (FALSE);
-}
-#endif
-
-/*
- * Set up the signal handlers.
- */
- public void
-init_signals(on)
- int on;
-{
- if (on)
- {
- /*
- * Set signal handlers.
- */
- (void) LSIGNAL(SIGINT, u_interrupt);
-#if MSDOS_COMPILER==WIN32C
- SetConsoleCtrlHandler(wbreak_handler, TRUE);
-#endif
-#ifdef SIGTSTP
- (void) LSIGNAL(SIGTSTP, stop);
-#endif
-#ifdef SIGWINCH
- (void) LSIGNAL(SIGWINCH, winch);
-#endif
-#ifdef SIGWIND
- (void) LSIGNAL(SIGWIND, winch);
-#endif
-#ifdef SIGQUIT
- (void) LSIGNAL(SIGQUIT, SIG_IGN);
-#endif
- } else
- {
- /*
- * Restore signals to defaults.
- */
- (void) LSIGNAL(SIGINT, SIG_DFL);
-#if MSDOS_COMPILER==WIN32C
- SetConsoleCtrlHandler(wbreak_handler, FALSE);
-#endif
-#ifdef SIGTSTP
- (void) LSIGNAL(SIGTSTP, SIG_DFL);
-#endif
-#ifdef SIGWINCH
- (void) LSIGNAL(SIGWINCH, SIG_IGN);
-#endif
-#ifdef SIGWIND
- (void) LSIGNAL(SIGWIND, SIG_IGN);
-#endif
-#ifdef SIGQUIT
- (void) LSIGNAL(SIGQUIT, SIG_DFL);
-#endif
- }
-}
-
-/*
- * Process any signals we have received.
- * A received signal cause a bit to be set in "sigs".
- */
- public void
-psignals()
-{
- register int tsignals;
-
- if ((tsignals = sigs) == 0)
- return;
- sigs = 0;
-
-#ifdef SIGTSTP
- if (tsignals & S_STOP)
- {
- /*
- * Clean up the terminal.
- */
-#ifdef SIGTTOU
- LSIGNAL(SIGTTOU, SIG_IGN);
-#endif
- clear_bot();
- deinit();
- flush();
- raw_mode(0);
-#ifdef SIGTTOU
- LSIGNAL(SIGTTOU, SIG_DFL);
-#endif
- LSIGNAL(SIGTSTP, SIG_DFL);
- kill(getpid(), SIGTSTP);
- /*
- * ... Bye bye. ...
- * Hopefully we'll be back later and resume here...
- * Reset the terminal and arrange to repaint the
- * screen when we get back to the main command loop.
- */
- LSIGNAL(SIGTSTP, stop);
- raw_mode(1);
- init();
- screen_trashed = 1;
- tsignals |= S_WINCH;
- }
-#endif
-#ifdef S_WINCH
- if (tsignals & S_WINCH)
- {
- int old_width, old_height;
- /*
- * Re-execute scrsize() to read the new window size.
- */
- old_width = sc_width;
- old_height = sc_height;
- get_term();
- if (sc_width != old_width || sc_height != old_height)
- {
- wscroll = (sc_height + 1) / 2;
- calc_jump_sline();
- screen_trashed = 1;
- }
- }
-#endif
- if (tsignals & S_INTERRUPT)
- {
- if (quit_on_intr)
- quit(QUIT_OK);
- bell();
- /*
- * {{ You may wish to replace the bell() with
- * error("Interrupt", NULL_PARG); }}
- */
-
- /*
- * If we were interrupted while in the "calculating
- * line numbers" loop, turn off line numbers.
- */
- if (lnloop)
- {
- lnloop = 0;
- if (linenums == 2)
- screen_trashed = 1;
- linenums = 0;
- error("Line numbers turned off", NULL_PARG);
- }
-
- }
-}
diff --git a/contrib/less/tags.c b/contrib/less/tags.c
deleted file mode 100644
index ab00faf..0000000
--- a/contrib/less/tags.c
+++ /dev/null
@@ -1,757 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-#include "less.h"
-
-#define WHITESP(c) ((c)==' ' || (c)=='\t')
-
-#if TAGS
-
-public char *tags = "tags";
-
-static int total;
-static int curseq;
-
-extern int linenums;
-extern int sigs;
-
-enum tag_result {
- TAG_FOUND,
- TAG_NOFILE,
- TAG_NOTAG,
- TAG_NOTYPE,
- TAG_INTR
-};
-
-/*
- * Tag type
- */
-enum {
- T_CTAGS, /* 'tags': standard and extended format (ctags) */
- T_CTAGS_X, /* stdin: cross reference format (ctags) */
- T_GTAGS, /* 'GTAGS': function defenition (global) */
- T_GRTAGS, /* 'GRTAGS': function reference (global) */
- T_GSYMS, /* 'GSYMS': other symbols (global) */
- T_GPATH /* 'GPATH': path name (global) */
-};
-
-static enum tag_result findctag();
-static enum tag_result findgtag();
-static char *nextgtag();
-static char *prevgtag();
-static POSITION ctagsearch();
-static POSITION gtagsearch();
-static int getentry();
-
-/*
- * The list of tags generated by the last findgtag() call.
- *
- * Use either pattern or line number.
- * findgtag() always uses line number, so pattern is always NULL.
- * findctag() uses either pattern (in which case line number is 0),
- * or line number (in which case pattern is NULL).
- */
-struct taglist {
- struct tag *tl_first;
- struct tag *tl_last;
-};
-#define TAG_END ((struct tag *) &taglist)
-static struct taglist taglist = { TAG_END, TAG_END };
-struct tag {
- struct tag *next, *prev; /* List links */
- char *tag_file; /* Source file containing the tag */
- LINENUM tag_linenum; /* Appropriate line number in source file */
- char *tag_pattern; /* Pattern used to find the tag */
- char tag_endline; /* True if the pattern includes '$' */
-};
-static struct tag *curtag;
-
-#define TAG_INS(tp) \
- (tp)->next = TAG_END; \
- (tp)->prev = taglist.tl_last; \
- taglist.tl_last->next = (tp); \
- taglist.tl_last = (tp);
-
-#define TAG_RM(tp) \
- (tp)->next->prev = (tp)->prev; \
- (tp)->prev->next = (tp)->next;
-
-/*
- * Delete tag structures.
- */
- public void
-cleantags()
-{
- register struct tag *tp;
-
- /*
- * Delete any existing tag list.
- * {{ Ideally, we wouldn't do this until after we know that we
- * can load some other tag information. }}
- */
- while ((tp = taglist.tl_first) != TAG_END)
- {
- TAG_RM(tp);
- free(tp);
- }
- curtag = NULL;
- total = curseq = 0;
-}
-
-/*
- * Create a new tag entry.
- */
- static struct tag *
-maketagent(name, file, linenum, pattern, endline)
- char *name;
- char *file;
- LINENUM linenum;
- char *pattern;
- int endline;
-{
- register struct tag *tp;
-
- tp = (struct tag *) ecalloc(sizeof(struct tag), 1);
- tp->tag_file = (char *) ecalloc(strlen(file) + 1, sizeof(char));
- strcpy(tp->tag_file, file);
- tp->tag_linenum = linenum;
- tp->tag_endline = endline;
- if (pattern == NULL)
- tp->tag_pattern = NULL;
- else
- {
- tp->tag_pattern = (char *) ecalloc(strlen(pattern) + 1, sizeof(char));
- strcpy(tp->tag_pattern, pattern);
- }
- return (tp);
-}
-
-/*
- * Get tag mode.
- */
- public int
-gettagtype()
-{
- int f;
-
- if (strcmp(tags, "GTAGS") == 0)
- return T_GTAGS;
- if (strcmp(tags, "GRTAGS") == 0)
- return T_GRTAGS;
- if (strcmp(tags, "GSYMS") == 0)
- return T_GSYMS;
- if (strcmp(tags, "GPATH") == 0)
- return T_GPATH;
- if (strcmp(tags, "-") == 0)
- return T_CTAGS_X;
- f = open(tags, OPEN_READ);
- if (f >= 0)
- {
- close(f);
- return T_CTAGS;
- }
- return T_GTAGS;
-}
-
-/*
- * Find tags in tag file.
- * Find a tag in the "tags" file.
- * Sets "tag_file" to the name of the file containing the tag,
- * and "tagpattern" to the search pattern which should be used
- * to find the tag.
- */
- public void
-findtag(tag)
- register char *tag;
-{
- int type = gettagtype();
- enum tag_result result;
-
- if (type == T_CTAGS)
- result = findctag(tag);
- else
- result = findgtag(tag, type);
- switch (result)
- {
- case TAG_FOUND:
- case TAG_INTR:
- break;
- case TAG_NOFILE:
- error("No tags file", NULL_PARG);
- break;
- case TAG_NOTAG:
- error("No such tag in tags file", NULL_PARG);
- break;
- case TAG_NOTYPE:
- error("unknown tag type", NULL_PARG);
- break;
- }
-}
-
-/*
- * Search for a tag.
- */
- public POSITION
-tagsearch()
-{
- if (curtag == NULL)
- return (NULL_POSITION); /* No gtags loaded! */
- if (curtag->tag_linenum != 0)
- return gtagsearch();
- else
- return ctagsearch();
-}
-
-/*
- * Go to the next tag.
- */
- public char *
-nexttag(n)
- int n;
-{
- char *tagfile = (char *) NULL;
-
- while (n-- > 0)
- tagfile = nextgtag();
- return tagfile;
-}
-
-/*
- * Go to the previous tag.
- */
- public char *
-prevtag(n)
- int n;
-{
- char *tagfile = (char *) NULL;
-
- while (n-- > 0)
- tagfile = prevgtag();
- return tagfile;
-}
-
-/*
- * Return the total number of tags.
- */
- public int
-ntags()
-{
- return total;
-}
-
-/*
- * Return the sequence number of current tag.
- */
- public int
-curr_tag()
-{
- return curseq;
-}
-
-/*****************************************************************************
- * ctags
- */
-
-/*
- * Find tags in the "tags" file.
- * Sets curtag to the first tag entry.
- */
- static enum tag_result
-findctag(tag)
- register char *tag;
-{
- char *p;
- register FILE *f;
- register int taglen;
- LINENUM taglinenum;
- char *tagfile;
- char *tagpattern;
- int tagendline;
- int search_char;
- int err;
- char tline[TAGLINE_SIZE];
- struct tag *tp;
-
- p = shell_unquote(tags);
- f = fopen(p, "r");
- free(p);
- if (f == NULL)
- return TAG_NOFILE;
-
- cleantags();
- total = 0;
- taglen = strlen(tag);
-
- /*
- * Search the tags file for the desired tag.
- */
- while (fgets(tline, sizeof(tline), f) != NULL)
- {
- if (tline[0] == '!')
- /* Skip header of extended format. */
- continue;
- if (strncmp(tag, tline, taglen) != 0 || !WHITESP(tline[taglen]))
- continue;
-
- /*
- * Found it.
- * The line contains the tag, the filename and the
- * location in the file, separated by white space.
- * The location is either a decimal line number,
- * or a search pattern surrounded by a pair of delimiters.
- * Parse the line and extract these parts.
- */
- tagpattern = NULL;
-
- /*
- * Skip over the whitespace after the tag name.
- */
- p = skipsp(tline+taglen);
- if (*p == '\0')
- /* File name is missing! */
- continue;
-
- /*
- * Save the file name.
- * Skip over the whitespace after the file name.
- */
- tagfile = p;
- while (!WHITESP(*p) && *p != '\0')
- p++;
- *p++ = '\0';
- p = skipsp(p);
- if (*p == '\0')
- /* Pattern is missing! */
- continue;
-
- /*
- * First see if it is a line number.
- */
- tagendline = 0;
- taglinenum = getnum(&p, 0, &err);
- if (err)
- {
- /*
- * No, it must be a pattern.
- * Delete the initial "^" (if present) and
- * the final "$" from the pattern.
- * Delete any backslash in the pattern.
- */
- taglinenum = 0;
- search_char = *p++;
- if (*p == '^')
- p++;
- tagpattern = p;
- while (*p != search_char && *p != '\0')
- {
- if (*p == '\\')
- p++;
- p++;
- }
- tagendline = (p[-1] == '$');
- if (tagendline)
- p--;
- *p = '\0';
- }
- tp = maketagent(tag, tagfile, taglinenum, tagpattern, tagendline);
- TAG_INS(tp);
- total++;
- }
- fclose(f);
- if (total == 0)
- return TAG_NOTAG;
- curtag = taglist.tl_first;
- curseq = 1;
- return TAG_FOUND;
-}
-
-/*
- * Edit current tagged file.
- */
- public int
-edit_tagfile()
-{
- if (curtag == NULL)
- return (1);
- return (edit(curtag->tag_file));
-}
-
-/*
- * Search for a tag.
- * This is a stripped-down version of search().
- * We don't use search() for several reasons:
- * - We don't want to blow away any search string we may have saved.
- * - The various regular-expression functions (from different systems:
- * regcmp vs. re_comp) behave differently in the presence of
- * parentheses (which are almost always found in a tag).
- */
- static POSITION
-ctagsearch()
-{
- POSITION pos, linepos;
- LINENUM linenum;
- int len;
- char *line;
-
- pos = ch_zero();
- linenum = find_linenum(pos);
-
- for (;;)
- {
- /*
- * Get lines until we find a matching one or
- * until we hit end-of-file.
- */
- if (ABORT_SIGS())
- return (NULL_POSITION);
-
- /*
- * Read the next line, and save the
- * starting position of that line in linepos.
- */
- linepos = pos;
- pos = forw_raw_line(pos, &line, (int *)NULL);
- if (linenum != 0)
- linenum++;
-
- if (pos == NULL_POSITION)
- {
- /*
- * We hit EOF without a match.
- */
- error("Tag not found", NULL_PARG);
- return (NULL_POSITION);
- }
-
- /*
- * If we're using line numbers, we might as well
- * remember the information we have now (the position
- * and line number of the current line).
- */
- if (linenums)
- add_lnum(linenum, pos);
-
- /*
- * Test the line to see if we have a match.
- * Use strncmp because the pattern may be
- * truncated (in the tags file) if it is too long.
- * If tagendline is set, make sure we match all
- * the way to end of line (no extra chars after the match).
- */
- len = strlen(curtag->tag_pattern);
- if (strncmp(curtag->tag_pattern, line, len) == 0 &&
- (!curtag->tag_endline || line[len] == '\0' || line[len] == '\r'))
- {
- curtag->tag_linenum = find_linenum(linepos);
- break;
- }
- }
-
- return (linepos);
-}
-
-/*******************************************************************************
- * gtags
- */
-
-/*
- * Find tags in the GLOBAL's tag file.
- * The findgtag() will try and load information about the requested tag.
- * It does this by calling "global -x tag" and storing the parsed output
- * for future use by gtagsearch().
- * Sets curtag to the first tag entry.
- */
- static enum tag_result
-findgtag(tag, type)
- char *tag; /* tag to load */
- int type; /* tags type */
-{
- char buf[256];
- FILE *fp;
- struct tag *tp;
-
- if (type != T_CTAGS_X && tag == NULL)
- return TAG_NOFILE;
-
- cleantags();
- total = 0;
-
- /*
- * If type == T_CTAGS_X then read ctags's -x format from stdin
- * else execute global(1) and read from it.
- */
- if (type == T_CTAGS_X)
- {
- fp = stdin;
- /* Set tag default because we cannot read stdin again. */
- tags = "tags";
- } else
- {
-#if !HAVE_POPEN
- return TAG_NOFILE;
-#else
- char *command;
- char *flag;
- char *qtag;
- char *cmd = lgetenv("LESSGLOBALTAGS");
-
- if (cmd == NULL || *cmd == '\0')
- return TAG_NOFILE;
- /* Get suitable flag value for global(1). */
- switch (type)
- {
- case T_GTAGS:
- flag = "" ;
- break;
- case T_GRTAGS:
- flag = "r";
- break;
- case T_GSYMS:
- flag = "s";
- break;
- case T_GPATH:
- flag = "P";
- break;
- default:
- return TAG_NOTYPE;
- }
-
- /* Get our data from global(1). */
- qtag = shell_quote(tag);
- if (qtag == NULL)
- qtag = tag;
- command = (char *) ecalloc(strlen(cmd) + strlen(flag) +
- strlen(qtag) + 5, sizeof(char));
- sprintf(command, "%s -x%s %s", cmd, flag, qtag);
- if (qtag != tag)
- free(qtag);
- fp = popen(command, "r");
- free(command);
-#endif
- }
- if (fp != NULL)
- {
- while (fgets(buf, sizeof(buf), fp))
- {
- char *name, *file, *line;
- int len;
-
- if (sigs)
- {
-#if HAVE_POPEN
- if (fp != stdin)
- pclose(fp);
-#endif
- return TAG_INTR;
- }
- len = strlen(buf);
- if (len > 0 && buf[len-1] == '\n')
- buf[len-1] = '\0';
- else
- {
- int c;
- do {
- c = fgetc(fp);
- } while (c != '\n' && c != EOF);
- }
-
- if (getentry(buf, &name, &file, &line))
- {
- /*
- * Couldn't parse this line for some reason.
- * We'll just pretend it never happened.
- */
- break;
- }
-
- /* Make new entry and add to list. */
- tp = maketagent(name, file, (LINENUM) atoi(line), NULL, 0);
- TAG_INS(tp);
- total++;
- }
- if (fp != stdin)
- {
- if (pclose(fp))
- {
- curtag = NULL;
- total = curseq = 0;
- return TAG_NOFILE;
- }
- }
- }
-
- /* Check to see if we found anything. */
- tp = taglist.tl_first;
- if (tp == TAG_END)
- return TAG_NOTAG;
- curtag = tp;
- curseq = 1;
- return TAG_FOUND;
-}
-
-static int circular = 0; /* 1: circular tag structure */
-
-/*
- * Return the filename required for the next gtag in the queue that was setup
- * by findgtag(). The next call to gtagsearch() will try to position at the
- * appropriate tag.
- */
- static char *
-nextgtag()
-{
- struct tag *tp;
-
- if (curtag == NULL)
- /* No tag loaded */
- return NULL;
-
- tp = curtag->next;
- if (tp == TAG_END)
- {
- if (!circular)
- return NULL;
- /* Wrapped around to the head of the queue */
- curtag = taglist.tl_first;
- curseq = 1;
- } else
- {
- curtag = tp;
- curseq++;
- }
- return (curtag->tag_file);
-}
-
-/*
- * Return the filename required for the previous gtag in the queue that was
- * setup by findgtat(). The next call to gtagsearch() will try to position
- * at the appropriate tag.
- */
- static char *
-prevgtag()
-{
- struct tag *tp;
-
- if (curtag == NULL)
- /* No tag loaded */
- return NULL;
-
- tp = curtag->prev;
- if (tp == TAG_END)
- {
- if (!circular)
- return NULL;
- /* Wrapped around to the tail of the queue */
- curtag = taglist.tl_last;
- curseq = total;
- } else
- {
- curtag = tp;
- curseq--;
- }
- return (curtag->tag_file);
-}
-
-/*
- * Position the current file at at what is hopefully the tag that was chosen
- * using either findtag() or one of nextgtag() and prevgtag(). Returns -1
- * if it was unable to position at the tag, 0 if successful.
- */
- static POSITION
-gtagsearch()
-{
- if (curtag == NULL)
- return (NULL_POSITION); /* No gtags loaded! */
- return (find_pos(curtag->tag_linenum));
-}
-
-/*
- * The getentry() parses both standard and extended ctags -x format.
- *
- * [standard format]
- * <tag> <lineno> <file> <image>
- * +------------------------------------------------
- * |main 30 main.c main(argc, argv)
- * |func 21 subr.c func(arg)
- *
- * The following commands write this format.
- * o Traditinal Ctags with -x option
- * o Global with -x option
- * See <http://www.gnu.org/software/global/global.html>
- *
- * [extended format]
- * <tag> <type> <lineno> <file> <image>
- * +----------------------------------------------------------
- * |main function 30 main.c main(argc, argv)
- * |func function 21 subr.c func(arg)
- *
- * The following commands write this format.
- * o Exuberant Ctags with -x option
- * See <http://ctags.sourceforge.net>
- *
- * Returns 0 on success, -1 on error.
- * The tag, file, and line will each be NUL-terminated pointers
- * into buf.
- */
- static int
-getentry(buf, tag, file, line)
- char *buf; /* standard or extended ctags -x format data */
- char **tag; /* name of the tag we actually found */
- char **file; /* file in which to find this tag */
- char **line; /* line number of file where this tag is found */
-{
- char *p = buf;
-
- for (*tag = p; *p && !IS_SPACE(*p); p++) /* tag name */
- ;
- if (*p == 0)
- return (-1);
- *p++ = 0;
- for ( ; *p && IS_SPACE(*p); p++) /* (skip blanks) */
- ;
- if (*p == 0)
- return (-1);
- /*
- * If the second part begin with other than digit,
- * it is assumed tag type. Skip it.
- */
- if (!IS_DIGIT(*p))
- {
- for ( ; *p && !IS_SPACE(*p); p++) /* (skip tag type) */
- ;
- for (; *p && IS_SPACE(*p); p++) /* (skip blanks) */
- ;
- }
- if (!IS_DIGIT(*p))
- return (-1);
- *line = p; /* line number */
- for (*line = p; *p && !IS_SPACE(*p); p++)
- ;
- if (*p == 0)
- return (-1);
- *p++ = 0;
- for ( ; *p && IS_SPACE(*p); p++) /* (skip blanks) */
- ;
- if (*p == 0)
- return (-1);
- *file = p; /* file name */
- for (*file = p; *p && !IS_SPACE(*p); p++)
- ;
- if (*p == 0)
- return (-1);
- *p = 0;
-
- /* value check */
- if (strlen(*tag) && strlen(*line) && strlen(*file) && atoi(*line) > 0)
- return (0);
- return (-1);
-}
-
-#endif
diff --git a/contrib/less/ttyin.c b/contrib/less/ttyin.c
deleted file mode 100644
index 0cb427b..0000000
--- a/contrib/less/ttyin.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
- * Routines dealing with getting input from the keyboard (i.e. from the user).
- */
-
-#include "less.h"
-#if OS2
-#include "cmd.h"
-#include "pckeys.h"
-#endif
-#if MSDOS_COMPILER==WIN32C
-#include "windows.h"
-extern char WIN32getch();
-static DWORD console_mode;
-#endif
-
-public int tty;
-extern int sigs;
-extern int utf_mode;
-
-/*
- * Open keyboard for input.
- */
- public void
-open_getchr()
-{
-#if MSDOS_COMPILER==WIN32C
- /* Need this to let child processes inherit our console handle */
- SECURITY_ATTRIBUTES sa;
- memset(&sa, 0, sizeof(SECURITY_ATTRIBUTES));
- sa.nLength = sizeof(SECURITY_ATTRIBUTES);
- sa.bInheritHandle = TRUE;
- tty = (int) CreateFile("CONIN$", GENERIC_READ,
- FILE_SHARE_READ, &sa,
- OPEN_EXISTING, 0L, NULL);
- GetConsoleMode((HANDLE)tty, &console_mode);
- /* Make sure we get Ctrl+C events. */
- SetConsoleMode((HANDLE)tty, ENABLE_PROCESSED_INPUT);
-#else
-#if MSDOS_COMPILER
- extern int fd0;
- /*
- * Open a new handle to CON: in binary mode
- * for unbuffered keyboard read.
- */
- fd0 = dup(0);
- close(0);
- tty = open("CON", OPEN_READ);
-#if MSDOS_COMPILER==DJGPPC
- /*
- * Setting stdin to binary causes Ctrl-C to not
- * raise SIGINT. We must undo that side-effect.
- */
- (void) __djgpp_set_ctrl_c(1);
-#endif
-#else
- /*
- * Try /dev/tty.
- * If that doesn't work, use file descriptor 2,
- * which in Unix is usually attached to the screen,
- * but also usually lets you read from the keyboard.
- */
-#if OS2
- /* The __open() system call translates "/dev/tty" to "con". */
- tty = __open("/dev/tty", OPEN_READ);
-#else
- tty = open("/dev/tty", OPEN_READ);
-#endif
- if (tty < 0)
- tty = 2;
-#endif
-#endif
-}
-
-/*
- * Close the keyboard.
- */
- public void
-close_getchr()
-{
-#if MSDOS_COMPILER==WIN32C
- SetConsoleMode((HANDLE)tty, console_mode);
- CloseHandle((HANDLE)tty);
-#endif
-}
-
-/*
- * Get a character from the keyboard.
- */
- public int
-getchr()
-{
- char c;
- int result;
-
- do
- {
-#if MSDOS_COMPILER && MSDOS_COMPILER != DJGPPC
- /*
- * In raw read, we don't see ^C so look here for it.
- */
- flush();
-#if MSDOS_COMPILER==WIN32C
- if (ABORT_SIGS())
- return (READ_INTR);
- c = WIN32getch(tty);
-#else
- c = getch();
-#endif
- result = 1;
- if (c == '\003')
- return (READ_INTR);
-#else
- result = iread(tty, &c, sizeof(char));
- if (result == READ_INTR)
- return (READ_INTR);
- if (result < 0)
- {
- /*
- * Don't call error() here,
- * because error calls getchr!
- */
- quit(QUIT_ERROR);
- }
-#endif
-#if 0 /* allow entering arbitrary hex chars for testing */
- /* ctrl-A followed by two hex chars makes a byte */
- {
- int hex_in = 0;
- int hex_value = 0;
- if (c == CONTROL('A'))
- {
- hex_in = 2;
- result = 0;
- continue;
- }
- if (hex_in > 0)
- {
- int v;
- if (c >= '0' && c <= '9')
- v = c - '0';
- else if (c >= 'a' && c <= 'f')
- v = c - 'a' + 10;
- else if (c >= 'A' && c <= 'F')
- v = c - 'A' + 10;
- else
- hex_in = 0;
- hex_value = (hex_value << 4) | v;
- if (--hex_in > 0)
- {
- result = 0;
- continue;
- }
- c = hex_value;
- }
- }
-#endif
- /*
- * Various parts of the program cannot handle
- * an input character of '\0'.
- * If a '\0' was actually typed, convert it to '\340' here.
- */
- if (c == '\0')
- c = '\340';
- } while (result != 1);
-
- return (c & 0xFF);
-}
diff --git a/contrib/less/version.c b/contrib/less/version.c
deleted file mode 100644
index bce2f82..0000000
--- a/contrib/less/version.c
+++ /dev/null
@@ -1,707 +0,0 @@
-/*
- * Copyright (C) 1984-2007 Mark Nudelman
- *
- * You may distribute under the terms of either the GNU General Public
- * License or the Less License, as specified in the README file.
- *
- * For more information about less, or for information on how to
- * contact the author, see the README file.
- */
-
-
-/*
------------------------ CHANGE HISTORY --------------------------
-
- 1/29/84 Allowed use on standard input
- 2/1/84 Added E, N, P commands
- 4/17/84 Added '=' command, 'stop' signal handling
- 4/20/84 Added line folding
-v2 4/27/84 Fixed '=' command to use BOTTOM_PLUS_ONE,
- instead of TOP, added 'p' & 'v' commands
-v3 5/3/84 Added -m and -t options, '-' command
-v4 5/3/84 Added LESS environment variable
-v5 5/3/84 New comments, fixed '-' command slightly
-v6 5/15/84 Added -Q, visual bell
-v7 5/24/84 Fixed jump_back(n) bug: n should count real
- lines, not folded lines. Also allow number on G command.
-v8 5/30/84 Re-do -q and -Q commands
-v9 9/25/84 Added "+<cmd>" argument
-v10 10/10/84 Fixed bug in -b<n> argument processing
-v11 10/18/84 Made error() ring bell if \n not entered.
------------------------------------------------------------------
-v12 2/13/85 Reorganized signal handling and made portable to 4.2bsd.
-v13 2/16/85 Reword error message for '-' command.
-v14 2/22/85 Added -bf and -bp variants of -b.
-v15 2/25/85 Miscellaneous changes.
-v16 3/13/85 Added -u flag for backspace processing.
-v17 4/13/85 Added j and k commands, changed -t default.
-v18 4/20/85 Rewrote signal handling code.
-v19 5/2/85 Got rid of "verbose" eq_message().
- Made search() scroll in some cases.
-v20 5/21/85 Fixed screen.c ioctls for System V.
-v21 5/23/85 Fixed some first_cmd bugs.
-v22 5/24/85 Added support for no RECOMP nor REGCMP.
-v23 5/25/85 Miscellanous changes and prettying up.
- Posted to USENET.
------------------------------------------------------------------
-v24 6/3/85 Added ti,te terminal init & de-init.
- (Thanks to Mike Kersenbrock)
-v25 6/8/85 Added -U flag, standout mode underlining.
-v26 6/9/85 Added -M flag.
- Use underline termcap (us) if it exists.
-v27 6/15/85 Renamed some variables to make unique in
- 6 chars. Minor fix to -m.
-v28 6/28/85 Fixed right margin bug.
-v29 6/28/85 Incorporated M.Rose's changes to signal.c
-v30 6/29/85 Fixed stupid bug in argument processing.
-v31 7/15/85 Added -p flag, changed repaint algorithm.
- Added kludge for magic cookie terminals.
-v32 7/16/85 Added cat_file if output not a tty.
-v33 7/23/85 Added -e flag and EDITOR.
-v34 7/26/85 Added -s flag.
-v35 7/27/85 Rewrote option handling; added option.c.
-v36 7/29/85 Fixed -e flag to work if not last file.
-v37 8/10/85 Added -x flag.
-v38 8/19/85 Changed prompting; created prompt.c.
-v39 8/24/85 (Not -p) does not initially clear screen.
-v40 8/26/85 Added "skipping" indicator in forw().
- Posted to USENET.
------------------------------------------------------------------
-v41 9/17/85 ONLY_RETURN, control char commands,
- faster search, other minor fixes.
-v42 9/25/85 Added ++ command line syntax;
- ch_fsize for pipes.
-v43 10/15/85 Added -h flag, changed prim.c algorithms.
-v44 10/16/85 Made END print in all cases of eof;
- ignore SIGTTOU after receiv ing SIGTSTP.
-v45 10/16/85 Never print backspaces unless -u.
-v46 10/24/85 Backwards scroll in jump_loc.
-v47 10/30/85 Fixed bug in edit(): *first_cmd==0
-v48 11/16/85 Use TIOCSETN instead of TIOCSETP.
- Added marks (m and ' commands).
- Posted to USENET.
------------------------------------------------------------------
-v49 1/9/86 Fixed bug: signal didn't clear mcc.
-v50 1/15/86 Added ' (quote) to gomark.
-v51 1/16/86 Added + cmd, fixed problem if first_cmd
- fails, made g cmd sort of "work" on pipes
- ev en if bof is no longer buffered.
-v52 1/17/86 Made short files work better.
-v53 1/20/86 Added -P option.
-v54 1/20/86 Changed help to use HELPFILE.
-v55 1/23/86 Messages work better if not tty output.
-v56 1/24/86 Added -l option.
-v57 1/31/86 Fixed -l to get confirmation before
- ov erwriting an existing file.
-v58 8/28/86 Added filename globbing.
-v59 9/15/86 Fixed some bugs with very long filenames.
-v60 9/26/86 Incorporated changes from Leith (Casey)
- Leedom for boldface and -z option.
-v61 9/26/86 Got rid of annoying repaints after ! cmd.
- Posted to USENET.
------------------------------------------------------------------
-v62 12/23/86 Added is_directory(); change -z default to
- -1 instead of 24; cat-and-exit if -e and
- file is less than a screenful.
-v63 1/8/87 Fixed bug in cat-and-exit if > 1 file.
-v64 1/12/87 Changed puts/putstr, putc/putchr,
- getc/getchr to av oid name conflict with
- stdio functions.
-v65 1/26/87 Allowed '-' command to change NUMBER
- v alued options (thanks to Gary Puckering)
-v66 2/13/87 Fixed bug: prepaint should use force=1.
-v67 2/24/87 Added !! and % expansion to ! command.
-v68 2/25/87 Added SIGWINCH and TIOCGWINSZ support;
- changed is_directory to bad_file.
- (thanks to J. Robert Ward)
-v69 2/25/87 Added SIGWIND and WIOCGETD (for Unix PC).
-v70 3/13/87 Changed help cmd from 'h' to 'H'; better
- error msgs in bad_file, errno_message.
-v71 5/11/87 Changed -p to -c, made triple -c/-C
- for clear-eol like more's -c.
-v72 6/26/87 Added -E, -L, use $SHELL in lsystem().
- (thanks to Stev e Spearman)
-v73 6/26/87 Allow Examine "#" for previous file.
- Posted to USENET 8/25/87.
------------------------------------------------------------------
-v74 9/18/87 Fix conflict in EOF symbol with stdio.h,
- Make os.c more portable to BSD.
-v75 9/23/87 Fix problems in get_term (thanks to
- Paul Eggert); new backwards scrolling in
- jump_loc (thanks to Marion Hakanson).
-v76 9/23/87 Added -i flag; allow single "!" to
- inv oke a shell (thanks to Franco Barber).
-v77 9/24/87 Added -n flag and line number support.
-v78 9/25/87 Fixed problem with prompts longer than
- the screen width.
-v79 9/29/87 Added the _ command.
-v80 10/6/87 Allow signal to break out of linenum scan.
-v81 10/6/87 Allow -b to be changed from within less.
-v82 10/7/87 Add cmd_decode to use a table for key
- binding (thanks to Dav id Nason).
-v83 10/9/87 Allow .less file for user-defined keys.
-v84 10/11/87 Fix -e/-E problems (thanks to Felix Lee).
-v85 10/15/87 Search now keeps track of line numbers.
-v86 10/20/87 Added -B option and autobuf; fixed
- "pipe error" bug.
-v87 3/1/88 Fix bug re BSD signals while reading file.
-v88 3/12/88 Use new format for -P option (thanks to
- der Mouse), allow "+-c" without message,
- fix bug re BSD hangup.
-v89 3/18/88 Turn off line numbers if linenum scan
- is interrupted.
-v90 3/30/88 Allow -P from within less.
-v91 3/30/88 Added tags file support (new -t option)
- (thanks to Brian Campbell).
-v92 4/4/88 Added -+option syntax.
-v93 4/11/88 Add support for slow input (thanks to
- Joe Orost & apologies for taking almost
- 3 years to get this in!)
-v94 4/11/88 Redo reading/signal stuff.
-v95 4/20/88 Repaint screen better after signal.
-v96 4/21/88 Add /! and ?! commands.
-v97 5/17/88 Allow -l/-L from within less.
- Eliminate some static arrays (use calloc).
- Posted to USENET.
------------------------------------------------------------------
-v98 10/14/88 Fix incorrect calloc call; uninitialized
- var in exec_mca; core dump on unknown TERM.
- Make v cmd work if past last line of file.
- Fix some signal bugs.
-v99 10/29/88 Allow space between -X and string,
- when X is a string-valued option.
-v100 1/5/89 Fix globbing bug when $SHELL not set;
- allow spaces after -t command.
-v101 1/6/89 Fix problem with long (truncated) lines
- in tags file (thanks to Neil Dixon).
-v102 1/6/89 Fix bug with E# when no prev file;
- allow spaces after -l command.
-v103 3/14/89 Add -N, -f and -? options. Add z and w
- commands. Add %L for prompt strings.
-v104 3/16/89 Added EDITPROTO.
-v105 3/20/89 Fix bug in find_linenum which cached
- incorrectly on long lines.
-v106 3/31/89 Added -k option and multiple lesskey
- files.
-v107 4/27/89 Add 8-bit char support and -g option.
- Split option code into 3 files.
-v108 5/5/89 Allocate position table dynamically
- (thanks to Paul Eggert); change % command
- from "percent" to vi-style brace finder.
-v109 5/10/89 Added ESC-% command, split prim.c.
-v110 5/24/89 Fixed bug in + option; fixed repaint bug
- under Sun windows (thanks to Paul Eggert).
-v111 5/25/89 Generalized # and % expansion; use
- calloc for some error messages.
-v112 5/30/89 Get rid of ESC-%, add {}()[] commands.
-v113 5/31/89 Optimize lseeks (thanks to Paul Eggert).
-v114 7/25/89 Added ESC-/ and ESC-/! commands.
-v115 7/26/89 Added ESC-n command.
-v116 7/31/89 Added find_pos to optimize g command.
-v117 8/1/89 Change -f option to -r.
-v118 8/2/89 Save positions for all previous files,
- not just the immediately previous one.
-v119 8/7/89 Save marks across file boundaries.
- Add file handle stuff.
-v120 8/11/89 Add :ta command.
-v121 8/16/89 Add -f option.
-v122 8/30/89 Fix performance with many buffers.
-v123 8/31/89 Verbose prompts for string options.
- Posted beta to USENET.
------------------------------------------------------------------
-v124 9/18/89 Reorganize search commands,
- N = rev, ESC-n = span, add ESC-N.
-v125 9/18/89 Fix tab bug (thanks to Alex Liu).
- Fix EOF bug when both -w and -c.
-v126 10/25/89 Add -j option.
-v127 10/27/89 Fix problems with blank lines before BOF.
-v128 10/27/89 Add %bj, etc. to prompt strings.
-v129 11/3/89 Add -+,-- commands; add set-option and
- unset-option to lesskey.
-v130 11/6/89 Generalize A_EXTRA to string, remove
- set-option, unset-option from lesskey.
-v131 11/7/89 Changed name of EDITPROTO to LESSEDIT.
-v132 11/8/89 Allow editing of command prefix.
-v133 11/16/89 Add -y option (thanks to Jeff Sullivan).
-v134 12/1/89 Glob filenames in the -l command.
-v135 12/5/89 Combined {}()[] commands into one, and
- added ESC-^F and ESC-^B commands.
-v136 1/20/90 Added -S, -R flags. Added | command.
- Added warning for binary files. (thanks
- to Richard Brittain and J. Sullivan).
-v137 1/21/90 Rewrote horrible pappend code.
- Added * notation for hi-bit chars.
-v138 1/24/90 Fix magic cookie terminal handling.
- Get rid of "cleanup" loop in ch_get.
-v139 1/27/90 Added MSDOS support. (many thanks
- to Richard Brittain).
-v140 2/7/90 Editing a new file adds it to the
- command line list.
-v141 2/8/90 Add edit_list for editing >1 file.
-v142 2/10/90 Add :x command.
-v143 2/11/90 Add * and @ modifies to search cmds.
- Change ESC-/ cmd from /@* to / *.
-v144 3/1/90 Messed around with ch_zero;
- no real change.
-v145 3/2/90 Added -R and -v/-V for MSDOS;
- renamed FILENAME to avoid conflict.
-v146 3/5/90 Pull cmdbuf functions out of command.c
-v147 3/7/90 Implement ?@; fix multi-file edit bugs.
-v148 3/29/90 Fixed bug in :e<file> then :e#.
-v149 4/3/90 Change error,ierror,query to use PARG.
-v150 4/6/90 Add LESS_CHARSET, LESS_CHARDEF.
-v151 4/13/90 Remove -g option; clean up ispipe.
-v152 4/14/90 lsystem() closes input file, for
- editors which require exclusive open.
-v153 4/18/90 Fix bug if SHELL unset;
- fix bug in overstrike control char.
-v154 4/25/90 Output to fd 2 via buffer.
-v155 4/30/90 Ignore -i if uppercase in pattern
- (thanks to Michael Rendell.)
-v156 5/3/90 Remove scroll limits in forw() & back();
- causes problems with -c.
-v157 5/4/90 Forward search starts at next real line
- (not screen line) after jump target.
-v158 6/14/90 Added F command.
-v159 7/29/90 Fix bug in exiting: output not flushed.
-v160 7/29/90 Clear screen before initial output w/ -c.
-v161 7/29/90 Add -T flag.
-v162 8/14/90 Fix bug with +F on command line.
-v163 8/21/90 Added LESSBINFMT variable.
-v164 9/5/90 Added -p, LINES, COLUMNS and
- unset mark ' == BOF, for 1003.2 D5.
-v165 9/6/90 At EOF with -c set, don't display empty
- screen when try to page forward.
-v166 9/6/90 Fix G when final line in file wraps.
-v167 9/11/90 Translate CR/LF -> LF for 1003.2.
-v168 9/13/90 Return to curr file if "tag not found".
-v169 12/12/90 G goes to EOF even if file has grown.
-v170 1/17/91 Add optimization for BSD _setjmp;
- fix #include ioctl.h TERMIO problem.
- (thanks to Paul Eggert)
- Posted to USENET.
------------------------------------------------------------------
-v171 3/6/91 Fix -? bug in get_filename.
-v172 3/15/91 Fix G bug in empty file.
- Fix bug with ?\n and -i and uppercase
- pattern at EOF!
- (thanks to Paul Eggert)
-v173 3/17/91 Change N cmd to not permanently change
- direction. (thanks to Brian Matthews)
-v174 3/18/91 Fix bug with namelogfile not getting
- cleared when change files.
-v175 3/18/91 Fix bug with ++cmd on command line.
- (thanks to Jim Meyering)
-v176 4/2/91 Change | to not force current screen,
- include marked line, start/end from
- top of screen. Improve search speed.
- (thanks to Don Mears)
-v177 4/2/91 Add LESSHELP variable.
- Fix bug with F command with -e.
- Try /dev/tty for input before using fd 2.
- Patches posted to USENET 4/2/91.
------------------------------------------------------------------
-v178 4/8/91 Fixed bug in globbing logfile name.
- (thanks to Jim Meyering)
-v179 4/9/91 Allow negative -z for screen-relative.
-v180 4/9/91 Clear to eos rather than eol if "db";
- don't use "sr" if "da".
- (thanks to Tor Lillqvist)
-v181 4/18/91 Fixed bug with "negative" chars 80 - FF.
- (thanks to Benny Sander Hofmann)
-v182 5/16/91 Fixed bug with attribute at EOL.
- (thanks to Brian Matthews)
-v183 6/1/91 Rewrite linstall to do smart config.
-v184 7/11/91 Process \b in searches based on -u
- rather than -i.
-v185 7/11/91 -Pxxx sets short prompt; assume SIGWINCH
- after a SIGSTOP. (thanks to Ken Laprade)
------------------------------------------------------------------
-v186 4/20/92 Port to MS-DOS (Microsoft C).
-v187 4/23/92 Added -D option & TAB_COMPLETE_FILENAME.
-v188 4/28/92 Added command line editing features.
-v189 12/8/92 Fix mem overrun in anscreen.c:init;
- fix edit_list to recover from bin file.
-v190 2/13/93 Make TAB enter one filename at a time;
- create ^L with old TAB functionality.
-v191 3/10/93 Defer creating "flash" page for MS-DOS.
-v192 9/6/93 Add BACK-TAB.
-v193 9/17/93 Simplify binary_file handling.
-v194 1/4/94 Add rudiments of alt_filename handling.
-v195 1/11/94 Port back to Unix; support keypad.
------------------------------------------------------------------
-v196 6/7/94 Fix bug with bad filename; fix IFILE
- type problem. (thanks to David MacKenzie)
-v197 6/7/94 Fix bug with .less tables inserted wrong.
-v198 6/23/94 Use autoconf installation technology.
- (thanks to David MacKenzie)
-v199 6/29/94 Fix MS-DOS build (thanks to Tim Wiegman).
-v200 7/25/94 Clean up copyright, minor fixes.
- Posted to prep.ai.mit.edu
------------------------------------------------------------------
-v201 7/27/94 Check for no memcpy; add casts to calloc;
- look for regcmp in libgen.a.
- (thanks to Kaveh Ghazi).
-v202 7/28/94 Fix bug in edit_next/edit_prev with
- non-existant files.
-v203 8/2/94 Fix a variety of configuration bugs on
- various systems. (thanks to Sakai
- Kiyotaka, Harald Koenig, Bjorn Brox,
- Teemu Rantanen, and Thorsten Lockert)
-v204 8/3/94 Use strerror if available.
- (thanks to J.T. Conklin)
-v205 8/5/94 Fix bug in finding "me" termcap entry.
- (thanks to Andreas Stolcke)
-8/10/94 v205+: Change BUFSIZ to LBUFSIZE to avoid name
- conflict with stdio.h.
- Posted to prep.ai.mit.edu
------------------------------------------------------------------
-v206 8/10/94 Use initial_scrpos for -t to avoid
- displaying first page before init().
- (thanks to Dominique Petitpierre)
-v207 8/12/94 Fix bug if stdout is not tty.
-v208 8/16/94 Fix bug in close_altfile if goto err1
- in edit_ifile. (Thanks to M.J. Hewitt)
-v209 8/16/94 Change scroll to wscroll to avoid
- conflict with library function.
-v210 8/16/94 Fix bug with bold on 8 bit chars.
- (thanks to Vitor Duarte)
-v211 8/16/94 Don't quit on EOI in jump_loc / forw.
-v212 8/18/94 Use time_t if available.
-v213 8/20/94 Allow ospeed to be defined in termcap.h.
-v214 8/20/94 Added HILITE_SEARCH, -F, ESC-u cmd.
- (thanks to Paul Lew and Bob Byrnes)
-v215 8/23/94 Fix -i toggle behavior.
-v216 8/23/94 Process BS in all searches, not only -u.
-v217 8/24/94 Added -X flag.
-v218 8/24/94 Reimplement undo_search.
-v219 8/24/94 Find tags marked with line number
- instead of pattern.
-v220 8/24/94 Stay at same position after SIG_WINCH.
-v221 8/24/94 Fix bug in file percentage in big file.
-v222 8/25/94 Do better if can't reopen current file.
-v223 8/27/94 Support setlocale.
- (thanks to Robert Joop)
-v224 8/29/94 Revert v216: process BS in search
- only if -u.
-v225 9/6/94 Rewrite undo_search again: toggle.
-v226 9/15/94 Configuration fixes.
- (thanks to David MacKenzie)
-v227 9/19/94 Fixed strerror config problem.
- Posted to prep.ai.mit.edu
------------------------------------------------------------------
-v228 9/21/94 Fix bug in signals: repeated calls to
- get_editkeys overflowed st_edittable.
-v229 9/21/94 Fix "Nothing to search" error if -a
- and SRCH_PAST_EOF.
-v230 9/21/94 Don't print extra error msg in search
- after regerror().
-v231 9/22/94 Fix hilite bug if search matches 0 chars.
- (thanks to John Polstra)
-v232 9/23/94 Deal with weird systems that have
- termios.h but not tcgetattr().
- Posted to prep.ai.mit.edu
------------------------------------------------------------------
-v233 9/26/94 Use get_term() instead of pos_init() in
- psignals to re-get lower_left termcap.
- (Thanks to John Malecki)
-v234 9/26/94 Make MIDDLE closer to middle of screen.
-v235 9/27/94 Use local strchr if system doesn't have.
-v236 9/28/94 Don't use libucb; use libterm if
- libtermcap & libcurses doesn't work.
- (Fix for Solaris; thanks to Frank Kaefer)
-v237 9/30/94 Use system isupper() etc if provided.
- Posted to prep.ai.mit.edu
------------------------------------------------------------------
-v238 10/6/94 Make binary non-blinking if LESSBINFMT
- is set to a string without a *.
-v239 10/7/94 Don't let delimit_word run back past
- beginning of cmdbuf.
-v240 10/10/94 Don't write into termcap buffer.
- (Thanks to Benoit Speckel)
-v241 10/13/94 New lesskey file format.
- Don't expand filenames in search command.
-v242 10/14/94 Allow lesskey specification of "literal".
-v243 10/14/94 Add #stop command to lesskey.
-v244 10/16/94 Add -f flag to lesskey.
-v245 10/25/94 Allow TAB_COMPLETE_FILENAME to be undefd.
-v246 10/27/94 Move help file to /usr/local/share.
-v247 10/27/94 Add -V option.
-v248 11/5/94 Add -V option to lesskey.
-v249 11/5/94 Remove -f flag from lesskey; default
- input file is ~/.lesskey.in, not stdin.
-v250 11/7/94 Lesskey input file "-" means stdin.
-v251 11/9/94 Convert cfgetospeed result to ospeed.
- (Thanks to Andrew Chernov)
-v252 11/16/94 Change default lesskey input file from
- .lesskey.in to .lesskey.
- Posted to prep.ai.mit.edu
------------------------------------------------------------------
-v253 11/21/94 Fix bug when tags file has a backslash.
-v254 12/6/94 Fix -k option.
-v255 12/8/94 Add #define EXAMINE to disable :e etc.
-v256 12/10/94 Change highlighting: only highlite search
- results (but now it is reliable).
-v257 12/10/94 Add goto_line and repaint_highlight
- to optimize highlight repaints.
-v258 12/12/94 Fixup in hilite_line if BS_SPECIAL.
-v259 12/12/94 Convert to autoconf 2.0.
-v260 12/13/94 Add SECURE define.
-v261 12/14/94 Use system WERASE char as EC_W_BACKSPACE.
-v262 12/16/94 Add -g/-G flag and screen_hilite.
-v263 12/20/94 Reimplement/optimize -G flag behavior.
-v264 12/23/94 Allow EXTRA string after line-edit cmd
- in lesskey file.
-v265 12/24/94 Add LESSOPEN=|cmd syntax.
-v266 12/26/94 Add -I flag.
-v267 12/28/94 Formalize the four-byte header emitted
- by a LESSOPEN pipe.
-v268 12/28/94 Get rid of four-byte header.
-v269 1/2/95 Close alt file before open new one.
- Avoids multiple popen().
-v270 1/3/95 Use VISUAL; use S_ISDIR/S_ISREG; fix
- config problem with Solaris POSIX regcomp.
-v271 1/4/95 Don't quit on read error.
-v272 1/5/95 Get rid of -L.
-v273 1/6/95 Fix ch_ungetchar bug; don't call
- LESSOPEN on a pipe.
-v274 1/6/95 Ported to OS/2 (thanks to Kai Uwe Rommel)
-v275 1/18/95 Fix bug if toggle -G at EOF.
-v276 1/30/95 Fix OS/2 version.
-v277 1/31/95 Add "next" charset; don't display ^X
- for X > 128.
-v278 2/14/95 Change default for -G.
- Posted to prep.ai.mit.edu
------------------------------------------------------------------
-v279 2/22/95 Add GNU options --help, --version.
- Minor config fixes.
-v280 2/24/95 Clean up calls to glob(); don't set #
- if we can't open the new file.
-v281 2/24/95 Repeat search should turn on hilites.
-v282 3/2/95 Minor fixes.
-v283 3/2/95 Fix homefile; make OS2 look in $HOME.
-v284 3/2/95 Error if "v" on LESSOPENed file;
- "%" figures out file size on pipe.
-v285 3/7/95 Don't set # in lsystem;
- lesskey try $HOME first.
-v286 3/7/95 Reformat change history (too much free time?).
-v287 3/8/95 Fix hilite bug if overstrike multiple chars.
-v288 3/8/95 Allow lesskey to override get_editkey keys.
-v289 3/9/95 Fix adj_hilite bug when line gets processed by
- hilite_line more than once.
-v290 3/9/95 Make configure automatically. Fix Sequent problem
- with incompatible sigsetmask().
- Posted to prep.ai.mit.edu
------------------------------------------------------------------
-v291 3/21/95 Add #env to lesskey. Fix MS-DOS build.
- Posted to simtel.
------------------------------------------------------------------
-v292 4/24/95 Add MS-DOS support for Borland C.
- Fix arrow keys in MS-DOS versions.
-v293 4/28/95 Add auto-versioning stuff to make dist.
-v294 5/12/95 Fix Borland build.
-v295 1/20/96 Fix search on squished file; add /@@.
-v296 1/23/96 Allow cmdbuf larger than screen width.
-v297 1/24/96 Don't call termcap if tgetent fails;
- add #defines for buffers.
-v298 1/24/96 Change @@ to ^K.
- Add alternate search modifiers ^N, ^F, ^E.
-v299 1/25/96 Fix percent overflow in jump_percent (thanks to Brent Wiese);
- don't send "ti" after shell command till RETURN pressed.
-v300 1/25/96 Change -U to print tabs as ^I.
-v301 1/30/96 Make hilites work in cmd F output.
-v302 1/31/96 Fix cmd F to notice window-change signals.
-v303 1/31/96 Add ESC-SPACE command.
-v304 2/1/96 Add ^R search modifier; add LESSSECURE.
-v305 2/2/96 Workaround Linux /proc kernel bug; add LESSKEY.
-v306 3/16/96 Minor fixes.
-v307 3/25/96 Allow cmd line arg "--"; fix DOS & OS/2 defines.h.
-v308 4/4/96 Port to OS-9 (thanks to Boisy Pitre); fix -d.
-v309 4/9/96 Fix OS-9 version; fix tags bug with "$".
-v310 4/10/96 Get rid of HELPFILE.
-v311 4/22/96 Add Windows32 support; merge doscreen.c into screen.c.
-v312 4/24/96 Don't quit after "cannot reopen" error.
-v313 4/25/96 Added horizontal scrolling.
-v314 4/26/96 Modified -e to quit on reaching end of a squished file.
-v315 4/26/96 Fix "!;TAB" bug.
-v316 5/2/96 Make "|a" when (a < curr screen) go to end of curr screen.
-v317 5/14/96 Various fixes for the MS-DOS and OS/2 builds.
- Added ## and %% handling for filenames
-v318 5/29/96 Port to OS-9 Microware compiler; minor fixes
- (thanks to Martin Gregorie).
-v319 7/8/96 Fix Windows port (thanks to Jeff Paquette).
-v320 7/11/96 Final fixes for Windows port.
-v321 7/18/96 Minor fixes.
- Posted to Web page.
------------------------------------------------------------------
-v322 8/13/96 Fix bug in shell escape from help file; add support for
- Microsoft Visual C under Windows; numerous small fixes.
-v323 8/19/96 Fixes for Windows version (thanks to Simon Munton);
- fix for Linux library weirdness (thanks to Jim Diamond);
- port to DJGPP (thanks to Eli Zaretskii).
-v324 8/21/96 Add support for spaces in filenames (thanks to Simon Munton).
-v325 8/21/96 Add lessecho, for spaces in filenames under Unix.
-v326 8/27/96 Fix DJGPP version.
-v327 9/1/96 Reorganize lglob, make spaces in filenames work better in Unix.
-v328 10/7/96 Append / to directory name in filename completion.
- Fix MS-DOS and OS-9 versions.
-v329 10/11/96 Fix more MS-DOS bugs; add LESSSEPARATOR; add -" option.
- Add LESSMETACHARS, LESSMETAESCAPE.
-v330 10/21/96 Minor fixes.
- Posted to Web page.
------------------------------------------------------------------
-v331 4/22/97 Various Windows fixes (thanks to Gurusamy Sarathy).
-v332 4/22/97 Enter filenames from cmd line into edit history.
- Posted to Web page.
------------------------------------------------------------------
-v333 3/4/99 Changed -w to highlite new line after forward movement.
-v334 3/9/99 Avoid overflowing prompt buffer; add %d and %D.
-v335 3/20/99 Add EBCDIC support (thanks to Thomas Dorner).
- Use HOMEDRIVE/HOMEPATH on Windows (thanks to Preston Bannister).
- Posted to Web page.
------------------------------------------------------------------
-v336 4/8/99 Fix installation bugs.
-v337 4/9/99 Fix another installation bug.
- Posted to Web page.
------------------------------------------------------------------
-v338 4/13/99 Add support for long option names.
-v339 4/18/99 Add \k, long option names to lesskey. Add -^P. Add :d.
-v340 4/21/99 Add regexec2. Fix Windows build.
- Posted to Web page.
------------------------------------------------------------------
-v341 5/6/99 Add -F option; %c & ?c prompt escapes.
- (Thanks to Michele Maltoni)
-v342 7/22/99 Add system-wide lesskey file; allow GPL or Less License.
-v343 9/23/99 Support UTF-8 (Thanks to Robert Brady).
- Add %P and ?P in prompts.
-v344 10/27/99 -w highlights target line of g and p commands.
-v345 10/29/99 Make -R pass thru ESC but not other control chars.
- Posted to Web page.
------------------------------------------------------------------
-v346 11/4/99 Fix bugs in long option processing; R cmd should clear hilites.
- Posted to Web page.
------------------------------------------------------------------
-v347 12/13/99 Fixes for DJGPP version (thanks to Eli Zaretskii).
-v348 12/28/99 Fix deleting file with marks (thanks to Dimitar Jekov).
- Fix color problem in DJGPP version (thanks to Eli Zaretskii).
-v349 1/24/00 Fix minor DJGPP bugs; check environment vars for UTF-8;
- add --with-editor (thanks to Eli, Markus Kuhn, Thomas Schoepf).
-v350 3/1/00 Fix clear-while-standout bug.
-v351 3/5/00 Change -M and = prompts to show top & bottom line number.
- Posted to Web page.
------------------------------------------------------------------
-v352 3/8/00 Fix scan_option NULL dereference.
------------------------------------------------------------------
-v353 3/20/00 Fix SECURE compile bug, allow space after numeric option.
-v354 3/23/00 Add support for PCRE; add --with-regex configure option.
------------------------------------------------------------------
-v355 6/28/00 Add -# option (thanks to Andy Levinson).
-v356 7/5/00 Add -J option.
-v357 7/6/00 Support sigprocmask.
------------------------------------------------------------------
-v358 7/8/00 Fix problems with #stop in lesskey file.
- Posted to Web page.
------------------------------------------------------------------
-v359 9/10/00 Fixes for Win32 display problems (thanks to Maurizio Vairani).
-v360 1/17/01 Move sysless to etc.
-v361 12/4/01 Add IBM-1047 charset & EBCDIC fixes (thanks to Thomas Dorner).
- Fix 32 bit dependencies (thanks to Paul Eggert).
- Fix UTF-8 overstriking (thanks to Robert Brady).
-v362 12/4/01 Make status column show search targets.
-v363 12/6/01 Add --no-keypad option.
- Add variable width tabstops (thanks to Peter Samuelson).
-v364 12/10/01 Better handling of very long lines in input;
- Fix horizontal shifting of colored text.
-v365 12/11/01 Fix overstriking of tabs;
- Add support for global(1) and multiple tag matches
- (thanks to Shigio Yamaguchi and Tim Vanderhoek).
-v366 12/11/01 Fixes for OS/2 (thanks to Kyosuke Tokoro).
-v367 12/13/01 Allow -D and -x options to terminate without dollar sign;
- Right/left arrow when entering N are shift cmds, not line edit.
-v368 12/18/01 Update lesskey commands.
-v370 12/23/01 Fix tags error messages.
- Posted to Web page.
------------------------------------------------------------------
-v371 12/26/01 Fix new_file bug; use popen in Windows version;
- fix some compiler warnings.
-v372 12/29/01 Make -b be in units of 1K.
-v373 1/14/02 Improve handling of filenames containing shell metachars.
-v374 2/7/02 Fix memory leak; fix bug in -x argument parsing.
-v375 4/7/02 Fix searching for SGR sequences; fix SECURE build;
- add SGR support to DJGPP version (thanks to Eli Zaretskii).
-v376 6/10/02 Fix bug in overstriking mulitbyte UTF-8 characters
- (thanks to Jungshik Shin).
- Posted to Web page.
------------------------------------------------------------------
-v377 9/10/02 Fix bug in Windows version when file contains CR;
- fix bug in search highlights with -R;
- make initial buffer limit really be 64K not unlimited.
-v378 9/30/02 Misc bug fixes and compiler warning cleanup.
- Posted to Web page.
------------------------------------------------------------------
-v379 11/23/02 Add -L option; fix bug with ctrl-K in lesskey files;
- improve UTF-8 overstriking and underscore overstriking;
- fix minor man page problems; change to autoconf 2.54.
-v380 11/24/02 Make LINENUM same as POSITION.
-v381 11/28/02 Make -N use 7 columns for line number if possible.
------------------------------------------------------------------
-v382 2/3/04 Remove copyrighted code.
------------------------------------------------------------------
-v383 2/16/04 Add history file; add -K option; improve UTF-8 handling;
- fix some signed char bugs (thanks to Christian Biere);
- fix some upper/lower case bugs (thanks to Bjoern Jacke);
- add erase2 char (thanks to David Lawrence);
- add windows charset (thanks to Dimitar Zhekov).
-v384 2/20/04 Improvements in UTF-8 handling.
-v385 2/23/04 Fix UTF-8 output bug.
------------------------------------------------------------------
-v386 9/13/05 Improvements to UTF-8 shift & color (thanks to Charles Levert);
- protect against invalid LESSOPEN and LESSCLOSE values.
-v387 9/14/05 Update Charles Levert's UTF-8 patch.
-v388 9/14/05 Change history behavior; change most sprintf calls to snprintf.
-v389 9/14/05 Fix copy & paste with long lines; improve performance of
- expand_linebuf; fix crash in init_mlist;
-v390 9/15/05 Show search matches in status column even if -G is set.
------------------------------------------------------------------
-v391 9/17/05 Fix bugs.
-v392 10/14/05 Fix line wrapping bug.
-v393 10/19/05 Allow multiple attributes per char; fix bold+underline bug
- (thanks again to Charles Levert).
-v394 11/8/05 Fix prompt bug; fix compile problem in Windows build.
------------------------------------------------------------------
-v395 1/12/07 Update Unicode tables (thanks to Charles Levert);
- don't chmod if LESSHISTFILE = /dev/null;
- make -f work for directories; support DESTDIR in Makefile;
- fix sigset_t detection in configure;
- make "t" cmd traverse tags in correct order
-v396 1/13/07 Add compatibility with POSIX more.
-v397 3/21/07 Allow decimal point in number for % command;
- Allow decimal point in number for -j option;
- Allow n command to fetch last search pattern from history
- (thanks to arno).
-v398 3/22/07 Don't rewrite history file if not necessary;
- fix bug when filenames contain "$".
-v399 3/22/07 Don't move to bottom of screen at startup;
- don't output extraneous newlines.
-v400 3/23/07 Allow search to find pattern after null byte (PCRE and no-regex)
- (thanks to Michael Constant).
------------------------------------------------------------------
-v401 3/24/07 Minor documentation fixes.
-v402 3/30/07 Fix autoconf bug when memcpy etc are inline;
- fix bug in terminating number following -j option.
-v403 5/25/07 Fix Windows build.
-v404 6/5/07 Fix display bug with F command and long lines.
-v405 6/17/07 Fix display bug when using -w option.
-v406 6/17/07 Fix secure build.
-v407 8/16/07 Fix bugs; support CSI chars.
-v408 10/1/07 Fix bug in -i with non-ASCII chars.
-v409 10/12/07 Fix crash when viewing text with invalid UTF-8 sequences.
-v411 11/6/07 Fix case-insensitive searching with non-ASCII text.
-v412 11/6/07 Use symbolic SEEK constants.
-v413 11/6/07 Fix search highlight bug with non-ASCII text.
-v414 11/6/07 Fix display bug with no-wrap terminals.
-v415 11/14/07 Add --follow-name option.
-v416 11/22/07 Fix crash when searching text with invalid UTF-8 sequences.
-*/
-
-char version[] = "416";
OpenPOWER on IntegriCloud