ous revision' href='/ingrix/lynx-snapshots/blame/aclocal.m4?id=7c7d8c9582cea3ed0ff52f6e7d212fa85b3cd75f'>^
<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Lynx Users Guide v2.8.4</title>
<link rev="made" href="mailto:lynx-dev@sig.net">
</head>
<body>
<h1>Lynx Users Guide v2.8.4</h1>
Lynx is a fully-featured <em>World Wide Web</em> (<em>WWW</em>) client
for users running cursor-addressable, character-cell display devices (e.g.,
vt100 terminals, vt100 emulators running on PCs or Macs, or any other
character-cell display). It will display <em>Hypertext Markup Language</em>
(<em>HTML</em>) documents containing links to files on the local system, as
well as files on remote systems running <em>http</em>, <em>gopher</em>,
<em>ftp</em>, <em>wais</em>, <em>nntp</em>, <em>finger</em>, or
<em>cso</em>/<em>ph</em>/<em>qi</em> servers, and services accessible via
logins to <em>telnet</em>, <em>tn3270</em> or <em>rlogin</em> accounts (see
<a href="lynx_url_support.html">URL Schemes Supported by Lynx</a>).
<a href="#Hist">Current</a> versions of Lynx run on Unix, VMS,
Windows3.x/9x/NT, 386DOS and OS/2 EMX.
<p>Lynx can be used to access information on the <em>WWW</em>, or to build
information systems intended primarily for local access. For example, Lynx
has been used to build several <em>Campus Wide Information Systems</em>
(<em>CWIS</em>). In addition, Lynx can be used to build systems isolated
within a single LAN.
<h2 ID="TOC"><A NAME="Contents"><em>Table of Contents</em></A></h2>
<ul>
<li><A HREF="#Help" NAME="ToC-Help">Lynx online help</A>
<li><A HREF="#Local" NAME="ToC-Local">Viewing local files with Lynx</A>
<li><A HREF="#Leaving" NAME="ToC-Leaving">Leaving Lynx</A>
<li><A HREF="#Remote" NAME="ToC-Remote">Starting Lynx with a Remote File</A>
<li><A HREF="#EnVar" NAME="ToC-EnVar">Starting Lynx with the WWW_HOME environment variable.</A>
<li><A HREF="#IntraDocNav" NAME="ToC-IntraDocNav">Navigating hypertext documents with Lynx</A>
<li><A HREF="#Disposing" NAME="ToC-Disposing">Printing, Mailing, and Saving rendered files to disk.</A>
<li><A HREF="#LocalSource" NAME="ToC-LocalSource">Viewing the HTML document source and editing documents</A>
<li><A HREF="#RemoteSource" NAME="ToC-RemoteSource">Downloading and Saving source files.</A>
<li><A HREF="#ReDo" NAME="ToC-ReDo">Reloading files and refreshing the display</A>
<li><A HREF="#Search" NAME="ToC-Search">Lynx searching commands</A>
<li><A HREF="#InteractiveOptions" NAME="ToC-InteractiveOptions">Lynx Options Menu</A>
<li><A HREF="#Mail" NAME="ToC-Mail">Comments and mailto: links</A>
<li><A HREF="#News" NAME="ToC-News">USENET News posting</A>
<li><A HREF="#Bookmarks" NAME="ToC-Bookmarks">Lynx bookmarks</A>
<li><A HREF="#Jumps" NAME="ToC-Jumps">Jump command</A>
<li><A HREF="#DirEd" NAME="ToC-DirEd">Directory Editing</A>
<li><A HREF="#ColorMouse" NAME="ToC-ColorMouse">Using Color & the Mouse</A>
<li><A HREF="#MiscKeys" NAME="ToC-MiscKeys">Scrolling and Other useful commands</A>
<li><a href="#Forms" NAME="ToC-Forms">Lynx and HTML Forms</a>
| <a href="#Images" NAME="ToC-Images">Lynx and HTML Images</a>
<li><a href="#Tables" NAME="ToC-Tables">Lynx and HTML Tables</a>
| <a href="#Tabs" NAME="ToC-Tabs">Lynx and HTML Tabs</a>
<li><a href="#Frames" NAME="ToC-Frames">Lynx and HTML Frames</a>
| <a href="#Banners" NAME="ToC-Banners">Lynx and HTML Banners</a>
<li><a href="#Footnotes" NAME="ToC-Footnotes">Lynx and HTML Footnotes</a>
| <a href="#Notes" NAME="ToC-Notes">Lynx and HTML Notes</a>
<li><a href="#Lists" NAME="ToC-Lists">Lynx and HTML Lists</a>
<li><a href="#Quotes" NAME="ToC-Quotes">Lynx and HTML Quotes</a>
<li><a href="#Eightbit" NAME="ToC-Eightbit">Lynx and HTML Internationalization: 8bit, UNICODE, etc.</a>
<li><a href="#USEMAP" NAME="ToC-USEMAP">Lynx and Client-Side-Image-Maps</a>
<li><a href="#Refresh" NAME="ToC-Refresh">Lynx and Client-Side-Pull</a>
<li><a href="#Cookies" NAME="ToC-Cookies">Lynx and State Management</a> (Me want <em>cookie</em>!)
<li><A HREF="#Invoking" NAME="ToC-Invoking">The Lynx command line</A>
<li><A HREF="#Environment" NAME="ToC-Environments">Environment variables used by Lynx</A>
<li><A HREF="#lynx.cfg" NAME="ToC-lynx.cfg">Main configuration file lynx.cfg</A>
<li><A HREF="#Hist" NAME="ToC-Hist">Lynx development history</A>
</ul>
<h2 ID="Help"><A NAME="Help"><em>Lynx online help</em></A></h2>
Online help is available while viewing any document. Press the
'<em>?</em>' or '<em>H</em>' key (or the '<em>h</em>' key if
vi-like key movement is not on) to see a list of help topics.
See the section titled <A HREF="#IntraDocNav">Navigating
hypertext documents with Lynx</A> for information on navigating
through the help files.
<p>In addition, a summary description of all the Lynx keystroke commands
and their key bindings is available by pressing the '<em>K</em>' key (or
the '<em>k</em>' key if vi-like key movement is not on).
[<A HREF="#ToC-Help">ToC</A>]
<p>
If you want to recall recent status-line messages, you can do so
by entering the `g' command, followed by `LYNXMESSAGES:'.
<h2 ID="Local"><A NAME="Local"><em>Viewing local files with Lynx</em></A></h2>
Lynx can be started by entering the Lynx command along with
the name of a file to display. For example these commands could
all be used to display an arbitrary ASCII text or HTML file:
<dl>
<dt>UNIX
<dd><code>lynx filename</code>
<dd><code>lynx /home/my-dir/filename</code>
<dd><code>lynx ~/filename</code>
<dt>VMS
<dd><code>lynx filename</code>
<dd><code>lynx dua5:[my-directory]filename</code>
<dd><code>lynx /dua5/my-directory/filename</code>
<dd><code>lynx ~/filename</code>
<dd><code>lynx sys$login:filename</code>
<dd><code>lynx /sys$login/filename</code>
<dt>Win32/DOS
<dd><code>lynx file:///filename</code>
<dd><code>lynx filename</code>
<dd><code>lynx c:/dir/filename</code>
<dd><code>lynx //n/dir/filename</code>
</dl>
<p>When executed, Lynx will clear the screen and display as much of the
specified file as will fit on the screen. Pressing a <em>down-arrow</em>
will bring up the next screen, and pressing an <em>up-arrow</em> will bring
up the previous screen. If no file is specified at startup, a default file
will be displayed, depending on settings e.g., in <em>lynx.cfg</em>.
<p>Lynx will display local files written in the <em>HyperText Markup
Language</em> (<em>HTML</em>), if the file's name ends with the characters
<em>.html</em>, <em>.htm</em>, <em>.shtml</em>, <em>.htmlx</em>,
<em>.html3</em>, or <em>.ht3</em>. HTML is a file format that allows users
to create a file that contains (among other things) hypertext links to other
files. Several files linked together may be described as a
<em>hypertext document</em>. If the filename does not have one of the
suffixes mapped by Lynx to HTML, the <em>-force_html</em> command line
option can be included to force treatment of the file as hypertext.
<p>When Lynx displays an HTML file, it shows links as "bold face"
text, except for one link, which is shown as "highlighted" text.
Whether "boldface" or "highlighted" text shows up as reverse
video, boldface type, or a color change, etc. depends on the
display device being used (and the way in which that device has
been configured). Lynx has no control over the exact presentation
of links.
<p>The one link displayed as "highlighted" text is the currently
"selected" link. Lynx will display the file associated with the
selected link when a <em>right-arrow</em> or a <em>Return</em> key is
pressed. To select a particular link, press the <em>up-arrow</em> or
<em>down-arrow</em> keys until the desired link becomes "highlighted,"
and then press the <em>right-arrow</em> or <em>Return</em> key to view
the linked information. Information included in the HTML file tells Lynx
where to find the linked file and what kind of server will provide it
(i.e., HTTP, Gopher, etc.).
<p>Lynx renders HTML files and saves the rendition (and the source, if
so configured in the <A HREF="#lynx.cfg">lynx.cfg</A> file)
for initial display and should you select the link again. If you do
select a link again and have reason to desire a new fetch and rendering
of the file, use the NOCACHE command, normally mapped to '<em>x</em>' and
'<em>X</em>', instead of the <em>right-arrow</em> or <em>Return</em> key
when positioned on the link. You also can force a new fetch and rendering
of the currently displayed document via the RELOAD command, normally mapped
to <EM>Control-R</em>.
<p>When a binary file is encountered Lynx will ask the user if he/she
wishes to download the file or cancel. If the user selects '<em>D'</em>
for download, Lynx will transfer the file into a temporary location and
present the user with a list of options. The only default option is
<em>Save to disk</em>, which is disabled if Lynx is running in anonymous
mode. Additional download methods may be defined in the
<A HREF="#lynx.cfg">lynx.cfg</A> file. Programs like kermit, zmodem
and FTP are some possible options. [<A HREF="#ToC-Local">ToC</A>]
<h2 ID="Leaving"><A NAME="Leaving"><em>Leaving Lynx</em></A></h2>
To exit Lynx use the '<em>q</em>' command. You will be asked whether
you really want to quit. Answering '<em>y</em>' will exit and '<em>n</em>'
will return you to the current document. Use '<em>Q</em>' or
<em>Control-D</em> to quit without verification. [<A HREF="#ToC-Leaving">ToC</A>]
<h2 ID="Remote"><A NAME="Remote"><em>Starting Lynx with a Remote File</em></A></h2>
If you wish to view a remote file (that is, a file residing on
some computer system other than the one upon which you are running
Lynx) without first viewing a local file, you must identify that
file by using a Uniform Resource Locator (URL). URLs take the
general form:
<p><code>PROTOCOL :// HOST / PATH</code>
<p>where
<dl>
<dt><code>PROTOCOL</code>
<dd>identifies the communications protocol (<em>scheme</em>) used
by the server that will provide the file. As mentioned earlier,
Lynx (and any WWW client) can interact with a variety of servers,
each with its own protocol.
<dt><code>HOST</code>
<dd>is the Internet address of the computer system on which the
server is running, and
<dt><code>PATH</code>
<dd>is a scheme-specific field which for some schemes may
correspond to a directory path and/or filename.
</dl>
Here are some sample URLs.
<dl>
<dt>HTTP (HyperText Transfer Protocol)
<dd><code>http://www.trill-home.com/lynx.html</code>
<dt>Gopher
<dd><code>gopher://gopher.micro.umn.edu/11/</code>
<dt>FTP (File Transfer Protocol)
<dd><code>ftp://ftp2.cc.ukans.edu/pub/lynx/README</code>
<dt>WAIS (Wide Area Information Service protocol)
<dd><code>wais://cnidr.org/directory-of-servers</code>
<dt>A URL may be specified to Lynx on the command line, as in:
<dd><code>lynx http://kufacts.cc.ukans.edu/cwis/kufacts_start.html</code>
</dl>
Lynx also will attempt to create a complete URL if you include adequate
portions of it in the startfile argument. For example:<br>
<pre>
1234.6789.1234.6789.1234.6789.1234.6789.1234.6789.1234.6789.1234.6789.1234.6789
<em>wfbr</em> will be expanded to:
<em>http://www.wfbr.edu/</em> and:
<em>ftp.more.net/pub</em> will be expanded to:
<em>ftp://ftp.more.net/pub</em>
</pre>
See <a href="lynx_url_support.html">URL Schemes Supported by Lynx</a> for
more detailed information. [<A HREF="#ToC-Remote">ToC</A>]
<h2 ID="EnVar"><A NAME="EnVar"><em>Starting Lynx with the WWW_HOME environment variable.</em></A></h2>
You may also specify a starting file for Lynx using the WWW_HOME
environment variable,
<dl>
<dt>UNIX
<dd>
<dl>
<dt>ksh
<dd><code>export WWW_HOME=http://www.w3.org/</code>
<dt>csh
<dd><code>setenv WWW_HOME http://www.w3.org/</code>
</dl>
<dt>VMS
<dd><code>define "WWW_HOME" "http://www.w3.org/"</code>
<dt>win32
<dd><code>WWW_HOME=http://www.w3.org/ [or in registry]</code>
</dl>
Note that on VMS the double-quoting <em>must</em> be included to preserve
casing. [<A HREF="#ToC-EnVar">ToC</A>]
<h2 ID="IntraDocNav"><A NAME="IntraDocNav"><em>Navigating hypertext documents with Lynx</em></A></h2>
The process of moving within a hypertext web, selecting and displaying
links is known as "navigation." With Lynx almost all navigation can be
accomplished with the arrow keys and the numeric keypad.
<pre>
+-------+-------+-------+
| TOP | /|\ | Page |
arrow keys | of | | | UP |
| text 7| | 8| 9|
+---------+ +-------+-------+-------+
| SELECT | | | | |
| prev /|\| | <--- | | ---> |
| link | | | 4| 5| 6|
+---------+---------+---------+ +-------+-------+-------+
| BACK | SELECT | DISPLAY | | END | | | Page |
|<-- prev | next | | sel. -->| | of | | | DOWN |
| doc. | link \|/| link | | text 1| \|/ 2| 3|
+---------+---------+---------+ +-------+-------+-------+
</pre>
There are also a few other keyboard commands to aid in navigation. The
Control and Function keys used for navigation within the current document
are described in <A
HREF="#MiscKeys"><em>Scrolling and Other useful commands</em></A>. Some
additional commands depend on the fact that Lynx keeps a list of each
link you visited to reach the current document, called the <a
href="keystrokes/history_help.html">History Page</a>, and a
list of all links visited during the current Lynx session, called the <a
href="keystrokes/visited_help.html">Visited Links Page</a>. The
HISTORY keystroke command, normally mapped to <em>Backspace</em> or
<em>Delete</em>, will show you the <em>History Page</em> of links leading to
your access of the current document. Any of the previous documents shown in
the list may be revisited by selecting them from the history screen. The
VLINKS keystroke command, normally mapped to uppercase '<em>V</em>', will
show the <em>Visited Links Page</em>, and you similarly can select links in
that list. The MAIN_MENU keystroke command, normally mapped to '<em>m</em>'
and '<em>M</em>', will take you back to the starting document unless you
specified the <em>-homepage=URL</em> option at the command line. Also, the
LIST and ADDRLIST keystroke commands, normally mapped to '<em>l</em>' and
<em>A</em>' respectively, will create a compact lists of all the links in
the current document, and they can be selected via those lists.
<p>The '<em>i</em>' key presents an index of documents. The default index
offered contains many useful links, but can be changed in <em>lynx.cfg</em>
or on the command line using the <em>-index=URL</em> switch.
<p>If you choose a link to a server with active access authorization, Lynx
will automatically prompt for a username and a password. If you give the
correct information, you will then be served the requested information.
Lynx will automatically send your username and password to the same server
if it is needed again. [<A HREF="#ToC-IntraDocNav">ToC</A>]
<h2 ID="Disposing"><A NAME="Disposing"
><em>Printing, Mailing, and Saving rendered files to disk.</em></A></h2>
Rendered HTML documents, and plain text files, may be printed using the
'<em>p</em>' command while viewing the document. After pressing the
'<em>p</em>' key a menu of <em>Print Options</em> will be displayed. The
menu will vary according to several factors. First, some sites set up
special accounts to let users run Lynx to access local information systems.
Typically these accounts require no passwords and do not require users to
identify themselves. As a result such accounts are called "anonymous"
accounts, and their users are considered "anonymous" users. In most
configurations, all Lynx users (including anonymous users) are able to
mail files to themselves and print the entire file to the screen.
<p>Additional print options are available for users who are using
Lynx from their own accounts (that is, so-called "non-anonymous
users"). In particular, the <em>Save to a local file</EM>
option allows you to save the document into a file on your disk
space. Additional print options may also be
available as configured in the <A HREF="#lynx.cfg">lynx.cfg</A> file.
<p>Some options, such as <em>Save to a local file</em>, involve prompting
for an output filename. All output filename entries are saved in a
circular buffer, and any previous entries can be retrieved for re-use by
pressing the <em>up-arrow</em> or <em>down-arrow</em> keys at the prompt.
<p>Note that if you want exact copies of text files without any expansions
of TAB characters to spaces you should use the
<a href="#RemoteSource">Download</a> options.
[<A HREF="#ToC-Disposing">ToC</A>]
<h2 ID="LocalSource"><A NAME="LocalSource"
><em>Viewing the HTML document source and editing documents</em></A></h2>
When viewing HTML documents it is possible to retrieve and display the
unrendered (i.e., the original HTML) source of the document by pressing
the '<em>\</em>' (backslash) key. Lynx usually caches only the rendering
of the document and doesn't keep the source (unless it is configured to do
so in the <A HREF="#lynx.cfg">lynx.cfg</A> file), so to display the source
unrendered, Lynx must reload it from the server or disk.
When viewing unrendered documents you may print them as any normal document.
<p>Selecting the <em>Print to a local file</em> option from the Print Menu,
makes it possible to save the source of the document to disk so that you
may have a local copy of the document source, but it is better to <a
href="#RemoteSource">Download</a> the source.
<p>NOTE: When saving an HTML document it is important to name the
document with a <em>.html</em> or <em>.htm</em> extension, if you
want to read it with Lynx again later.
<p ID="FileEdit">Lynx can allow users to edit documents that reside on the
local system. To enable editing, documents must be referenced using a
"file:" URL or by specifying a plain filename on the command line as
in the following two examples:
<dl>
<dt>Command
<dd><code>lynx file://localhost/FULL/PATH/FILENAME</code>
<dd><code>lynx path/filename.html</code>
</dl>
In addition, the user must also specify an editor in the
<em>Options Menu</em> so that Lynx knows which editor to use. If the
file is specified correctly and an editor is defined, then you may edit
documents by using the '<em>e</em>' command. When the '<em>e</em>'
command is entered your specified editor is spawned to edit the file.
After changes are completed, exit your editor and you will return to Lynx.
Lynx will reload and render the file so that changes can be immediately
examined. [<A HREF="#ToC-LocalSource">ToC</A>]
<h2 ID="RemoteSource"><A NAME="RemoteSource"><em>Downloading and Saving source files.</em></A></h2>
If the DOWNLOAD keystroke command ('<em>d</em>' or <em>D</em>) is
used when positioned on a link for an HTML, plain text, or binary
file, Lynx will transfer the file, without rendering, into a
temporary location and present the user with a list of options,
just as it does when a link for a binary file of a type for which
no viewer has been mapped is activated.
<P>There is a default <em>Download option</em> of <em>Save to
disk</em>. This is disabled if Lynx is running in anonymous
mode. Any number of download methods such as kermit and zmodem
may be defined in addition to this default in the
<em>lynx.cfg</em> file. Using the <em>Save to disk</em> option
under the PRINT command after viewing the source of an HTML with
the VIEW SOURCE (<em>\</em>) command will result in a file which
differs from the original source in various ways such as tab
characters expanded to spaces. Lynx formats the source presentation
in this mode. On the other hand, if the DOWNLOAD command is used,
the only change will be that Lynx optionally puts
<blockquote>
<!--X-URL: http://www.site.foo/path/to/file.html --><BR>
<BASE href="http://www.site.foo/path/to/file.html">
</blockquote>
at the start of the file so that relative URLs in the document
will still work.
Even this modification can be prevented by setting
PREPEND_BASE_TO_SOURCE:FALSE in lynx.cfg.
<p>Some options, such as <em>Save to disk</em>, involve prompting for an
output filename. All output filename entries are saved in a circular buffer,
and any previous entries can be retrieved for re-use by pressing the
<em>up-arrow</em> or <em>down-arrow</em> keys at the prompt.
[<A HREF="#ToC-RemoteSource">ToC</A>]
<h2 ID="ReDo"><A NAME="ReDo"
><em>Reloading files and refreshing the display</em></A></h2>
The RELOAD (<em>Control-R</em>) command will reload and re-render the file
that you are currently viewing. The REFRESH (<em>Control-L</em> or
<em>Control-W</em>) command will refresh or wipe the screen to remove or
correct any errors that may be caused by operating system or other messages.
<p>The NOCACHE ('<em>x</em>' or '<em>X</em>') command can be used in lieu
of ACTIVATE (<em>Return</em> or <em>right-arrow</em>) to request an uncached
copy and new rendition for the current link, or resubmission of a FORM, if a
cache from a previous request or submission exits. The request or submission
will include <em>Pragma: no-cache</em> and <em>Cache-Control: no-cache</em>
in its headers. Note that FORMs with POST content will be resubmitted
regardless of whether the NOCACHE or ACTIVATE command is used (see <A
HREF="#Forms"><em>Lynx and HTML Forms</em></A>).
[<A HREF="#ToC-ReDo">ToC</A>]
<h2 ID="Search"><A NAME="Search"><em>Lynx searching commands</em></A></h2>
Two commands activate searching in Lynx: '<em>/</em>' and '<em>s</em>'.
<p>While viewing a normal document use the '<em>/</em>' command
to find a word or phrase within the current document. The search
type will depend on the search option setting in the <a
href="#InteractiveOptions">Options Menu</a>. The search options
are case sensitive and case insensitive. These searches are
entirely local to Lynx.
<p>Some documents are designated <em>index documents</em> by virtue of an
ISINDEX element in their HEAD section. These documents can be used to
retrieve additional information based on searches using words or phrases
submitted to an index server. The Lynx statusline will indicate that you
are viewing such a document, and if so, the '<em>s</em>' key will invoke a
statusline prompt to enter a query string. The prompt can be specified via
a PROMPT attribute in the ISINDEX element. Otherwise, Lynx will use an
internally configured prompt. The address for submitting the search can be
specified via an HREF or ACTION attribute. Otherwise, Lynx will use the
current document's URL and append your query string as a <em>?searchpart</em>
(see <a href="lynx_url_support.html">Supported URLs</a>).
<p>All search words or strings which you have entered during a Lynx session
are saved in a circular buffer, and can be retrieved for re-use by pressing
the <em>up-arrow</em> or <em>down-arrow</em> keys at the prompt for a search
word or string. Also, you can use the '<em>n</em>'ext command to repeat a
search with the last-entered search word or phrase, starting from the current
position in the document. The word or phrase matches will be highlighted
throughout the document, but such highlighting will not persist for new
documents, or if the current document is reloaded. The search cycles to the
top of the document if the word or phrase is not located below your current
position.
<p>Although <a href="#Forms">HTML Forms</a> have largely replaced index
documents for searches via http servers, they are still useful for performing
searches directly via WAIS or Gopher servers in conjunction with the internal
gateways for such servers. For example, an HTML index document can act as a
<em>cover page</em> describing a WAIS database and how to formulate query
strings for searching it, and include an element such as:<BR>
<pre>
<em><ISINDEX PROMPT="Enter WAIS query:"
HREF="wais://net.bio.net/biologists-addresses"></em>
</pre>
for submitting a search of the Biologist's Addresses database directly
to the net.bio.net WAIS server. [<A HREF="#ToC-Search">ToC</A>]
<h2 ID="InteractiveOptions"><A NAME="InteractiveOptions"><em>Lynx Options Menu</em></A></h2>
The Lynx <em>Options Menu</em> may be accessed by pressing the '<em>o</em>'
key. It allows you to change options at runtime, if you need to.
Most changes are read from & saved to your .lynxrc file; those which are not
are marked (!) in the form-based menu (as below). Many other options
are stored in the <A HREF="#lynx.cfg">lynx.cfg</A> file.
<p>Lynx supports two styles of Options Menu, key-based & form-based.
The form-based menu shown below is an HTML file generated at runtime,
in which the user fills in choices as in any ordinary HTML form.
<pre>
Options Menu (Lynx Version 2.8.4rel.1)
Accept Changes - Reset Changes Left Arrow cancels changes <A
HREF="keystrokes/option_help.html">HELP!</A>
Save options to disk: [_]
(options marked with (!) will not be saved)
General Preferences
User mode : [Advanced....]
Editor : __________________________________________
Searching type : [Case insensitive]
Cookies (!) : [ask user..]
Keyboard Input
Keypad mode : [Links are numbered................]
Emacs keys : [OFF]
VI keys : [OFF]
Line edit style : [Bash-like Bindings]
Keyboard layout : [YAWERTY Cyrillic, for DEC LK201 kbd]
Display and Character Sets
Display character set : [Cyrillic (ISO-8859-5)..........]
Assumed document character set(!): [iso-8859-1......]
Raw 8-bit (!) : [OFF]
X Display (!) : __________________________________________
Document Appearance
Show color : [ON....]
Show cursor : [OFF]
Popups for select fields : [ON.]
HTML error recovery (!) : [strict (SortaSGML mode)]
Show images (!) : [as labels]
Verbose images : [OFF..........]
Headers Transferred to Remote Servers
Personal mail address : __________________________________________
Preferred document character set : _________________________________
Preferred document language : _________________________________
User-Agent header (!) : __________________________________________
Listing and Accessing Files
FTP sort criteria : [By Name]
Local directory sort criteria : [Mixed style......]
Show dot files : [ON.]
Execution links : [FOR LOCAL FILES ONLY]
Special Files and Screens
Multi-bookmarks : [ADVANCED]
Review/edit Bookmarks files : Goto multi-bookmark menu
Visited Pages : [As Visit Tree..........]
Check your lynx.cfg here
Accept Changes - Reset Changes Left Arrow cancels changes
</pre>
<p>The key-based menu depends on key-strokes to identify options
which the user wants to change. It is compiled into Lynx
and is accessed by setting FORMS_OPTIONS to TRUE in
<A HREF="#lynx.cfg">lynx.cfg</A>.
<pre>
Options Menu (Lynx Version 2.8.4rel.1)
(E)ditor : emacs
(D)ISPLAY variable : aixtest.cc.ukans.edu:0.0
mu(L)ti-bookmarks: OFF B)ookmark file: lynx_bookmarks.html
(F)TP sort criteria : By Filename
(P)ersonal mail address : montulli@netscape.com
(S)earching type : CASE INSENSITIVE
preferred document lan(G)uage: en
preferred document c(H)arset : NONE
display (C)haracter set : Western (ISO-8859-1)
raw 8-bit or CJK m(O)de : ON show color (&) : OFF
(V)I keys: OFF e(M)acs keys: OFF sho(W) dot files: OFF
popups for selec(T) fields : ON show cursor (@) : OFF
(K)eypad mode : Numbers act as arrows
li(N)e edit style : Default Binding
l(I)st directory style : Mixed style
(U)ser mode : Advanced verbose images (!) : ON
user (A)gent : [User-Agent header]
local e(X)ecution links : FOR LOCAL FILES ONLY
</pre>
An option can be changed by entering the capital letter or character in
parentheses for the option you wish to change (e.g., '<em>E</em>' for Editor
or '<em>@</em>' for show cursor). For fields where text must be entered,
simply enter the text by typing on the keyboard. The <a
href="keystrokes/edit_help.html">Line Editor</a> can be used to
correct mistakes, and <em>Control-U</em> can be used to erase the
line. When you are done entering a change press the <em>Return</em> key
to get back to the <em>Command?</em> prompt.
<p>For fields where you must choose one of two choices, press any key
to toggle the choices and press the <em>Return</em> key to finish the
change.
<p>For fields where you potentially have more than two choices,
popup windows may be evoked which function homologously to those
for select fields in <a href="#Forms">HTML Forms</a>. The popup
windows will be invoked only if you have popups for select fields
set to ON (see below). Otherwise, your cursor will be positioned
at the current choice, and you can press any key to cycle through
the choices, then press the <em>Return</em> key to finish the
change.
<p>When you are done changing options use the '<em>r</em>' command to
return to Lynx or the '<em>></em>' command to save the options to a
<em>.lynxrc</em> file and return to Lynx.
<p>The following table describes the options available on the
<em>Options Menu</em>:
<dl>
<dt>Editor
<dd>The editor to be invoked when editing browsable files, when
sending mail or comments, when preparing a news article for
posting, and for external TEXTAREA editing. The full pathname
of the editor command should be specified when possible.
<dt>DISPLAY variable
<dd>This option is only relevant to X Window users. The DISPLAY
(Unix) or DECW$DISPLAY (VMS) variable is picked up automatically
from the environment if it has been previously set.
<dt>Multi-bookmarks
<dd>Lynx supports a default bookmark file, and up to 26 total
bookmark files (see below). When multi-bookmarks is OFF,
the default bookmark file is used for the '<em>v</em>'iew
bookmarks and '<em>a</em>'dd bookmark link commands. If
multi-bookmark support is available in your account, the
setting can be changed to STANDARD or ADVANCED. In STANDARD
mode, a menu of available bookmarks always is invoked when
you seek to view a bookmark file or add a link, and you select
the bookmark file by its letter token (see
<em>Bookmark file</em>, below) in that menu. In ADVANCED mode,
you instead are prompted for the letter of the desired bookmark
file, but can enter '<em>=</em>' to invoke the STANDARD selection
menu, or <em>RETURN</em> for the default bookmark file.
<dt>Bookmark file
<dd>When multi-bookmarks is OFF, this is the filename and location
of your default personal bookmark file. Enter '<em>B</em>' to
modify the filename and/or location via the <a
href="keystrokes/edit_help.html">Line Editor</a>.
Bookmark files allow frequently traveled links to be stored in
personal easy to access files. Using the '<em>a</em>'dd bookmark
link command (see <a href="#Bookmarks">Lynx bookmarks</a>) you may save
any link that does not have associated POST content into a
bookmark file. All bookmark files must be in or under your
account's home directory. If the location specified does not
begin with a dot-slash (./), its presence will still be assumed,
and referenced to the home directory. When multi-bookmarks is
STANDARD or ADVANCED, entering '<em>B</em>' will invoke a menu
of up to 26 bookmark files (associated with the letters of the
English alphabet), for editing their filenames and locations
(<em>filepath</em>), and descriptions. Lynx will create bookmark
files, if they don't already exist, when you first '<em>a</em>'dd
a bookmark link to them. However, if you've specified a
subdirectory (e.g., ./BM/lynx_bookmarks.html), that subdirectory
must already exist. Note that on VMS you should use the URL
syntax for the filepath (e.g., <em>not</em>
[.BM]lynx_bookmarks.html).
For Win32, see [???].
<dt>FTP sort criteria
<dd>This option allows you to specify how files will be sorted
within FTP listings. The current options include
"<code>By Filename</code>", "<code>By Size</code>",
"<code>By Type<ibs in #(vi
*ws2_32*)
AC_DEFINE(USE_WINSOCK2_H,1,[Define to 1 if we should include winsock2.h])
;;
esac
CF_ADD_LIBS($cf_cv_netlibs)
test $cf_test_netlibs = no && echo "$cf_cv_netlibs" >&AC_FD_MSG
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_NGROUPS version: 4 updated: 2012/11/08 20:57:52
dnl ----------
dnl Check for the symbol NGROUPS
AC_DEFUN([CF_NGROUPS],
[
AC_MSG_CHECKING(if NGROUPS is defined)
AC_CACHE_VAL(cf_cv_ngroups,[
AC_TRY_COMPILE([
#if HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#if HAVE_LIMITS_H
#include <limits.h>
#endif
],[int x = NGROUPS],
[cf_cv_ngroups=yes],
[AC_TRY_COMPILE([
#if HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#if HAVE_LIMITS_H
#include <limits.h>
#endif
],[int x = NGROUPS_MAX],
[cf_cv_ngroups=NGROUPS_MAX],
[cf_cv_ngroups=no])
])
AC_MSG_RESULT($cf_cv_ngroups)
])
if test "$cf_cv_ngroups" = no ; then
AC_DEFINE(NGROUPS,16,[Define to maximum number of groups])
elif test "$cf_cv_ngroups" = NGROUPS_MAX ; then
AC_DEFINE(NGROUPS,NGROUPS_MAX)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_NO_LEAKS_OPTION version: 5 updated: 2012/10/02 20:55:03
dnl ------------------
dnl see CF_WITH_NO_LEAKS
AC_DEFUN([CF_NO_LEAKS_OPTION],[
AC_MSG_CHECKING(if you want to use $1 for testing)
AC_ARG_WITH($1,
[$2],
[AC_DEFINE_UNQUOTED($3,1,"Define to 1 if you want to use $1 for testing.")ifelse([$4],,[
$4
])
: ${with_cflags:=-g}
: ${with_no_leaks:=yes}
with_$1=yes],
[with_$1=])
AC_MSG_RESULT(${with_$1:-no})
case .$with_cflags in #(vi
.*-g*)
case .$CFLAGS in #(vi
.*-g*) #(vi
;;
*)
CF_ADD_CFLAGS([-g])
;;
esac
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_NSS_COMPAT version: 4 updated: 2012/11/08 20:57:52
dnl -------------
dnl Check for NSS compatible SSL libraries
dnl $1 = the [optional] directory in which the library may be found
AC_DEFUN([CF_NSS_COMPAT],[
check=`pkg-config --version 2>/dev/null`
if test -n "$check" ; then
cf_ssl_library=`pkg-config --libs nss`
cf_ssl_cflags=`pkg-config --cflags nss`
else
# Without pkg-config, we'll kludge in some defaults
cf_ssl_library="-lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4 -lpthread -ldl"
cf_ssl_cflags="-I/usr/include/nss3 -I/usr/include/nspr4"
fi
cf_ssl_library="-lnss_compat_ossl $cf_ssl_library"
case "$1" in #(vi
no) #(vi
cf_ssl_root=
;;
yes) #(vi
AC_CHECK_LIB(nss_compat_ossl, SSL_get_version,[],[
cf_ssl_root=/usr/local/nss_compat_ossl
if test -d $cf_ssl_root ; then
CF_VERBOSE(assume it is in $cf_ssl_root)
cf_ssl_library="-L$cf_ssl_root/lib $cf_ssl_library"
else
AC_MSG_ERROR(cannot find NSS compilant libraries)
fi
],
[-lnss_compat_ossl])
;;
*)
if test -d $1 ; then
if test -d $1/include ; then
cf_ssl_root=$1
elif test -d $1/../include ; then
cf_ssl_root=$1/..
else
AC_MSG_ERROR(cannot find NSS compilant library under $1)
fi
cf_ssl_library="-L$cf_ssl_root/lib $cf_ssl_library"
else
AC_MSG_WARN(expected a directory: $1)
fi
;;
esac
CF_ADD_LIBS($cf_ssl_library)
cf_ssl_subincs=yes
if test -n "$cf_ssl_root" ; then
if test -d $cf_ssl_root/include ; then
cf_ssl_cflags="-I$cf_ssl_root/include $cf_ssl_cflags"
test -d $cf_ssl_root/include/nss_compat_ossl || cf_ssl_subincs=no
fi
fi
CF_ADD_CFLAGS($cf_ssl_cflags)
if test "$cf_ssl_subincs" = yes ; then
AC_MSG_CHECKING(for NSS compilant include directory)
AC_TRY_COMPILE([
#include <stdio.h>
#include <nss_compat_ossl/nss_compat_ossl.h>],
[SSL_shutdown((SSL *)0)],
[cf_ssl_incl=yes],
[cf_ssl_incl=no])
AC_MSG_RESULT($cf_ssl_incl)
test "$cf_ssl_incl" = yes && AC_DEFINE(USE_NSS_COMPAT_INCL,1,[Define to 1 if we should use nss compatibility header])
fi
AC_MSG_CHECKING(if we can link to NSS compilant library)
AC_TRY_LINK([
#include <stdio.h>
#ifdef USE_NSS_COMPAT_INCL
#include <nss_compat_ossl/nss_compat_ossl.h>
#else
#include <ssl.h>
#endif
],
[SSL_shutdown((SSL *)0)],
[cf_ssl_library=yes],
[cf_ssl_library=no])
AC_MSG_RESULT($cf_ssl_library)
if test "$cf_ssl_library" = yes ; then
AC_DEFINE(USE_SSL,1,[Define to 1 if we should use SSL])
AC_DEFINE(USE_X509_SUPPORT,1,[Define to 1 if the SSL library provides X509 support])
else
AC_MSG_ERROR(Cannot link with NSS compilant libraries)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_OUR_MESSAGES version: 7 updated: 2004/09/12 19:45:55
dnl ---------------
dnl Check if we use the messages included with this program
dnl
dnl $1 specifies either Makefile or makefile, defaulting to the former.
dnl
dnl Sets variables which can be used to substitute in makefiles:
dnl MSG_DIR_MAKE - to make ./po directory
dnl SUB_MAKEFILE - makefile in ./po directory (see CF_BUNDLED_INTL)
dnl
AC_DEFUN([CF_OUR_MESSAGES],
[
cf_makefile=ifelse($1,,Makefile,$1)
use_our_messages=no
if test "$USE_NLS" = yes ; then
if test -d $srcdir/po ; then
AC_MSG_CHECKING(if we should use included message-library)
AC_ARG_ENABLE(included-msgs,
[ --disable-included-msgs use included messages, for i18n support],
[use_our_messages=$enableval],
[use_our_messages=yes])
fi
AC_MSG_RESULT($use_our_messages)
fi
MSG_DIR_MAKE="#"
if test "$use_our_messages" = yes
then
SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn"
MSG_DIR_MAKE=
fi
AC_SUBST(MSG_DIR_MAKE)
AC_SUBST(SUB_MAKEFILE)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PATHSEP version: 6 updated: 2012/09/29 18:38:12
dnl ----------
dnl Provide a value for the $PATH and similar separator (or amend the value
dnl as provided in autoconf 2.5x).
AC_DEFUN([CF_PATHSEP],
[
AC_MSG_CHECKING(for PATH separator)
case $cf_cv_system_name in
os2*) PATH_SEPARATOR=';' ;;
*) ${PATH_SEPARATOR:=':'} ;;
esac
ifelse([$1],,,[$1=$PATH_SEPARATOR])
AC_SUBST(PATH_SEPARATOR)
AC_MSG_RESULT($PATH_SEPARATOR)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PATH_PROG version: 9 updated: 2012/10/04 20:12:20
dnl ------------
dnl Check for a given program, defining corresponding symbol.
dnl $1 = environment variable, which is suffixed by "_PATH" in the #define.
dnl $2 = program name to find.
dnl $3 = optional list of additional program names to test.
dnl
dnl If there is more than one token in the result, #define the remaining tokens
dnl to $1_ARGS. We need this for 'install' in particular.
dnl
dnl FIXME: we should allow this to be overridden by environment variables
dnl
AC_DEFUN([CF_PATH_PROG],[
AC_REQUIRE([CF_PATHSEP])
test -z "[$]$1" && $1=$2
AC_PATH_PROGS($1,[$]$1 $2 $3,[$]$1)
cf_path_prog=""
cf_path_args=""
IFS="${IFS:- }"; cf_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR"
for cf_temp in $ac_cv_path_$1
do
if test -z "$cf_path_prog" ; then
if test "$with_full_paths" = yes ; then
CF_PATH_SYNTAX(cf_temp,break)
cf_path_prog="$cf_temp"
else
cf_path_prog="`basename $cf_temp`"
fi
elif test -z "$cf_path_args" ; then
cf_path_args="$cf_temp"
else
cf_path_args="$cf_path_args $cf_temp"
fi
done
IFS="$cf_save_ifs"
if test -n "$cf_path_prog" ; then
CF_MSG_LOG(defining path for ${cf_path_prog})
AC_DEFINE_UNQUOTED($1_PATH,"$cf_path_prog",Define to pathname $1)
test -n "$cf_path_args" && AC_DEFINE_UNQUOTED($1_ARGS,"$cf_path_args",Define to provide args for $1)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PATH_SYNTAX version: 14 updated: 2012/06/19 20:58:54
dnl --------------
dnl Check the argument to see that it looks like a pathname. Rewrite it if it
dnl begins with one of the prefix/exec_prefix variables, and then again if the
dnl result begins with 'NONE'. This is necessary to work around autoconf's
dnl delayed evaluation of those symbols.
AC_DEFUN([CF_PATH_SYNTAX],[
if test "x$prefix" != xNONE; then
cf_path_syntax="$prefix"
else
cf_path_syntax="$ac_default_prefix"
fi
case ".[$]$1" in #(vi
.\[$]\(*\)*|.\'*\'*) #(vi
;;
..|./*|.\\*) #(vi
;;
.[[a-zA-Z]]:[[\\/]]*) #(vi OS/2 EMX
;;
.\[$]{*prefix}*|.\[$]{*dir}*) #(vi
eval $1="[$]$1"
case ".[$]$1" in #(vi
.NONE/*)
$1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
;;
esac
;; #(vi
.no|.NONE/*)
$1=`echo [$]$1 | sed -e s%NONE%$cf_path_syntax%`
;;
*)
ifelse([$2],,[AC_MSG_ERROR([expected a pathname, not \"[$]$1\"])],$2)
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PDCURSES_W32 version: 1 updated: 2013/10/07 06:13:11
dnl ---------------
dnl Configure for PDCurses' Win32 library, checking for definitions as well
dnl which are needed to use its header file correctly.
AC_DEFUN([CF_PDCURSES_W32],[
AC_CHECK_LIB(pdcurses,initscr,[
CF_ADD_LIBS(-lpdcurses)
cf_cv_term_header=no
cf_cv_unctrl_header=no
AC_CHECK_FUNC(winwstr,[AC_DEFINE(PDC_WIDE)])
AC_CHECK_FUNC(pdcurses_dll_iname,[AC_DEFINE(PDC_DLL_BUILD)])
])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PDCURSES_X11 version: 13 updated: 2012/10/06 16:39:58
dnl ---------------
dnl Configure for PDCurses' X11 library
AC_DEFUN([CF_PDCURSES_X11],[
AC_REQUIRE([CF_X_ATHENA])
CF_ACVERSION_CHECK(2.52,
[AC_CHECK_TOOLS(XCURSES_CONFIG, xcurses-config, none)],
[AC_PATH_PROGS(XCURSES_CONFIG, xcurses-config, none)])
if test "$XCURSES_CONFIG" != none ; then
CPPFLAGS="$CPPFLAGS `$XCURSES_CONFIG --cflags`"
CF_ADD_LIBS(`$XCURSES_CONFIG --libs`)
cf_cv_lib_XCurses=yes
else
LDFLAGS="$LDFLAGS $X_LIBS"
CF_CHECK_CFLAGS($X_CFLAGS)
AC_CHECK_LIB(X11,XOpenDisplay,
[CF_ADD_LIBS(-lX11)],,
[$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])
AC_CACHE_CHECK(for XCurses library,cf_cv_lib_XCurses,[
CF_ADD_LIBS(-lXCurses)
AC_TRY_LINK([
#include <xcurses.h>
char *XCursesProgramName = "test";
],[XCursesExit();],
[cf_cv_lib_XCurses=yes],
[cf_cv_lib_XCurses=no])
])
fi
if test $cf_cv_lib_XCurses = yes ; then
AC_DEFINE(UNIX,1,[Define to 1 if using PDCurses on Unix])
AC_DEFINE(XCURSES,1,[Define to 1 if using PDCurses on Unix])
AC_CHECK_HEADER(xcurses.h, AC_DEFINE(HAVE_XCURSES,1,[Define to 1 if using PDCurses on Unix]))
else
AC_MSG_ERROR(Cannot link with XCurses)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PKG_CONFIG version: 7 updated: 2011/04/29 04:53:22
dnl -------------
dnl Check for the package-config program, unless disabled by command-line.
AC_DEFUN([CF_PKG_CONFIG],
[
AC_MSG_CHECKING(if you want to use pkg-config)
AC_ARG_WITH(pkg-config,
[ --with-pkg-config{=path} enable/disable use of pkg-config],
[cf_pkg_config=$withval],
[cf_pkg_config=yes])
AC_MSG_RESULT($cf_pkg_config)
case $cf_pkg_config in #(vi
no) #(vi
PKG_CONFIG=none
;;
yes) #(vi
CF_ACVERSION_CHECK(2.52,
[AC_PATH_TOOL(PKG_CONFIG, pkg-config, none)],
[AC_PATH_PROG(PKG_CONFIG, pkg-config, none)])
;;
*)
PKG_CONFIG=$withval
;;
esac
test -z "$PKG_CONFIG" && PKG_CONFIG=none
if test "$PKG_CONFIG" != none ; then
CF_PATH_SYNTAX(PKG_CONFIG)
fi
AC_SUBST(PKG_CONFIG)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_POSIX_C_SOURCE version: 8 updated: 2010/05/26 05:38:42
dnl -----------------
dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
dnl
dnl POSIX.1-1990 _POSIX_SOURCE
dnl POSIX.1-1990 and _POSIX_SOURCE and
dnl POSIX.2-1992 C-Language _POSIX_C_SOURCE=2
dnl Bindings Option
dnl POSIX.1b-1993 _POSIX_C_SOURCE=199309L
dnl POSIX.1c-1996 _POSIX_C_SOURCE=199506L
dnl X/Open 2000 _POSIX_C_SOURCE=200112L
dnl
dnl Parameters:
dnl $1 is the nominal value for _POSIX_C_SOURCE
AC_DEFUN([CF_POSIX_C_SOURCE],
[
cf_POSIX_C_SOURCE=ifelse([$1],,199506L,[$1])
cf_save_CFLAGS="$CFLAGS"
cf_save_CPPFLAGS="$CPPFLAGS"
CF_REMOVE_DEFINE(cf_trim_CFLAGS,$cf_save_CFLAGS,_POSIX_C_SOURCE)
CF_REMOVE_DEFINE(cf_trim_CPPFLAGS,$cf_save_CPPFLAGS,_POSIX_C_SOURCE)
AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
CF_MSG_LOG(if the symbol is already defined go no further)
AC_TRY_COMPILE([#include <sys/types.h>],[
#ifndef _POSIX_C_SOURCE
make an error
#endif],
[cf_cv_posix_c_source=no],
[cf_want_posix_source=no
case .$cf_POSIX_C_SOURCE in #(vi
.[[12]]??*) #(vi
cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
;;
.2) #(vi
cf_cv_posix_c_source="-D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
cf_want_posix_source=yes
;;
.*)
cf_want_posix_source=yes
;;
esac
if test "$cf_want_posix_source" = yes ; then
AC_TRY_COMPILE([#include <sys/types.h>],[
#ifdef _POSIX_SOURCE
make an error
#endif],[],
cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE")
fi
CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
CFLAGS="$cf_trim_CFLAGS"
CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
CF_MSG_LOG(if the second compile does not leave our definition intact error)
AC_TRY_COMPILE([#include <sys/types.h>],[
#ifndef _POSIX_C_SOURCE
make an error
#endif],,
[cf_cv_posix_c_source=no])
CFLAGS="$cf_save_CFLAGS"
CPPFLAGS="$cf_save_CPPFLAGS"
])
])
if test "$cf_cv_posix_c_source" != no ; then
CFLAGS="$cf_trim_CFLAGS"
CPPFLAGS="$cf_trim_CPPFLAGS"
CF_ADD_CFLAGS($cf_cv_posix_c_source)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PROG_AR version: 1 updated: 2009/01/01 20:15:22
dnl ----------
dnl Check for archiver "ar".
AC_DEFUN([CF_PROG_AR],[
AC_CHECK_TOOL(AR, ar, ar)
])
dnl ---------------------------------------------------------------------------
dnl CF_PROG_CC version: 3 updated: 2012/10/06 15:31:55
dnl ----------
dnl standard check for CC, plus followup sanity checks
dnl $1 = optional parameter to pass to AC_PROG_CC to specify compiler name
AC_DEFUN([CF_PROG_CC],[
ifelse($1,,[AC_PROG_CC],[AC_PROG_CC($1)])
CF_GCC_VERSION
CF_ACVERSION_CHECK(2.52,
[AC_PROG_CC_STDC],
[CF_ANSI_CC_REQD])
CF_CC_ENV_FLAGS
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PROG_EXT version: 11 updated: 2012/10/06 08:57:51
dnl -----------
dnl Compute $PROG_EXT, used for non-Unix ports, such as OS/2 EMX.
AC_DEFUN([CF_PROG_EXT],
[
AC_REQUIRE([CF_CHECK_CACHE])
case $cf_cv_system_name in
os2*)
CFLAGS="$CFLAGS -Zmt"
CPPFLAGS="$CPPFLAGS -D__ST_MT_ERRNO__"
CXXFLAGS="$CXXFLAGS -Zmt"
# autoconf's macro sets -Zexe and suffix both, which conflict:w
LDFLAGS="$LDFLAGS -Zmt -Zcrtdll"
ac_cv_exeext=.exe
;;
esac
AC_EXEEXT
AC_OBJEXT
PROG_EXT="$EXEEXT"
AC_SUBST(PROG_EXT)
test -n "$PROG_EXT" && AC_DEFINE_UNQUOTED(PROG_EXT,"$PROG_EXT",[Define to the program extension (normally blank)])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PROG_LINT version: 2 updated: 2009/08/12 04:43:14
dnl ------------
AC_DEFUN([CF_PROG_LINT],
[
AC_CHECK_PROGS(LINT, tdlint lint alint splint lclint)
AC_SUBST(LINT_OPTS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_PROG_RANLIB version: 1 updated: 2009/01/01 20:15:22
dnl --------------
dnl Check for ranlib.
dnl
dnl TODO: make this conditionally depend on autoconf version, since the later
dnl versions of autoconf use check-tool.
AC_DEFUN([CF_PROG_RANLIB],[
AC_CHECK_TOOL(RANLIB, ranlib, ':')
])
dnl ---------------------------------------------------------------------------
dnl CF_RECHECK_FUNC version: 3 updated: 2000/10/18 19:29:13
dnl ---------------
dnl Re-check on a function to see if we can pick it up by adding a library.
dnl $1 = function to check
dnl $2 = library to check in
dnl $3 = environment to update (e.g., $LIBS)
dnl $4 = what to do if this fails
dnl
dnl This uses 'unset' if the shell happens to support it, but leaves the
dnl configuration variable set to 'unknown' if not. This is a little better
dnl than the normal autoconf test, which gives misleading results if a test
dnl for the function is made (e.g., with AC_CHECK_FUNC) after this macro is
dnl used (autoconf does not distinguish between a null token and one that is
dnl set to 'no').
AC_DEFUN([CF_RECHECK_FUNC],[
AC_CHECK_LIB($2,$1,[
CF_UPPER(cf_tr_func,$1)
AC_DEFINE_UNQUOTED(HAVE_$cf_tr_func)
ac_cv_func_$1=yes
if test "$cf_used_lib_$2" != yes ; then cf_used_lib_$2=yes; $3="-l$2 [$]$3"; fi],[
ac_cv_func_$1=unknown
unset ac_cv_func_$1 2>/dev/null
$4],
[[$]$3])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_REMOVE_BROKEN version: 4 updated: 2012/11/08 20:57:52
dnl ----------------
dnl Check for broken definition of 'remove()'. This is (in particular) broken
dnl on the older version of SCO (I'd cite version if I knew where to look) by
dnl having <stdio.h> #define remove to __unlink, which appears in no library.
dnl
dnl Fortuitously, we can combine this with a more general test: do we have
dnl 'unlink()' but no 'remove()'. Note, however, that we cannot simply #define
dnl remove to unlink, but have to make a fallback function.
dnl
AC_DEFUN([CF_REMOVE_BROKEN],
[
AC_MSG_CHECKING(for broken/missing definition of remove)
AC_CACHE_VAL(cf_cv_baddef_remove,[
AC_TRY_LINK(
[#include <stdio.h>],
[remove("dummy")],
[cf_cv_baddef_remove=no],
[AC_TRY_LINK(
[#include <stdio.h>
int __unlink(name) { return unlink(name); } ],
[remove("dummy")],
[cf_cv_baddef_remove=yes],
[cf_cv_baddef_remove=unknown])
])
])
AC_MSG_RESULT($cf_cv_baddef_remove)
test "$cf_cv_baddef_remove" != no && AC_DEFINE(NEED_REMOVE,1,[Define to 1 if we should use remove rather than unlink])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_REMOVE_DEFINE version: 3 updated: 2010/01/09 11:05:50
dnl ----------------
dnl Remove all -U and -D options that refer to the given symbol from a list
dnl of C compiler options. This works around the problem that not all
dnl compilers process -U and -D options from left-to-right, so a -U option
dnl cannot be used to cancel the effect of a preceding -D option.
dnl
dnl $1 = target (which could be the same as the source variable)
dnl $2 = source (including '$')
dnl $3 = symbol to remove
define([CF_REMOVE_DEFINE],
[
$1=`echo "$2" | \
sed -e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[[ ]]/ /g' \
-e 's/-[[UD]]'"$3"'\(=[[^ ]]*\)\?[$]//g'`
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_RPATH_HACK version: 11 updated: 2013/09/01 13:02:00
dnl -------------
AC_DEFUN([CF_RPATH_HACK],
[
AC_REQUIRE([CF_LD_RPATH_OPT])
AC_MSG_CHECKING(for updated LDFLAGS)
if test -n "$LD_RPATH_OPT" ; then
AC_MSG_RESULT(maybe)
AC_CHECK_PROGS(cf_ldd_prog,ldd,no)
cf_rpath_list="/usr/lib /lib"
if test "$cf_ldd_prog" != no
then
cf_rpath_oops=
AC_TRY_LINK([#include <stdio.h>],
[printf("Hello");],
[cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[[ ]]/%/%' -e 's%/[[^/]][[^/]]*$%%' |sort | uniq`])
# If we passed the link-test, but get a "not found" on a given library,
# this could be due to inept reconfiguration of gcc to make it only
# partly honor /usr/local/lib (or whatever). Sometimes this behavior
# is intentional, e.g., installing gcc in /usr/bin and suppressing the
# /usr/local libraries.
if test -n "$cf_rpath_oops"
then
for cf_rpath_src in $cf_rpath_oops
do
for cf_rpath_dir in \
/usr/local \
/usr/pkg \
/opt/sfw
do
if test -f $cf_rpath_dir/lib/$cf_rpath_src
then
CF_VERBOSE(...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src)
LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib"
break
fi
done
done
fi
fi
CF_VERBOSE(...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS)
CF_RPATH_HACK_2(LDFLAGS)
CF_RPATH_HACK_2(LIBS)
CF_VERBOSE(...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS)
else
AC_MSG_RESULT(no)
fi
AC_SUBST(EXTRA_LDFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_RPATH_HACK_2 version: 6 updated: 2010/04/17 16:31:24
dnl ---------------
dnl Do one set of substitutions for CF_RPATH_HACK, adding an rpath option to
dnl EXTRA_LDFLAGS for each -L option found.
dnl
dnl $cf_rpath_list contains a list of directories to ignore.
dnl
dnl $1 = variable name to update. The LDFLAGS variable should be the only one,
dnl but LIBS often has misplaced -L options.
AC_DEFUN([CF_RPATH_HACK_2],
[
CF_VERBOSE(...checking $1 [$]$1)
cf_rpath_dst=
for cf_rpath_src in [$]$1
do
case $cf_rpath_src in #(vi
-L*) #(vi
# check if this refers to a directory which we will ignore
cf_rpath_skip=no
if test -n "$cf_rpath_list"
then
for cf_rpath_item in $cf_rpath_list
do
if test "x$cf_rpath_src" = "x-L$cf_rpath_item"
then
cf_rpath_skip=yes
break
fi
done
fi
if test "$cf_rpath_skip" = no
then
# transform the option
if test "$LD_RPATH_OPT" = "-R " ; then
cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%-R %"`
else
cf_rpath_tmp=`echo "$cf_rpath_src" |sed -e "s%-L%$LD_RPATH_OPT%"`
fi
# if we have not already added this, add it now
cf_rpath_tst=`echo "$EXTRA_LDFLAGS" | sed -e "s%$cf_rpath_tmp %%"`
if test "x$cf_rpath_tst" = "x$EXTRA_LDFLAGS"
then
CF_VERBOSE(...Filter $cf_rpath_src ->$cf_rpath_tmp)
EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS"
fi
fi
;;
esac
cf_rpath_dst="$cf_rpath_dst $cf_rpath_src"
done
$1=$cf_rpath_dst
CF_VERBOSE(...checked $1 [$]$1)
AC_SUBST(EXTRA_LDFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SET_ERRNO version: 5 updated: 2012/11/08 20:57:52
dnl ------------
dnl Check if 'errno' is declared in a fashion that lets us set it.
AC_DEFUN([CF_SET_ERRNO],
[
AC_CACHE_CHECK(if we can set errno,cf_cv_set_errno,[
AC_TRY_RUN([
#include <errno.h>
int main()
{
errno = 255;
${cf_cv_main_return:-return}(errno != 255);
}],
[cf_cv_set_errno=yes],
[cf_cv_set_errno=no],
[AC_TRY_LINK(
[#include <errno.h>],
[errno = 255],
[cf_cv_set_errno=maybe],
[cf_cv_set_errno=no])])
])
test "$cf_cv_set_errno" != no && AC_DEFINE(CAN_SET_ERRNO,1,[Define to 1 if we can set errno])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SIGWINCH version: 1 updated: 2006/04/02 16:41:09
dnl -----------
dnl Use this macro after CF_XOPEN_SOURCE, but do not require it (not all
dnl programs need this test).
dnl
dnl This is really a MacOS X 10.4.3 workaround. Defining _POSIX_C_SOURCE
dnl forces SIGWINCH to be undefined (breaks xterm, ncurses). Oddly, the struct
dnl winsize declaration is left alone - we may revisit this if Apple choose to
dnl break that part of the interface as well.
AC_DEFUN([CF_SIGWINCH],
[
AC_CACHE_CHECK(if SIGWINCH is defined,cf_cv_define_sigwinch,[
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/signal.h>
],[int x = SIGWINCH],
[cf_cv_define_sigwinch=yes],
[AC_TRY_COMPILE([
#undef _XOPEN_SOURCE
#undef _POSIX_SOURCE
#undef _POSIX_C_SOURCE
#include <sys/types.h>
#include <sys/signal.h>
],[int x = SIGWINCH],
[cf_cv_define_sigwinch=maybe],
[cf_cv_define_sigwinch=no])
])
])
if test "$cf_cv_define_sigwinch" = maybe ; then
AC_CACHE_CHECK(for actual SIGWINCH definition,cf_cv_fixup_sigwinch,[
cf_cv_fixup_sigwinch=unknown
cf_sigwinch=32
while test $cf_sigwinch != 1
do
AC_TRY_COMPILE([
#undef _XOPEN_SOURCE
#undef _POSIX_SOURCE
#undef _POSIX_C_SOURCE
#include <sys/types.h>
#include <sys/signal.h>
],[
#if SIGWINCH != $cf_sigwinch
make an error
#endif
int x = SIGWINCH],
[cf_cv_fixup_sigwinch=$cf_sigwinch
break])
cf_sigwinch=`expr $cf_sigwinch - 1`
done
])
if test "$cf_cv_fixup_sigwinch" != unknown ; then
CPPFLAGS="$CPPFLAGS -DSIGWINCH=$cf_cv_fixup_sigwinch"
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SIZECHANGE version: 9 updated: 2012/10/06 11:17:15
dnl -------------
dnl Check for definitions & structures needed for window size-changing
dnl FIXME: check that this works with "snake" (HP-UX 10.x)
AC_DEFUN([CF_SIZECHANGE],
[
AC_REQUIRE([CF_STRUCT_TERMIOS])
AC_CACHE_CHECK(declaration of size-change, cf_cv_sizechange,[
cf_cv_sizechange=unknown
cf_save_CPPFLAGS="$CPPFLAGS"
for cf_opts in "" "NEED_PTEM_H"
do
CPPFLAGS="$cf_save_CPPFLAGS"
test -n "$cf_opts" && CPPFLAGS="$CPPFLAGS -D$cf_opts"
AC_TRY_COMPILE([#include <sys/types.h>
#ifdef HAVE_TERMIOS_H
#include <termios.h>
#else
#ifdef HAVE_TERMIO_H
#include <termio.h>
#endif
#endif
#ifdef NEED_PTEM_H
/* This is a workaround for SCO: they neglected to define struct winsize in
* termios.h -- it's only in termio.h and ptem.h
*/
#include <sys/stream.h>
#include <sys/ptem.h>
#endif
#if !defined(sun) || !defined(HAVE_TERMIOS_H)
#include <sys/ioctl.h>
#endif
],[
#ifdef TIOCGSIZE
struct ttysize win; /* FIXME: what system is this? */
int y = win.ts_lines;
int x = win.ts_cols;
#else
#ifdef TIOCGWINSZ
struct winsize win;
int y = win.ws_row;
int x = win.ws_col;
#else
no TIOCGSIZE or TIOCGWINSZ
#endif /* TIOCGWINSZ */
#endif /* TIOCGSIZE */
],
[cf_cv_sizechange=yes],
[cf_cv_sizechange=no])
CPPFLAGS="$cf_save_CPPFLAGS"
if test "$cf_cv_sizechange" = yes ; then
echo "size-change succeeded ($cf_opts)" >&AC_FD_CC
test -n "$cf_opts" && cf_cv_sizechange="$cf_opts"
break
fi
done
])
if test "$cf_cv_sizechange" != no ; then
AC_DEFINE(HAVE_SIZECHANGE,1,[Define to 1 if sizechar declarations are provided])
case $cf_cv_sizechange in #(vi
NEED*)
AC_DEFINE_UNQUOTED($cf_cv_sizechange )
;;
esac
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SLANG_CPPFLAGS version: 10 updated: 2012/11/08 20:57:52
dnl -----------------
dnl Look for the slang header files in the standard places, adjusting the
dnl CPPFLAGS variable.
dnl
dnl $1 = parameter to search for "slang2" class, e.g., for pkgsrc.
AC_DEFUN([CF_SLANG_CPPFLAGS],
[
AC_CACHE_CHECK(for $1 header file,cf_cv_$1_header,[
cf_cv_$1_header=no
AC_TRY_COMPILE([#include <slang.h>],
[printf("%s\n", SLANG_VERSION)],
[cf_cv_$1_header=predefined],[
CF_HEADER_PATH(cf_search,$1)
for cf_incdir in $cf_search
do
for cf_header in \
slang.h
do
echo trying $cf_incdir/$cf_header 1>&AC_FD_CC
if egrep "SLANG_VERSION" $cf_incdir/$cf_header 1>&AC_FD_CC 2>&1; then
cf_cv_$1_header=$cf_incdir/$cf_header
break
fi
done
test "$cf_cv_$1_header" != no && break
done
])])
if test "x$cf_cv_$1_header" != xno
then
AC_DEFINE(USE_SLANG,1,[Define to 1 if we should use s-lang library])
CF_DIRNAME(cf_incdir,$cf_cv_$1_header)
case $cf_cv_$1_header in # (vi
predefined) # (vi
;;
*)
CF_ADD_INCDIR($cf_incdir)
;;
esac
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SLANG_LIBS version: 8 updated: 2010/04/03 15:30:05
dnl -------------
dnl Look for the slang library.
dnl
dnl $1 = the actual library name, usually "slang"
AC_DEFUN([CF_SLANG_LIBS],
[
cf_slang_LIBS1="$LIBS"
CF_TERMCAP_LIBS
cf_slang_LIBS2="$LIBS"
AC_CHECK_FUNC(acos,,[CF_RECHECK_FUNC(acos,m,LIBS)])
case $host_os in #(vi
os2*)
CF_FIND_LIBRARY(video,video,
[#include <sys/video.h>],
[v_init()],
v_init)
;;
esac
CF_FIND_LIBRARY($1,$1,
[#include <slang.h>],
[SLtt_get_screen_size()],
SLtt_get_screen_size)
cf_slang_LIBS3="$LIBS"
AC_MSG_CHECKING(if we can link $1 without termcap)
if test -n "`echo $cf_slang_LIBS1 | sed -e 's/ //g'`" ; then
cf_exclude=`echo ".$cf_slang_LIBS2" | sed -e "s%$cf_slang_LIBS1%%" -e 's%^.%%'`
else
cf_exclude="$cf_slang_LIBS2"
fi
LIBS=`echo ".$cf_slang_LIBS3" | sed -e "s%$cf_exclude%%" -e 's%^.%%'`
AC_TRY_LINK([#include <slang.h>],
[SLtt_get_screen_size()],
[cf_result=yes],
[cf_result=no])
AC_MSG_RESULT($cf_result)
test $cf_result = no && LIBS="$cf_slang_LIBS3"
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SLANG_UNIX_DEFS version: 6 updated: 2012/11/08 20:57:52
dnl ------------------
dnl Slang's header files rely on some predefined symbols to declare variables
dnl that we might find useful. This check is needed, because those symbols
dnl are generally not available.
AC_DEFUN([CF_SLANG_UNIX_DEFS],
[
CF_SLANG_CPPFLAGS(slang)
if test "x$cf_cv_slang_header" != xno
then
CF_SLANG_LIBS(slang)
else
CF_SLANG_CPPFLAGS(slang2)
if test "x$cf_cv_slang2_header" != xno
then
CF_SLANG_LIBS(slang2)
else
AC_MSG_ERROR(cannot find slang headers)
fi
fi
# There's an unofficial set of patches for slang that gives it some limited
# UTF8 capability. Unfortunately it won't compile unless one defines UTF8.
AC_CACHE_CHECK(if we must define UTF8,cf_cv_slang_utf8,[
AC_TRY_COMPILE([#include <slang.h>],
[SLtt_get_screen_size()],
[cf_cv_slang_utf8=no],
[
AC_TRY_COMPILE([
#define UTF8
#include <slang.h>],
[SLtt_get_screen_size()],
[cf_cv_slang_utf8=yes],
[cf_cv_slang_utf8=unknown])])
])
if test "$cf_cv_slang_utf8" = yes ; then
AC_DEFINE(UTF8,1,[Define to 1 if we must define UTF-8 for s-lang headers])
fi
AC_CACHE_CHECK(if we must tell slang this is UNIX,cf_cv_slang_unix,[
AC_TRY_LINK([#include <slang.h>],
[
#ifdef REAL_UNIX_SYSTEM
make an error
#else
extern int SLang_TT_Baud_Rate;
SLang_TT_Baud_Rate = 1
#endif
],
[cf_cv_slang_unix=yes],
[cf_cv_slang_unix=no])
])
test $cf_cv_slang_unix = yes && AC_DEFINE(REAL_UNIX_SYSTEM,1,[Define to 1 if we must define REAL_UNIX_SYSTEM to compile with s-lang headers])
CF_CHECK_TYPE(SLsmg_Color_Type,int,[#include <slang.h>])
CF_CHECK_TYPE(SLtt_Char_Type,unsigned long,[#include <slang.h>])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SOCKS version: 9 updated: 2012/11/08 20:57:52
dnl --------
dnl Check for socks library
dnl $1 = the [optional] directory in which the library may be found
AC_DEFUN([CF_SOCKS],[
CF_ADD_OPTIONAL_PATH($1, [socks library])
CF_FIND_LINKAGE([
#include <stdio.h>
],[
Raccept((char *)0)
],
socks)
if test "x$cf_cv_find_linkage_socks" = "xyes" ; then
AC_DEFINE(SOCKS,1,[Define to 1 if we are using socks library])
AC_DEFINE(accept,Raccept,[Define to override function name if using socks library])
AC_DEFINE(bind,Rbind,[Define to override function name if using socks library])
AC_DEFINE(connect,Rconnect,[Define to override function name if using socks library])
AC_DEFINE(getpeername,Rgetpeername,[Define to override function name if using socks library])
AC_DEFINE(getsockname,Rgetsockname,[Define to override function name if using socks library])
AC_DEFINE(listen,Rlisten,[Define to override function name if using socks library])
AC_DEFINE(recvfrom,Rrecvfrom,[Define to override function name if using socks library])
AC_DEFINE(select,Rselect,[Define to override function name if using socks library])
else
AC_MSG_ERROR(cannot link with socks library)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SOCKS5 version: 12 updated: 2012/11/08 20:57:52
dnl ---------
dnl Check for socks5 configuration
dnl $1 = the [optional] directory in which the library may be found
AC_DEFUN([CF_SOCKS5],[
CF_ADD_OPTIONAL_PATH($1, [socks5 library])
CF_ADD_LIBS(-lsocks5)
AC_DEFINE(USE_SOCKS5,1,[Define to 1 if we are using socks5 library])
AC_DEFINE(SOCKS,1,[Define to 1 if we are using socks library])
AC_MSG_CHECKING(if the socks library uses socks4 prefix)
cf_use_socks4=error
AC_TRY_LINK([
#include <socks.h>],[
Rinit((char *)0)],
[AC_DEFINE(USE_SOCKS4_PREFIX,1,[Define to 1 if socks library uses socks4 prefix])
cf_use_socks4=yes],
[AC_TRY_LINK([#include <socks.h>],
[SOCKSinit((char *)0)],
[cf_use_socks4=no],
[AC_MSG_ERROR(Cannot link with socks5 library)])])
AC_MSG_RESULT($cf_use_socks4)
if test "$cf_use_socks4" = "yes" ; then
AC_DEFINE(accept,Raccept)
AC_DEFINE(bind,Rbind)
AC_DEFINE(connect,Rconnect)
AC_DEFINE(getpeername,Rgetpeername)
AC_DEFINE(getsockname,Rgetsockname)
AC_DEFINE(listen,Rlisten)
AC_DEFINE(recvfrom,Rrecvfrom)
AC_DEFINE(select,Rselect)
else
AC_DEFINE(accept,SOCKSaccept)
AC_DEFINE(getpeername,SOCKSgetpeername)
AC_DEFINE(getsockname,SOCKSgetsockname)
AC_DEFINE(recvfrom,SOCKSrecvfrom)
fi
AC_MSG_CHECKING(if socks5p.h is available)
AC_TRY_COMPILE([
#define INCLUDE_PROTOTYPES
#include <socks.h>],[
init((char *)0)],
[cf_use_socks5p_h=yes],
[cf_use_socks5p_h=no])
AC_MSG_RESULT($cf_use_socks5p_h)
test "$cf_use_socks5p_h" = yes && AC_DEFINE(INCLUDE_PROTOTYPES,1,[Define to 1 if needed to declare prototypes in socks headers])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SRAND version: 11 updated: 2012/10/31 07:00:16
dnl --------
dnl Check for functions similar to srand() and rand(). lrand48() and random()
dnl return a 31-bit value, while rand() returns a value less than RAND_MAX
dnl which usually is only 16-bits.
dnl
dnl On MirOS, use arc4random_push() and arc4random().
dnl Some systems support an asymmetric variation of this interface.
dnl
dnl $1 = optional prefix for resulting shell variables. The default "my_"
dnl gives $my_srand and $my_rand to the caller, as well as MY_RAND_MAX.
dnl These are all AC_SUBST'd and AC_DEFINE'd.
AC_DEFUN([CF_SRAND],[
AC_CACHE_CHECK(for random-integer functions, cf_cv_srand_func,[
cf_cv_srand_func=unknown
for cf_func in arc4random_push/arc4random arc4random_stir/arc4random srandom/random srand48/lrand48 srand/rand
do
CF_SRAND_PARSE($cf_func,cf_srand_func,cf_rand_func)
AC_TRY_LINK([
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
],[long seed = 1; $cf_srand_func(seed); seed = $cf_rand_func()],
[cf_cv_srand_func=$cf_func
break])
done
])
if test "$cf_cv_srand_func" != unknown ; then
AC_CACHE_CHECK(for range of random-integers, cf_cv_rand_max,[
case $cf_cv_srand_func in
srand/rand)
cf_cv_rand_max=RAND_MAX
cf_rand_max=16
;;
*/arc4random)
cf_cv_rand_max=0xFFFFFFFFUL
cf_rand_max=32
;;
*)
cf_cv_rand_max=INT_MAX
cf_rand_max=31
;;
esac
AC_TRY_COMPILE([
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
],[long x = $cf_cv_rand_max],,
[cf_cv_rand_max="(1L<<$cf_rand_max)-1"])
])
case $cf_cv_srand_func in
*/arc4random)
AC_MSG_CHECKING(if <bsd/stdlib.h> should be included)
AC_TRY_COMPILE([#include <bsd/stdlib.h>],
[void *arc4random(int);
void *x = arc4random(1)],
[cf_bsd_stdlib_h=no],
[AC_TRY_COMPILE([#include <bsd/stdlib.h>],
[unsigned x = arc4random()],
[cf_bsd_stdlib_h=yes],
[cf_bsd_stdlib_h=no])])
AC_MSG_RESULT($cf_bsd_stdlib_h)
if test "$cf_bsd_stdlib_h" = yes
then
AC_DEFINE(HAVE_BSD_STDLIB_H,1,[Define to 1 if bsd/stdlib.h header should be used])
else
AC_MSG_CHECKING(if <bsd/random.h> should be included)
AC_TRY_COMPILE([#include <bsd/random.h>],
[void *arc4random(int);
void *x = arc4random(1)],
[cf_bsd_random_h=no],
[AC_TRY_COMPILE([#include <bsd/random.h>],
[unsigned x = arc4random()],
[cf_bsd_random_h=yes],
[cf_bsd_random_h=no])])
AC_MSG_RESULT($cf_bsd_random_h)
if test "$cf_bsd_random_h" = yes
then
AC_DEFINE(HAVE_BSD_RANDOM_H,1,[Define to 1 if bsd/random.h header should be used])
else
AC_MSG_WARN(no header file found for arc4random)
fi
fi
;;
esac
CF_SRAND_PARSE($cf_func,cf_srand_func,cf_rand_func)
CF_UPPER(cf_rand_max,ifelse($1,,my_,$1)rand_max)
AC_DEFINE_UNQUOTED(ifelse($1,,my_,$1)srand,$cf_srand_func,[Define to the name for the srand function])
AC_DEFINE_UNQUOTED(ifelse($1,,my_,$1)rand, $cf_rand_func,[Define to the name for the rand function])
AC_DEFINE_UNQUOTED([$]cf_rand_max, $cf_cv_rand_max,[Define to the name for the RAND_MAX constant])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SRAND_PARSE version: 1 updated: 2007/04/22 12:01:07
dnl --------------
dnl Parse the loop variable for CF_SRAND, with a workaround for asymmetric
dnl variations.
define([CF_SRAND_PARSE],[
$2=`echo $1 | sed -e 's%/.*%%'`
$3=`echo $1 | sed -e 's%.*/%%'`
case [$]$2 in #(vi
arc4random_stir)
$2='(void)'
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SSL version: 24 updated: 2014/01/11 12:06:14
dnl ------
dnl Check for ssl library
dnl $1 = [optional] directory in which the library may be found, set by AC_ARG_WITH
AC_DEFUN([CF_SSL],[
AC_REQUIRE([CF_PKG_CONFIG])
cf_cv_have_ssl=no
cf_cv_pkg_config_ssl=no
# command-line option, etc., override default behavior
CF_ADD_OPTIONAL_PATH($1, [ssl library])
if test "x$PKG_CONFIG" != xnone; then
case $1 in #(vi
no) #(vi
;;
yes) # if no explicit directory given, try pkg-config
cf_cv_pkg_ssl=
for cf_try_package in openssl libssl
do
AC_MSG_CHECKING(pkg-config for $cf_try_package)
if "$PKG_CONFIG" --exists $cf_try_package ; then
cf_cv_pkg_ssl=$cf_try_package
AC_MSG_RESULT(yes)
break
else
AC_MSG_RESULT(no)
fi
done
if test -n "$cf_cv_pkg_ssl" ; then
cf_cv_have_ssl=yes
cf_cv_pkg_config_ssl=yes
cf_cflags_ssl=`$PKG_CONFIG --cflags $cf_cv_pkg_ssl`
cf_libs_ssl=`$PKG_CONFIG --libs $cf_cv_pkg_ssl`
if test -n "$cf_cflags_ssl" ; then
case "$cf_cflags_ssl" in #(vi
*-I*) #(vi
cf_cv_header_path_ssl=`echo "$cf_cflags_ssl" | sed -e 's/^.*-I//' -e 's/ .*//'`
;;
*)
cf_cv_header_path_ssl=/usr/include
;;
esac
CF_ADD_CFLAGS($cf_cflags_ssl)
# workaround for broken openssl package using kerberos
case "$cf_cflags_ssl" in #(vi
*kerberos*)
cf_cv_have_ssl=maybe
;;
esac
else
cf_cv_header_path_ssl=/usr/include
fi
if test -d $cf_cv_header_path_ssl/openssl ; then
cf_cv_header_path_ssl=$cf_cv_header_path_ssl/openssl
fi
if test -n "$cf_libs_ssl" ; then
case "x$cf_libs_ssl" in #(vi
*-L*) #(vi
cf_cv_library_path_ssl=`echo "$cf_libs_ssl" | sed -e 's/^.*-L//' -e 's/ .*//'`
;;
*)
cf_cv_library_path_ssl=/usr/lib
;;
esac
CF_VERBOSE(adding $cf_libs_ssl to LIBS)
CF_ADD_LIBS($cf_libs_ssl)
fi
fi
;;
esac
fi
if test "$cf_cv_have_ssl" != yes; then
case $host_os in #(vi
mingw*) #(vi
cf_extra_ssl_libs="-lcrypto -lgdi32"
;;
*)
# openssl 0.9.6 and up use dynamic loading for engines.
cf_extra_ssl_libs="-lcrypto"
case "x$LIBS" in #(vi
*-ldl) #(vi
;;
*)
AC_CHECK_LIB(dl,dlsym,
[cf_extra_ssl_libs="$cf_extra_ssl_libs -ldl"])
;;
esac
;;
esac
CF_FIND_LINKAGE(CF__SSL_HEAD,
CF__SSL_BODY,
ssl,
cf_cv_have_ssl=yes,
cf_cv_have_ssl=no,
openssl,
$cf_extra_ssl_libs)
if test "$cf_cv_pkg_config_ssl" != yes ; then
if test "$cf_cv_have_ssl" = yes ; then
if test -n "$cf_cv_library_path_ssl" ; then
CF_ADD_LIBDIR($cf_cv_library_path_ssl)
fi
CF_ADD_LIBS(-lssl $cf_extra_ssl_libs)
if test -n "$cf_cv_header_path_ssl" ; then
case $cf_cv_header_path_ssl in #(vi
/usr/include/openssl) #(vi
;;
*)
CF_ADD_INCDIR($cf_cv_header_path_ssl)
;;
esac
fi
fi
fi
fi
if test "$cf_cv_have_ssl" = yes ; then
AC_DEFINE(USE_SSL,1,[Define to 1 if we are using SSL])
if test -n "$cf_cv_header_path_ssl" ; then
CF_VERBOSE(checking ssl header-path $cf_cv_header_path_ssl)
case $cf_cv_header_path_ssl in #(vi
*/openssl)
AC_DEFINE(USE_OPENSSL_INCL,1,[Define to 1 if we are using OpenSSL headers])
;;
esac
fi
CF_CHECK_SSL_X509
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_STRIP_G_OPT version: 3 updated: 2002/12/21 19:25:52
dnl --------------
dnl Remove "-g" option from the compiler options
AC_DEFUN([CF_STRIP_G_OPT],
[$1=`echo ${$1} | sed -e 's%-g %%' -e 's%-g$%%'`])dnl
dnl ---------------------------------------------------------------------------
dnl CF_STRIP_O_OPT version: 3 updated: 2001/02/02 19:06:08
dnl --------------
dnl Remove "-O" option from the compiler options
AC_DEFUN([CF_STRIP_O_OPT],[
$1=`echo ${$1} | sed -e 's/-O[[1-9]]\? //' -e 's/-O[[1-9]]\?$//'`
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_STRUCT_TERMIOS version: 7 updated: 2012/10/06 17:56:13
dnl -----------------
dnl Some machines require _POSIX_SOURCE to completely define struct termios.
AC_DEFUN([CF_STRUCT_TERMIOS],[
AC_REQUIRE([CF_XOPEN_SOURCE])
AC_CHECK_HEADERS( \
termio.h \
termios.h \
unistd.h \
)
if test "$ISC" = yes ; then
AC_CHECK_HEADERS( sys/termio.h )
fi
if test "$ac_cv_header_termios_h" = yes ; then
case "$CFLAGS $CPPFLAGS" in
*-D_POSIX_SOURCE*)
termios_bad=dunno ;;
*) termios_bad=maybe ;;
esac
if test "$termios_bad" = maybe ; then
AC_MSG_CHECKING(whether termios.h needs _POSIX_SOURCE)
AC_TRY_COMPILE([#include <termios.h>],
[struct termios foo; int x = foo.c_iflag],
termios_bad=no, [
AC_TRY_COMPILE([
#define _POSIX_SOURCE
#include <termios.h>],
[struct termios foo; int x = foo.c_iflag],
termios_bad=unknown,
termios_bad=yes AC_DEFINE(_POSIX_SOURCE,1,[Define to 1 if we must define _POSIX_SOURCE]))
])
AC_MSG_RESULT($termios_bad)
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SUBDIR_PATH version: 6 updated: 2010/04/21 06:20:50
dnl --------------
dnl Construct a search-list for a nonstandard header/lib-file
dnl $1 = the variable to return as result
dnl $2 = the package name
dnl $3 = the subdirectory, e.g., bin, include or lib
AC_DEFUN([CF_SUBDIR_PATH],
[
$1=
CF_ADD_SUBDIR_PATH($1,$2,$3,/usr,$prefix)
CF_ADD_SUBDIR_PATH($1,$2,$3,$prefix,NONE)
CF_ADD_SUBDIR_PATH($1,$2,$3,/usr/local,$prefix)
CF_ADD_SUBDIR_PATH($1,$2,$3,/opt,$prefix)
CF_ADD_SUBDIR_PATH($1,$2,$3,[$]HOME,$prefix)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SYSTEM_MAIL_FLAGS version: 4 updated: 2012/11/08 20:57:52
dnl --------------------
AC_DEFUN([CF_SYSTEM_MAIL_FLAGS],
[
AC_MSG_CHECKING([system mail flags])
AC_CACHE_VAL(cf_cv_system_mail_flags,[
case $cf_cv_SYSTEM_MAIL in
*/mmdf/*)
[cf_cv_system_mail_flags="-mlruxto,cc\\\\*"]
;;
*)
[cf_cv_system_mail_flags="-t -oi"]
esac
])
AC_MSG_RESULT($cf_cv_system_mail_flags)
AC_DEFINE_UNQUOTED(SYSTEM_MAIL_FLAGS, "$cf_cv_system_mail_flags",[Define to value used for system mail-flags])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SYSV_UTMP version: 6 updated: 2012/10/04 20:12:20
dnl ------------
dnl Check if this is a SYSV flavor of UTMP
AC_DEFUN([CF_SYSV_UTMP],
[
AC_CACHE_CHECK(if $cf_cv_have_utmp is SYSV flavor,cf_cv_sysv_utmp,[
test "$cf_cv_have_utmp" = "utmp" && cf_prefix="ut" || cf_prefix="utx"
AC_TRY_LINK([
#include <sys/types.h>
#include <${cf_cv_have_utmp}.h>],[
struct $cf_cv_have_utmp x;
set${cf_prefix}ent ();
get${cf_prefix}id(&x);
put${cf_prefix}line(&x);
end${cf_prefix}ent();],
[cf_cv_sysv_utmp=yes],
[cf_cv_sysv_utmp=no])
])
test $cf_cv_sysv_utmp = yes && AC_DEFINE(USE_SYSV_UTMP,1,[Define to 1 if utmp is SYSV flavor])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_SYS_ERRLIST version: 6 updated: 2001/12/30 13:03:23
dnl --------------
dnl Check for declaration of sys_nerr and sys_errlist in one of stdio.h and
dnl errno.h. Declaration of sys_errlist on BSD4.4 interferes with our
dnl declaration. Reported by Keith Bostic.
AC_DEFUN([CF_SYS_ERRLIST],
[
CF_CHECK_ERRNO(sys_nerr)
CF_CHECK_ERRNO(sys_errlist)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TAR_OPTIONS version: 2 updated: 2005/08/24 20:15:11
dnl --------------
dnl This is just a list of the most common tar options, allowing for variants
dnl that can operate with the "-" standard input/output option.
AC_DEFUN([CF_TAR_OPTIONS],
[
case ifelse($1,,tar,$1) in
*pax|*pax$EXEEXT)
TAR_UP_OPTIONS="-w"
TAR_DOWN_OPTIONS="-r"
TAR_PIPE_OPTIONS=""
TAR_FILE_OPTIONS="-f"
;;
*star|*star$EXEEXT)
TAR_UP_OPTIONS="-c -f"
TAR_DOWN_OPTIONS="-x -U -f"
TAR_PIPE_OPTIONS="-"
TAR_FILE_OPTIONS=""
;;
*tar|*tar$EXEEXT)
# FIXME: some versions of tar require, some don't allow the "-"
TAR_UP_OPTIONS="-cf"
TAR_DOWN_OPTIONS="-xf"
TAR_PIPE_OPTIONS="-"
TAR_FILE_OPTIONS=""
;;
esac
AC_SUBST(TAR_UP_OPTIONS)
AC_SUBST(TAR_DOWN_OPTIONS)
AC_SUBST(TAR_FILE_OPTIONS)
AC_SUBST(TAR_PIPE_OPTIONS)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TERMCAP_LIBS version: 14 updated: 2012/07/07 21:02:48
dnl ---------------
dnl Look for termcap libraries, or the equivalent in terminfo.
dnl
dnl The optional parameter may be "ncurses", "ncursesw".
AC_DEFUN([CF_TERMCAP_LIBS],
[
AC_CACHE_VAL(cf_cv_termlib,[
cf_cv_termlib=none
AC_TRY_LINK([],[char *x=(char*)tgoto("",0,0)],
[AC_TRY_LINK([],[int x=tigetstr("")],
[cf_cv_termlib=terminfo],
[cf_cv_termlib=termcap])
CF_VERBOSE(using functions in predefined $cf_cv_termlib LIBS)
],[
ifelse([$1],,,[
case "$1" in # (vi
ncurses*)
CF_NCURSES_CONFIG($1)
cf_cv_termlib=terminfo
;;
esac
])
if test "$cf_cv_termlib" = none; then
# FreeBSD's linker gives bogus results for AC_CHECK_LIB, saying that
# tgetstr lives in -lcurses when it is only an unsatisfied extern.
cf_save_LIBS="$LIBS"
for cf_lib in tinfo curses ncurses termlib termcap
do
LIBS="-l$cf_lib $cf_save_LIBS"
for cf_func in tigetstr tgetstr
do
AC_MSG_CHECKING(for $cf_func in -l$cf_lib)
AC_TRY_LINK([],[int x=$cf_func("")],[cf_result=yes],[cf_result=no])
AC_MSG_RESULT($cf_result)
if test "$cf_result" = yes ; then
if test "$cf_func" = tigetstr ; then
cf_cv_termlib=terminfo
else
cf_cv_termlib=termcap
fi
break
fi
done
test "$cf_result" = yes && break
done
test "$cf_result" = no && LIBS="$cf_save_LIBS"
fi
if test "$cf_cv_termlib" = none; then
# allow curses library for broken AIX system.
AC_CHECK_LIB(curses, initscr, [CF_ADD_LIBS(-lcurses)])
AC_CHECK_LIB(termcap, tgoto, [CF_ADD_LIBS(-ltermcap) cf_cv_termlib=termcap])
fi
])
if test "$cf_cv_termlib" = none; then
AC_MSG_WARN([Cannot find -ltermlib, -lcurses, or -ltermcap])
fi
])])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TERMIO_AND_CURSES version: 5 updated: 2012/11/08 20:57:52
dnl --------------------
dnl Check if including termio.h with <curses.h> dies like on sysv68
dnl FIXME: this is too Lynx-specific
AC_DEFUN([CF_TERMIO_AND_CURSES],
[
AC_CACHE_CHECK(if we can include termio.h with curses,cf_cv_termio_and_curses,[
cf_save_CFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -DHAVE_CONFIG_H -I. -I${srcdir:-.} -I${srcdir:-.}/src -I${srcdir:-.}/WWW/Library/Implementation"
touch lynx_cfg.h
AC_TRY_COMPILE([
#include <$1>
#include <termio.h>],
[putchar(0x0a)],
[cf_cv_termio_and_curses=yes],
[cf_cv_termio_and_curses=no])
CPPFLAGS="$cf_save_CFLAGS"
rm -f lynx_cfg.h
])
test $cf_cv_termio_and_curses = yes && AC_DEFINE(TERMIO_AND_CURSES,1,[Define to 1 if we can include termio.h with curses.h])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TERMIO_AND_TERMIOS version: 3 updated: 2012/11/08 20:57:52
dnl ---------------------
dnl Check if including both termio.h and termios.h die like on DG.UX
AC_DEFUN([CF_TERMIO_AND_TERMIOS],
[
AC_MSG_CHECKING([termio.h and termios.h])
AC_CACHE_VAL(cf_cv_termio_and_termios,[
AC_TRY_COMPILE([
#if HAVE_TERMIO_H
#include <termio.h>
#endif
#if HAVE_TERMIOS_H
#include <termios.h>
#endif ],
[putchar (0x0a)],
[cf_cv_termio_and_termios=yes],
[cf_cv_termio_and_termios=no])])
AC_MSG_RESULT($cf_cv_termio_and_termios)
test $cf_cv_termio_and_termios = no && AC_DEFINE(TERMIO_AND_TERMIOS,1,[Define to 1 if we can include termio.h and termios.h])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TERM_HEADER version: 3 updated: 2012/10/06 08:57:51
dnl --------------
dnl Look for term.h, which is part of X/Open curses. It defines the interface
dnl to terminfo database. Usually it is in the same include-path as curses.h,
dnl but some packagers change this, breaking various applications.
AC_DEFUN([CF_TERM_HEADER],[
AC_CACHE_CHECK(for terminfo header, cf_cv_term_header,[
case ${cf_cv_ncurses_header} in #(vi
*/ncurses.h|*/ncursesw.h) #(vi
cf_term_header=`echo "$cf_cv_ncurses_header" | sed -e 's%ncurses[[^.]]*\.h$%term.h%'`
;;
*)
cf_term_header=term.h
;;
esac
for cf_test in $cf_term_header "ncurses/term.h" "ncursesw/term.h"
do
AC_TRY_COMPILE([#include <stdio.h>
#include <${cf_cv_ncurses_header:-curses.h}>
#include <$cf_test>
],[int x = auto_left_margin],[
cf_cv_term_header="$cf_test"],[
cf_cv_term_header=unknown
])
test "$cf_cv_term_header" != unknown && break
done
])
# Set definitions to allow ifdef'ing to accommodate subdirectories
case $cf_cv_term_header in # (vi
*term.h)
AC_DEFINE(HAVE_TERM_H,1,[Define to 1 if we have term.h])
;;
esac
case $cf_cv_term_header in # (vi
ncurses/term.h) #(vi
AC_DEFINE(HAVE_NCURSES_TERM_H,1,[Define to 1 if we have ncurses/term.h])
;;
ncursesw/term.h)
AC_DEFINE(HAVE_NCURSESW_TERM_H,1,[Define to 1 if we have ncursesw/term.h])
;;
esac
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TM_GMTOFF version: 3 updated: 2012/11/08 20:57:52
dnl ------------
dnl Check if the tm-struct defines the '.tm_gmtoff' member (useful in decoding
dnl dates).
AC_DEFUN([CF_TM_GMTOFF],
[
AC_MSG_CHECKING([for tm.tm_gmtoff])
AC_CACHE_VAL(cf_cv_tm_gmtoff,[
AC_TRY_COMPILE([
#ifdef TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
# else
# include <time.h>
# endif
#endif
],[
struct tm foo;
long bar = foo.tm_gmtoff],
[cf_cv_tm_gmtoff=yes],
[cf_cv_tm_gmtoff=no])])
AC_MSG_RESULT($cf_cv_tm_gmtoff)
test $cf_cv_tm_gmtoff = no && AC_DEFINE(DONT_HAVE_TM_GMTOFF,1,[Define to 1 if the tm-struct defines .tm_gmtoff member])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TRIM_X_LIBS version: 2 updated: 2013/07/09 21:27:22
dnl --------------
dnl Trim extra base X libraries added as a workaround for inconsistent library
dnl dependencies returned by "new" pkg-config files.
AC_DEFUN([CF_TRIM_X_LIBS],[
for cf_trim_lib in Xmu Xt X11
do
case "$LIBS" in
*-l$cf_trim_lib\ *-l$cf_trim_lib*)
LIBS=`echo "$LIBS " | sed -e 's/ / /g' -e 's%-l'"$cf_trim_lib"' %%' -e 's/ $//'`
CF_VERBOSE(..trimmed $LIBS)
;;
esac
done
])
dnl ---------------------------------------------------------------------------
dnl CF_TRY_PKG_CONFIG version: 5 updated: 2013/07/06 21:27:06
dnl -----------------
dnl This is a simple wrapper to use for pkg-config, for libraries which may be
dnl available in that form.
dnl
dnl $1 = package name
dnl $2 = extra logic to use, if any, after updating CFLAGS and LIBS
dnl $3 = logic to use if pkg-config does not have the package
AC_DEFUN([CF_TRY_PKG_CONFIG],[
AC_REQUIRE([CF_PKG_CONFIG])
if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists $1; then
CF_VERBOSE(found package $1)
cf_pkgconfig_incs="`$PKG_CONFIG --cflags $1 2>/dev/null`"
cf_pkgconfig_libs="`$PKG_CONFIG --libs $1 2>/dev/null`"
CF_VERBOSE(package $1 CFLAGS: $cf_pkgconfig_incs)
CF_VERBOSE(package $1 LIBS: $cf_pkgconfig_libs)
CF_ADD_CFLAGS($cf_pkgconfig_incs)
CF_ADD_LIBS($cf_pkgconfig_libs)
ifelse([$2],,:,[$2])
else
cf_pkgconfig_incs=
cf_pkgconfig_libs=
ifelse([$3],,:,[$3])
fi
])
dnl ---------------------------------------------------------------------------
dnl CF_TRY_XOPEN_SOURCE version: 1 updated: 2011/10/30 17:09:50
dnl -------------------
dnl If _XOPEN_SOURCE is not defined in the compile environment, check if we
dnl can define it successfully.
AC_DEFUN([CF_TRY_XOPEN_SOURCE],[
AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
AC_TRY_COMPILE([
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
],[
#ifndef _XOPEN_SOURCE
make an error
#endif],
[cf_cv_xopen_source=no],
[cf_save="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
AC_TRY_COMPILE([
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
],[
#ifdef _XOPEN_SOURCE
make an error
#endif],
[cf_cv_xopen_source=no],
[cf_cv_xopen_source=$cf_XOPEN_SOURCE])
CPPFLAGS="$cf_save"
])
])
if test "$cf_cv_xopen_source" != no ; then
CF_REMOVE_DEFINE(CFLAGS,$CFLAGS,_XOPEN_SOURCE)
CF_REMOVE_DEFINE(CPPFLAGS,$CPPFLAGS,_XOPEN_SOURCE)
cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
CF_ADD_CFLAGS($cf_temp_xopen_source)
fi
])
dnl ---------------------------------------------------------------------------
dnl CF_TTYTYPE version: 6 updated: 2012/11/08 20:57:52
dnl ----------
AC_DEFUN([CF_TTYTYPE],
[
AC_MSG_CHECKING(if ttytype is declared in curses library)
AC_CACHE_VAL(cf_cv_have_ttytype,[
AC_TRY_LINK([#include <${cf_cv_ncurses_header:-curses.h}>],
[char *x = &ttytype[1]; *x = 1],
[cf_cv_have_ttytype=yes],
[cf_cv_have_ttytype=no])
])
AC_MSG_RESULT($cf_cv_have_ttytype)
test $cf_cv_have_ttytype = yes && AC_DEFINE(HAVE_TTYTYPE,1,[Define to 1 if ttytype is declared in curses library])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_TYPE_LONG_LONG version: 3 updated: 2012/11/08 20:57:52
dnl -----------------
dnl Check for long long type.
AC_DEFUN([CF_TYPE_LONG_LONG],[
AC_CACHE_CHECK(for long long type,cf_cv_type_long_long,[
cat >conftest.$ac_ext <<_CFEOF
#include "confdefs.h"
int
main (void)
{
long long foo = 123456789123456789LL;
return (foo == 0);
}
_CFEOF
(eval [$]ac_compile) 2>conftest.err
ac_status=$?
if test $ac_status = 0 && test -s conftest.err
then
fgrep warning conftest.err >/dev/null 2>&1 && ac_status=1
fi
if test $ac_status != 0
then
cf_cv_type_long_long=no
else
cf_cv_type_long_long=yes
fi
test -s conftest.err && cat conftest.err >&5
rm -f conftest*
])
if test "$cf_cv_type_long_long" = yes ; then
AC_DEFINE(HAVE_LONG_LONG,1,[Define to 1 if compiler supports long long type])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UNION_WAIT version: 6 updated: 2012/10/06 08:57:51
dnl -------------
dnl Check to see if the BSD-style union wait is declared. Some platforms may
dnl use this, though it is deprecated in favor of the 'int' type in Posix.
dnl Some vendors provide a bogus implementation that declares union wait, but
dnl uses the 'int' type instead; we try to spot these by checking for the
dnl associated macros.
dnl
dnl Ahem. Some implementers cast the status value to an int*, as an attempt to
dnl use the macros for either union wait or int. So we do a check compile to
dnl see if the macros are defined and apply to an int.
dnl
dnl Sets: $cf_cv_type_unionwait
dnl Defines: HAVE_TYPE_UNIONWAIT
AC_DEFUN([CF_UNION_WAIT],
[
AC_REQUIRE([CF_WAIT_HEADERS])
AC_MSG_CHECKING([for union wait])
AC_CACHE_VAL(cf_cv_type_unionwait,[
AC_TRY_LINK($cf_wait_headers,
[int x;
int y = WEXITSTATUS(x);
int z = WTERMSIG(x);
wait(&x);
],
[cf_cv_type_unionwait=no
echo compiles ok w/o union wait 1>&AC_FD_CC
],[
AC_TRY_LINK($cf_wait_headers,
[union wait x;
#ifdef WEXITSTATUS
int y = WEXITSTATUS(x);
#endif
#ifdef WTERMSIG
int z = WTERMSIG(x);
#endif
wait(&x);
],
[cf_cv_type_unionwait=yes
echo compiles ok with union wait and possibly macros too 1>&AC_FD_CC
],
[cf_cv_type_unionwait=no])])])
AC_MSG_RESULT($cf_cv_type_unionwait)
test $cf_cv_type_unionwait = yes && AC_DEFINE(HAVE_TYPE_UNIONWAIT,1,[Define to 1 if type unionwait is declared])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UPPER version: 5 updated: 2001/01/29 23:40:59
dnl --------
dnl Make an uppercase version of a variable
dnl $1=uppercase($2)
AC_DEFUN([CF_UPPER],
[
$1=`echo "$2" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UTF8_LIB version: 8 updated: 2012/10/06 08:57:51
dnl -----------
dnl Check for multibyte support, and if not found, utf8 compatibility library
AC_DEFUN([CF_UTF8_LIB],
[
AC_CACHE_CHECK(for multibyte character support,cf_cv_utf8_lib,[
cf_save_LIBS="$LIBS"
AC_TRY_LINK([
#include <stdlib.h>],[putwc(0,0);],
[cf_cv_utf8_lib=yes],
[CF_FIND_LINKAGE([
#include <libutf8.h>],[putwc(0,0);],utf8,
[cf_cv_utf8_lib=add-on],
[cf_cv_utf8_lib=no])
])])
# HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between
# ncurses/ncursesw:
if test "$cf_cv_utf8_lib" = "add-on" ; then
AC_DEFINE(HAVE_LIBUTF8_H,1,[Define to 1 if we should include libutf8.h])
CF_ADD_INCDIR($cf_cv_header_path_utf8)
CF_ADD_LIBDIR($cf_cv_library_path_utf8)
CF_ADD_LIBS($cf_cv_library_file_utf8)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UTMP version: 10 updated: 2012/10/04 20:12:20
dnl -------
dnl Check for UTMP/UTMPX headers
AC_DEFUN([CF_UTMP],
[
AC_REQUIRE([CF_LASTLOG])
AC_CACHE_CHECK(for utmp implementation,cf_cv_have_utmp,[
cf_cv_have_utmp=no
for cf_header in utmpx utmp ; do
cf_utmp_includes="
#include <sys/types.h>
#include <${cf_header}.h>
#define getutent getutxent
#ifdef USE_LASTLOG
#include <lastlog.h> /* may conflict with utmpx.h on Linux */
#endif
"
AC_TRY_COMPILE([$cf_utmp_includes],
[struct $cf_header x;
char *name = x.ut_name; /* utmp.h and compatible definitions */
],
[cf_cv_have_utmp=$cf_header
break],
[
AC_TRY_COMPILE([$cf_utmp_includes],
[struct $cf_header x;
char *name = x.ut_user; /* utmpx.h must declare this */
],
[cf_cv_have_utmp=$cf_header
break
])])
done
])
if test $cf_cv_have_utmp != no ; then
AC_DEFINE(HAVE_UTMP,1,[Define to 1 if the utmp interface is available])
test $cf_cv_have_utmp = utmpx && AC_DEFINE(UTMPX_FOR_UTMP,1,[Define if we have utmpx interface])
CF_UTMP_UT_HOST
CF_UTMP_UT_SYSLEN
CF_UTMP_UT_NAME
CF_UTMP_UT_XSTATUS
CF_UTMP_UT_XTIME
CF_UTMP_UT_SESSION
CF_SYSV_UTMP
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UTMP_UT_HOST version: 8 updated: 2012/10/04 20:12:20
dnl ---------------
dnl Check if UTMP/UTMPX struct defines ut_host member
AC_DEFUN([CF_UTMP_UT_HOST],
[
if test $cf_cv_have_utmp != no ; then
AC_MSG_CHECKING(if ${cf_cv_have_utmp}.ut_host is declared)
AC_CACHE_VAL(cf_cv_have_utmp_ut_host,[
AC_TRY_COMPILE([
#include <sys/types.h>
#include <${cf_cv_have_utmp}.h>],
[struct $cf_cv_have_utmp x; char *y = &x.ut_host[0]],
[cf_cv_have_utmp_ut_host=yes],
[cf_cv_have_utmp_ut_host=no])
])
AC_MSG_RESULT($cf_cv_have_utmp_ut_host)
test $cf_cv_have_utmp_ut_host != no && AC_DEFINE(HAVE_UTMP_UT_HOST,1,[Define to 1 if UTMP/UTMPX struct defines ut_host member])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UTMP_UT_NAME version: 5 updated: 2012/10/04 20:12:20
dnl ---------------
dnl Check if UTMP/UTMPX struct defines ut_name member
AC_DEFUN([CF_UTMP_UT_NAME],
[
if test $cf_cv_have_utmp != no ; then
AC_CACHE_CHECK(if ${cf_cv_have_utmp}.ut_name is declared,cf_cv_have_utmp_ut_name,[
cf_cv_have_utmp_ut_name=no
cf_utmp_includes="
#include <sys/types.h>
#include <${cf_cv_have_utmp}.h>
#define getutent getutxent
#ifdef USE_LASTLOG
#include <lastlog.h> /* may conflict with utmpx.h on Linux */
#endif
"
for cf_header in ut_name ut_user ; do
AC_TRY_COMPILE([$cf_utmp_includes],
[struct $cf_cv_have_utmp x;
char *name = x.$cf_header;
],
[cf_cv_have_utmp_ut_name=$cf_header
break])
done
])
case $cf_cv_have_utmp_ut_name in #(vi
no) #(vi
AC_MSG_ERROR(Cannot find declaration for ut.ut_name)
;;
ut_user)
AC_DEFINE(ut_name,ut_user,[Define to rename UTMP/UTMPX struct ut_name member])
;;
esac
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UTMP_UT_SESSION version: 6 updated: 2012/10/04 20:12:20
dnl ------------------
dnl Check if UTMP/UTMPX struct defines ut_session member
AC_DEFUN([CF_UTMP_UT_SESSION],
[
if test $cf_cv_have_utmp != no ; then
AC_CACHE_CHECK(if ${cf_cv_have_utmp}.ut_session is declared, cf_cv_have_utmp_ut_session,[
AC_TRY_COMPILE([
#include <sys/types.h>
#include <${cf_cv_have_utmp}.h>],
[struct $cf_cv_have_utmp x; long y = x.ut_session],
[cf_cv_have_utmp_ut_session=yes],
[cf_cv_have_utmp_ut_session=no])
])
if test $cf_cv_have_utmp_ut_session != no ; then
AC_DEFINE(HAVE_UTMP_UT_SESSION,1,[Define to 1 if UTMP/UTMPX struct defines ut_session member])
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UTMP_UT_SYSLEN version: 2 updated: 2012/10/04 20:12:20
dnl -----------------
dnl Check if UTMP/UTMPX struct defines ut_syslen member
AC_DEFUN([CF_UTMP_UT_SYSLEN],
[
if test $cf_cv_have_utmp != no ; then
AC_MSG_CHECKING(if ${cf_cv_have_utmp}.ut_syslen is declared)
AC_CACHE_VAL(cf_cv_have_utmp_ut_syslen,[
AC_TRY_COMPILE([
#include <sys/types.h>
#include <${cf_cv_have_utmp}.h>],
[struct $cf_cv_have_utmp x; int y = x.ut_syslen],
[cf_cv_have_utmp_ut_syslen=yes],
[cf_cv_have_utmp_ut_syslen=no])
])
AC_MSG_RESULT($cf_cv_have_utmp_ut_syslen)
test $cf_cv_have_utmp_ut_syslen != no && AC_DEFINE(HAVE_UTMP_UT_SYSLEN,1,[Define to 1 if UTMP/UTMPX struct defines ut_syslen member])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UTMP_UT_XSTATUS version: 4 updated: 2012/10/04 20:12:20
dnl ------------------
dnl Check for known variants on the UTMP/UTMPX struct's exit-status as reported
dnl by various people:
dnl
dnl ut_exit.__e_exit (HPUX 11 - David Ellement, also in glibc2)
dnl ut_exit.e_exit (SVR4)
dnl ut_exit.ut_e_exit (os390 - Greg Smith)
dnl ut_exit.ut_exit (Tru64 4.0f - Jeremie Petit, 4.0e - Tomas Vanhala)
dnl
dnl Note: utmp_xstatus is not a conventional compatibility definition in the
dnl system header files.
AC_DEFUN([CF_UTMP_UT_XSTATUS],
[
if test $cf_cv_have_utmp != no ; then
AC_CACHE_CHECK(for exit-status in $cf_cv_have_utmp,cf_cv_have_utmp_ut_xstatus,[
for cf_result in \
ut_exit.__e_exit \
ut_exit.e_exit \
ut_exit.ut_e_exit \
ut_exit.ut_exit
do
AC_TRY_COMPILE([
#include <sys/types.h>
#include <${cf_cv_have_utmp}.h>],
[struct $cf_cv_have_utmp x; long y = x.$cf_result = 0],
[cf_cv_have_utmp_ut_xstatus=$cf_result
break],
[cf_cv_have_utmp_ut_xstatus=no])
done
])
if test $cf_cv_have_utmp_ut_xstatus != no ; then
AC_DEFINE(HAVE_UTMP_UT_XSTATUS,1,[Define to 1 if UTMP/UTMPX has exit-status member])
AC_DEFINE_UNQUOTED(ut_xstatus,$cf_cv_have_utmp_ut_xstatus,[Define if needed to rename member ut_xstatus of UTMP/UTMPX])
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_UTMP_UT_XTIME version: 9 updated: 2012/10/04 20:12:20
dnl ----------------
dnl Check if UTMP/UTMPX struct defines ut_xtime member
AC_DEFUN([CF_UTMP_UT_XTIME],
[
if test $cf_cv_have_utmp != no ; then
AC_CACHE_CHECK(if ${cf_cv_have_utmp}.ut_xtime is declared, cf_cv_have_utmp_ut_xtime,[
AC_TRY_COMPILE([
#include <sys/types.h>
#include <${cf_cv_have_utmp}.h>],
[struct $cf_cv_have_utmp x; long y = x.ut_xtime = 0],
[cf_cv_have_utmp_ut_xtime=yes],
[AC_TRY_COMPILE([
#include <sys/types.h>
#include <${cf_cv_have_utmp}.h>],
[struct $cf_cv_have_utmp x; long y = x.ut_tv.tv_sec],
[cf_cv_have_utmp_ut_xtime=define],
[cf_cv_have_utmp_ut_xtime=no])
])
])
if test $cf_cv_have_utmp_ut_xtime != no ; then
AC_DEFINE(HAVE_UTMP_UT_XTIME,1,[Define to 1 if UTMP/UTMPX struct defines ut_xtime member])
if test $cf_cv_have_utmp_ut_xtime = define ; then
AC_DEFINE(ut_xtime,ut_tv.tv_sec,[Define if needed to alternate name for utmpx.ut_xtime member])
fi
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_VERBOSE version: 3 updated: 2007/07/29 09:55:12
dnl ----------
dnl Use AC_VERBOSE w/o the warnings
AC_DEFUN([CF_VERBOSE],
[test -n "$verbose" && echo " $1" 1>&AC_FD_MSG
CF_MSG_LOG([$1])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WAIT_HEADERS version: 2 updated: 1997/10/21 19:45:33
dnl ---------------
dnl Build up an expression $cf_wait_headers with the header files needed to
dnl compile against the prototypes for 'wait()', 'waitpid()', etc. Assume it's
dnl Posix, which uses <sys/types.h> and <sys/wait.h>, but allow SVr4 variation
dnl with <wait.h>.
AC_DEFUN([CF_WAIT_HEADERS],
[
AC_HAVE_HEADERS(sys/wait.h)
cf_wait_headers="#include <sys/types.h>
"
if test $ac_cv_header_sys_wait_h = yes; then
cf_wait_headers="$cf_wait_headers
#include <sys/wait.h>
"
else
AC_HAVE_HEADERS(wait.h)
AC_HAVE_HEADERS(waitstatus.h)
if test $ac_cv_header_wait_h = yes; then
cf_wait_headers="$cf_wait_headers
#include <wait.h>
"
fi
if test $ac_cv_header_waitstatus_h = yes; then
cf_wait_headers="$cf_wait_headers
#include <waitstatus.h>
"
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WIDEC_CURSES version: 5 updated: 2012/11/08 20:57:52
dnl ---------------
dnl Check for curses implementations that can handle wide-characters
AC_DEFUN([CF_WIDEC_CURSES],
[
AC_CACHE_CHECK(if curses supports wide characters,cf_cv_widec_curses,[
AC_TRY_LINK([
#include <stdlib.h>
#include <${cf_cv_ncurses_header:-curses.h}>],[
wchar_t temp[2];
wchar_t wch = 'A';
temp[0] = wch;
waddnwstr(stdscr, temp, 1);
],
[cf_cv_widec_curses=yes],
[cf_cv_widec_curses=no])
])
if test "$cf_cv_widec_curses" = yes ; then
AC_DEFINE(WIDEC_CURSES,1,[Define to 1 if curses supports wide characters])
# This is needed on Tru64 5.0 to declare mbstate_t
AC_CACHE_CHECK(if we must include wchar.h to declare mbstate_t,cf_cv_widec_mbstate,[
AC_TRY_COMPILE([
#include <stdlib.h>
#include <${cf_cv_ncurses_header:-curses.h}>],
[mbstate_t state],
[cf_cv_widec_mbstate=no],
[AC_TRY_COMPILE([
#include <stdlib.h>
#include <wchar.h>
#include <${cf_cv_ncurses_header:-curses.h}>],
[mbstate_t state],
[cf_cv_widec_mbstate=yes],
[cf_cv_widec_mbstate=unknown])])])
if test "$cf_cv_widec_mbstate" = yes ; then
AC_DEFINE(NEED_WCHAR_H,1,[Define to 1 if we must include wchar.h])
fi
if test "$cf_cv_widec_mbstate" != unknown ; then
AC_DEFINE(HAVE_MBSTATE_T,1,[Define to 1 if we have mbstate_t type])
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_BZLIB version: 4 updated: 2007/07/29 13:19:54
dnl -------------
dnl Check for libbz2 aka "bzlib"
dnl
dnl $1 = optional path for headers/library
AC_DEFUN([CF_WITH_BZLIB],[
CF_ADD_OPTIONAL_PATH($1)
CF_FIND_LINKAGE([
#include <stdio.h>
#include <bzlib.h>
],[
BZ2_bzopen("name","mode")
],bz2,,,bzlib)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_CURSES_DIR version: 3 updated: 2010/11/20 17:02:38
dnl ------------------
dnl Wrapper for AC_ARG_WITH to specify directory under which to look for curses
dnl libraries.
AC_DEFUN([CF_WITH_CURSES_DIR],[
AC_MSG_CHECKING(for specific curses-directory)
AC_ARG_WITH(curses-dir,
[ --with-curses-dir=DIR directory in which (n)curses is installed],
[cf_cv_curses_dir=$withval],
[cf_cv_curses_dir=no])
AC_MSG_RESULT($cf_cv_curses_dir)
if ( test -n "$cf_cv_curses_dir" && test "$cf_cv_curses_dir" != "no" )
then
CF_PATH_SYNTAX(withval)
if test -d "$cf_cv_curses_dir"
then
CF_ADD_INCDIR($cf_cv_curses_dir/include)
CF_ADD_LIBDIR($cf_cv_curses_dir/lib)
fi
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_DBMALLOC version: 7 updated: 2010/06/21 17:26:47
dnl ----------------
dnl Configure-option for dbmalloc. The optional parameter is used to override
dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
AC_DEFUN([CF_WITH_DBMALLOC],[
CF_NO_LEAKS_OPTION(dbmalloc,
[ --with-dbmalloc test: use Conor Cahill's dbmalloc library],
[USE_DBMALLOC])
if test "$with_dbmalloc" = yes ; then
AC_CHECK_HEADER(dbmalloc.h,
[AC_CHECK_LIB(dbmalloc,[debug_malloc]ifelse([$1],,[],[,$1]))])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_DMALLOC version: 7 updated: 2010/06/21 17:26:47
dnl ---------------
dnl Configure-option for dmalloc. The optional parameter is used to override
dnl the updating of $LIBS, e.g., to avoid conflict with subsequent tests.
AC_DEFUN([CF_WITH_DMALLOC],[
CF_NO_LEAKS_OPTION(dmalloc,
[ --with-dmalloc test: use Gray Watson's dmalloc library],
[USE_DMALLOC])
if test "$with_dmalloc" = yes ; then
AC_CHECK_HEADER(dmalloc.h,
[AC_CHECK_LIB(dmalloc,[dmalloc_debug]ifelse([$1],,[],[,$1]))])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_IDNA version: 9 updated: 2012/11/08 20:57:52
dnl ------------
dnl Check for libidn, use it if found.
dnl
dnl $1 = optional path for headers/library
AC_DEFUN([CF_WITH_IDNA],[
CF_ADD_OPTIONAL_PATH($1)
CF_FIND_LINKAGE([
#include <stdio.h>
#include <idna.h>
],[
char *output = 0;
int code = idna_to_ascii_8z("name", &output, IDNA_USE_STD3_ASCII_RULES);
],idn,,,,[$LIBICONV])
if test "x$cf_cv_find_linkage_idn" = xyes ; then
AC_DEFINE(USE_IDNA,1,[Define to 1 if we should use IDNA library])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_PATH version: 11 updated: 2012/09/29 15:04:19
dnl ------------
dnl Wrapper for AC_ARG_WITH to ensure that user supplies a pathname, not just
dnl defaulting to yes/no.
dnl
dnl $1 = option name
dnl $2 = help-text
dnl $3 = environment variable to set
dnl $4 = default value, shown in the help-message, must be a constant
dnl $5 = default value, if it's an expression & cannot be in the help-message
dnl
AC_DEFUN([CF_WITH_PATH],
[AC_ARG_WITH($1,[$2 ](default: ifelse([$4],,empty,[$4])),,
ifelse([$4],,[withval="${$3}"],[withval="${$3:-ifelse([$5],,[$4],[$5])}"]))dnl
if ifelse([$5],,true,[test -n "$5"]) ; then
CF_PATH_SYNTAX(withval)
fi
eval $3="$withval"
AC_SUBST($3)dnl
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_WITH_ZLIB version: 4 updated: 2011/05/28 12:10:58
dnl ------------
dnl check for libz aka "zlib"
AC_DEFUN([CF_WITH_ZLIB],[
CF_ADD_OPTIONAL_PATH($1)
CF_FIND_LINKAGE([
#include <zlib.h>
],[
gzopen("name","mode")
],z,,,zlib)
AC_CHECK_FUNCS( \
zError \
)
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_XOPEN_CURSES version: 11 updated: 2011/01/18 18:15:30
dnl ---------------
dnl Test if we should define X/Open source for curses, needed on Digital Unix
dnl 4.x, to see the extended functions, but breaks on IRIX 6.x.
dnl
dnl The getbegyx() check is needed for HPUX, which omits legacy macros such
dnl as getbegy(). The latter is better design, but the former is standard.
AC_DEFUN([CF_XOPEN_CURSES],
[
AC_REQUIRE([CF_CURSES_CPPFLAGS])dnl
AC_CACHE_CHECK(if we must define _XOPEN_SOURCE_EXTENDED,cf_cv_need_xopen_extension,[
AC_TRY_LINK([
#include <stdlib.h>
#include <${cf_cv_ncurses_header:-curses.h}>],[
#if defined(NCURSES_VERSION_PATCH)
#if (NCURSES_VERSION_PATCH < 20100501) && (NCURSES_VERSION_PATCH >= 20100403)
make an error
#endif
#endif
long x = winnstr(stdscr, "", 0);
int x1, y1;
getbegyx(stdscr, y1, x1)],
[cf_cv_need_xopen_extension=no],
[AC_TRY_LINK([
#define _XOPEN_SOURCE_EXTENDED
#include <stdlib.h>
#include <${cf_cv_ncurses_header:-curses.h}>],[
#ifdef NCURSES_VERSION
cchar_t check;
int check2 = curs_set((int)sizeof(check));
#endif
long x = winnstr(stdscr, "", 0);
int x1, y1;
getbegyx(stdscr, y1, x1)],
[cf_cv_need_xopen_extension=yes],
[cf_cv_need_xopen_extension=unknown])])])
test $cf_cv_need_xopen_extension = yes && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_XOPEN_SOURCE version: 45 updated: 2013/09/07 14:06:25
dnl ---------------
dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
dnl or adapt to the vendor's definitions to get equivalent functionality,
dnl without losing the common non-POSIX features.
dnl
dnl Parameters:
dnl $1 is the nominal value for _XOPEN_SOURCE
dnl $2 is the nominal value for _POSIX_C_SOURCE
AC_DEFUN([CF_XOPEN_SOURCE],[
AC_REQUIRE([AC_CANONICAL_HOST])
cf_XOPEN_SOURCE=ifelse([$1],,500,[$1])
cf_POSIX_C_SOURCE=ifelse([$2],,199506L,[$2])
cf_xopen_source=
case $host_os in #(vi
aix[[4-7]]*) #(vi
cf_xopen_source="-D_ALL_SOURCE"
;;
cygwin|msys) #(vi
cf_XOPEN_SOURCE=600
;;
darwin[[0-8]].*) #(vi
cf_xopen_source="-D_APPLE_C_SOURCE"
;;
darwin*) #(vi
cf_xopen_source="-D_DARWIN_C_SOURCE"
cf_XOPEN_SOURCE=
;;
freebsd*|dragonfly*) #(vi
# 5.x headers associate
# _XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
# _XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
cf_POSIX_C_SOURCE=200112L
cf_XOPEN_SOURCE=600
cf_xopen_source="-D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
;;
hpux11*) #(vi
cf_xopen_source="-D_HPUX_SOURCE -D_XOPEN_SOURCE=500"
;;
hpux*) #(vi
cf_xopen_source="-D_HPUX_SOURCE"
;;
irix[[56]].*) #(vi
cf_xopen_source="-D_SGI_SOURCE"
cf_XOPEN_SOURCE=
;;
linux*|gnu*|mint*|k*bsd*-gnu) #(vi
CF_GNU_SOURCE
;;
mirbsd*) #(vi
# setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
cf_XOPEN_SOURCE=
CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
;;
netbsd*) #(vi
cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
;;
openbsd[[4-9]]*) #(vi
# setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
cf_xopen_source="-D_BSD_SOURCE"
cf_XOPEN_SOURCE=600
;;
openbsd*) #(vi
# setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
;;
osf[[45]]*) #(vi
cf_xopen_source="-D_OSF_SOURCE"
;;
nto-qnx*) #(vi
cf_xopen_source="-D_QNX_SOURCE"
;;
sco*) #(vi
# setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
;;
solaris2.*) #(vi
cf_xopen_source="-D__EXTENSIONS__"
;;
*)
CF_TRY_XOPEN_SOURCE
CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
;;
esac
if test -n "$cf_xopen_source" ; then
CF_ADD_CFLAGS($cf_xopen_source)
fi
dnl In anything but the default case, we may have system-specific setting
dnl which is still not guaranteed to provide all of the entrypoints that
dnl _XOPEN_SOURCE would yield.
if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
AC_MSG_CHECKING(if _XOPEN_SOURCE really is set)
AC_TRY_COMPILE([#include <stdlib.h>],[
#ifndef _XOPEN_SOURCE
make an error
#endif],
[cf_XOPEN_SOURCE_set=yes],
[cf_XOPEN_SOURCE_set=no])
AC_MSG_RESULT($cf_XOPEN_SOURCE_set)
if test $cf_XOPEN_SOURCE_set = yes
then
AC_TRY_COMPILE([#include <stdlib.h>],[
#if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
make an error
#endif],
[cf_XOPEN_SOURCE_set_ok=yes],
[cf_XOPEN_SOURCE_set_ok=no])
if test $cf_XOPEN_SOURCE_set_ok = no
then
AC_MSG_WARN(_XOPEN_SOURCE is lower than requested)
fi
else
CF_TRY_XOPEN_SOURCE
fi
fi
])
dnl ---------------------------------------------------------------------------
dnl CF_X_ATHENA version: 21 updated: 2013/07/06 21:27:06
dnl -----------
dnl Check for Xaw (Athena) libraries
dnl
dnl Sets $cf_x_athena according to the flavor of Xaw which is used.
AC_DEFUN([CF_X_ATHENA],
[
cf_x_athena=${cf_x_athena:-Xaw}
AC_MSG_CHECKING(if you want to link with Xaw 3d library)
withval=
AC_ARG_WITH(Xaw3d,
[ --with-Xaw3d link with Xaw 3d library])
if test "$withval" = yes ; then
cf_x_athena=Xaw3d
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
AC_MSG_CHECKING(if you want to link with neXT Athena library)
withval=
AC_ARG_WITH(neXtaw,
[ --with-neXtaw link with neXT Athena library])
if test "$withval" = yes ; then
cf_x_athena=neXtaw
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
AC_MSG_CHECKING(if you want to link with Athena-Plus library)
withval=
AC_ARG_WITH(XawPlus,
[ --with-XawPlus link with Athena-Plus library])
if test "$withval" = yes ; then
cf_x_athena=XawPlus
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
cf_x_athena_lib=""
if test "$PKG_CONFIG" != none ; then
cf_athena_list=
test "$cf_x_athena" = Xaw && cf_athena_list="xaw8 xaw7 xaw6"
for cf_athena_pkg in \
$cf_athena_list \
${cf_x_athena} \
${cf_x_athena}-devel \
lib${cf_x_athena} \
lib${cf_x_athena}-devel
do
CF_TRY_PKG_CONFIG($cf_athena_pkg,[
cf_x_athena_lib="$cf_pkgconfig_libs"
CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x_athena)
AC_DEFINE_UNQUOTED($cf_x_athena_LIBS)
CF_TRIM_X_LIBS
AC_CACHE_CHECK(for usable $cf_x_athena/Xmu package,cf_cv_xaw_compat,[
AC_TRY_LINK([
#include <X11/Xmu/CharSet.h>
],[
int check = XmuCompareISOLatin1("big", "small")
],[cf_cv_xaw_compat=yes],[cf_cv_xaw_compat=no])])
if test "$cf_cv_xaw_compat" = no
then
# workaround for broken ".pc" files...
case "$cf_x_athena_lib" in #(vi
*-lXmu*) #(vi
;;
*)
CF_VERBOSE(work around broken package)
cf_save_xmu="$LIBS"
cf_first_lib=`echo "$cf_save_xmu" | sed -e 's/^[ ][ ]*//' -e 's/ .*//'`
CF_TRY_PKG_CONFIG(xmu,[
LIBS="$cf_save_xmu"
CF_ADD_LIB_AFTER($cf_first_lib,$cf_pkgconfig_libs)
],[
CF_ADD_LIB_AFTER($cf_first_lib,-lXmu)
])
CF_TRIM_X_LIBS
;;
esac
fi
break])
done
fi
if test -z "$cf_x_athena_lib" ; then
CF_X_EXT
CF_X_TOOLKIT
CF_X_ATHENA_CPPFLAGS($cf_x_athena)
CF_X_ATHENA_LIBS($cf_x_athena)
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_X_ATHENA_CPPFLAGS version: 5 updated: 2010/05/26 17:35:30
dnl --------------------
dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of
dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw.
AC_DEFUN([CF_X_ATHENA_CPPFLAGS],
[
cf_x_athena_root=ifelse([$1],,Xaw,[$1])
cf_x_athena_inc=""
for cf_path in default \
/usr/contrib/X11R6 \
/usr/contrib/X11R5 \
/usr/lib/X11R5 \
/usr/local
do
if test -z "$cf_x_athena_inc" ; then
cf_save="$CPPFLAGS"
cf_test=X11/$cf_x_athena_root/SimpleMenu.h
if test $cf_path != default ; then
CPPFLAGS="$cf_save -I$cf_path/include"
AC_MSG_CHECKING(for $cf_test in $cf_path)
else
AC_MSG_CHECKING(for $cf_test)
fi
AC_TRY_COMPILE([
#include <X11/Intrinsic.h>
#include <$cf_test>],[],
[cf_result=yes],
[cf_result=no])
AC_MSG_RESULT($cf_result)
if test "$cf_result" = yes ; then
cf_x_athena_inc=$cf_path
break
else
CPPFLAGS="$cf_save"
fi
fi
done
if test -z "$cf_x_athena_inc" ; then
AC_MSG_WARN(
[Unable to successfully find Athena header files with test program])
elif test "$cf_x_athena_inc" != default ; then
CPPFLAGS="$CPPFLAGS -I$cf_x_athena_inc"
fi
])
dnl ---------------------------------------------------------------------------
dnl CF_X_ATHENA_LIBS version: 12 updated: 2011/07/17 19:55:02
dnl ----------------
dnl Normally invoked by CF_X_ATHENA, with $1 set to the appropriate flavor of
dnl the Athena widgets, e.g., Xaw, Xaw3d, neXtaw.
AC_DEFUN([CF_X_ATHENA_LIBS],
[AC_REQUIRE([CF_X_TOOLKIT])
cf_x_athena_root=ifelse([$1],,Xaw,[$1])
cf_x_athena_lib=""
for cf_path in default \
/usr/contrib/X11R6 \
/usr/contrib/X11R5 \
/usr/lib/X11R5 \
/usr/local
do
for cf_lib in \
${cf_x_athena_root} \
${cf_x_athena_root}7 \
${cf_x_athena_root}6
do
for cf_libs in \
"-l$cf_lib -lXmu" \
"-l$cf_lib -lXpm -lXmu" \
"-l${cf_lib}_s -lXmu_s"
do
if test -z "$cf_x_athena_lib" ; then
cf_save="$LIBS"
cf_test=XawSimpleMenuAddGlobalActions
if test $cf_path != default ; then
CF_ADD_LIBS(-L$cf_path/lib $cf_libs)
AC_MSG_CHECKING(for $cf_libs in $cf_path)
else
CF_ADD_LIBS($cf_libs)
AC_MSG_CHECKING(for $cf_test in $cf_libs)
fi
AC_TRY_LINK([
#include <X11/Intrinsic.h>
#include <X11/$cf_x_athena_root/SimpleMenu.h>
],[
$cf_test((XtAppContext) 0)],
[cf_result=yes],
[cf_result=no])
AC_MSG_RESULT($cf_result)
if test "$cf_result" = yes ; then
cf_x_athena_lib="$cf_libs"
break
fi
LIBS="$cf_save"
fi
done # cf_libs
test -n "$cf_x_athena_lib" && break
done # cf_lib
done
if test -z "$cf_x_athena_lib" ; then
AC_MSG_ERROR(
[Unable to successfully link Athena library (-l$cf_x_athena_root) with test program])
fi
CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x_athena)
AC_DEFINE_UNQUOTED($cf_x_athena_LIBS)
])
dnl ---------------------------------------------------------------------------
dnl CF_X_EXT version: 3 updated: 2010/06/02 05:03:05
dnl --------
AC_DEFUN([CF_X_EXT],[
CF_TRY_PKG_CONFIG(Xext,,[
AC_CHECK_LIB(Xext,XextCreateExtension,
[CF_ADD_LIB(Xext)])])
])dnl
dnl ---------------------------------------------------------------------------
dnl CF_X_TOOLKIT version: 21 updated: 2012/10/04 06:57:36
dnl ------------
dnl Check for X Toolkit libraries
dnl
AC_DEFUN([CF_X_TOOLKIT],
[
AC_REQUIRE([AC_PATH_XTRA])
AC_REQUIRE([CF_CHECK_CACHE])
cf_have_X_LIBS=no
CF_TRY_PKG_CONFIG(xt,[
case "x$LIBS" in #(vi
*-lX11*) #(vi
;;
*)
# we have an "xt" package, but it may omit Xt's dependency on X11
AC_CACHE_CHECK(for usable X dependency,cf_cv_xt_x11_compat,[
AC_TRY_LINK([
#include <X11/Xlib.h>
],[
int rc1 = XDrawLine((Display*) 0, (Drawable) 0, (GC) 0, 0, 0, 0, 0);
int rc2 = XClearWindow((Display*) 0, (Window) 0);
int rc3 = XMoveWindow((Display*) 0, (Window) 0, 0, 0);
int rc4 = XMoveResizeWindow((Display*)0, (Window)0, 0, 0, 0, 0);
],[cf_cv_xt_x11_compat=yes],[cf_cv_xt_x11_compat=no])])
if test "$cf_cv_xt_x11_compat" = no
then
CF_VERBOSE(work around broken X11 dependency)
# 2010/11/19 - good enough until a working Xt on Xcb is delivered.
CF_TRY_PKG_CONFIG(x11,,[CF_ADD_LIB_AFTER(-lXt,-lX11)])
fi
;;
esac
AC_CACHE_CHECK(for usable X Toolkit package,cf_cv_xt_ice_compat,[
AC_TRY_LINK([
#include <X11/Shell.h>
],[int num = IceConnectionNumber(0)
],[cf_cv_xt_ice_compat=yes],[cf_cv_xt_ice_compat=no])])
if test "$cf_cv_xt_ice_compat" = no
then
# workaround for broken ".pc" files used for X Toolkit.
case "x$X_PRE_LIBS" in #(vi
*-lICE*)
case "x$LIBS" in #(vi
*-lICE*) #(vi
;;
*)
CF_VERBOSE(work around broken ICE dependency)
CF_TRY_PKG_CONFIG(ice,
[CF_TRY_PKG_CONFIG(sm)],
[CF_ADD_LIB_AFTER(-lXt,$X_PRE_LIBS)])
;;
esac
;;
esac
fi
cf_have_X_LIBS=yes
],[
LDFLAGS="$X_LIBS $LDFLAGS"
CF_CHECK_CFLAGS($X_CFLAGS)
AC_CHECK_FUNC(XOpenDisplay,,[
AC_CHECK_LIB(X11,XOpenDisplay,
[CF_ADD_LIB(X11)],,
[$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])])
AC_CHECK_FUNC(XtAppInitialize,,[
AC_CHECK_LIB(Xt, XtAppInitialize,
[AC_DEFINE(HAVE_LIBXT,1,[Define to 1 if we can compile with the Xt library])
cf_have_X_LIBS=Xt
LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS"],,
[$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])])
])
if test $cf_have_X_LIBS = no ; then
AC_MSG_WARN(
[Unable to successfully link X Toolkit library (-lXt) with
test program. You will have to check and add the proper libraries by hand
to makefile.])
fi
])dnl
dnl ---------------------------------------------------------------------------
dnl CF__CURSES_HEAD version: 2 updated: 2010/10/23 15:54:49
dnl ---------------
dnl Define a reusable chunk which includes <curses.h> and <term.h> when they
dnl are both available.
define([CF__CURSES_HEAD],[
#ifdef HAVE_XCURSES
#include <xcurses.h>
char * XCursesProgramName = "test";
#else
#include <${cf_cv_ncurses_header:-curses.h}>
#if defined(NCURSES_VERSION) && defined(HAVE_NCURSESW_TERM_H)
#include <ncursesw/term.h>
#elif defined(NCURSES_VERSION) && defined(HAVE_NCURSES_TERM_H)
#include <ncurses/term.h>
#elif defined(HAVE_TERM_H)
#include <term.h>
#endif
#endif
])
dnl ---------------------------------------------------------------------------
dnl CF__ICONV_BODY version: 2 updated: 2007/07/26 17:35:47
dnl --------------
dnl Test-code needed for iconv compile-checks
define([CF__ICONV_BODY],[
iconv_t cd = iconv_open("","");
iconv(cd,NULL,NULL,NULL,NULL);
iconv_close(cd);]
)dnl
dnl ---------------------------------------------------------------------------
dnl CF__ICONV_HEAD version: 1 updated: 2007/07/26 15:57:03
dnl --------------
dnl Header-files needed for iconv compile-checks
define([CF__ICONV_HEAD],[
#include <stdlib.h>
#include <iconv.h>]
)dnl
dnl ---------------------------------------------------------------------------
dnl CF__INET_HEAD version: 1 updated: 2013/10/08 17:47:05
dnl -------------
dnl Header-files needed for inet.h compile-checks
define([CF__INET_HEAD],[
#if defined(__MINGW32__)
#undef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#ifdef HAVE_WINSOCK2_H
#include <winsock2.h>
#else
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
#endif
#endif
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#endif
])dnl
dnl ---------------------------------------------------------------------------
dnl CF__INTL_BODY version: 1 updated: 2007/07/26 17:35:47
dnl -------------
dnl Test-code needed for libintl compile-checks
dnl $1 = parameter 2 from AM_WITH_NLS
define([CF__INTL_BODY],[
bindtextdomain ("", "");
return (int) gettext ("")
ifelse([$1], need-ngettext, [ + (int) ngettext ("", "", 0)], [])
[ + _nl_msg_cat_cntr]
])
dnl ---------------------------------------------------------------------------
dnl CF__INTL_HEAD version: 1 updated: 2007/07/26 17:35:47
dnl -------------
dnl Header-files needed for libintl compile-checks
define([CF__INTL_HEAD],[
#include <libintl.h>
extern int _nl_msg_cat_cntr;
])dnl
dnl ---------------------------------------------------------------------------
dnl CF__SSL_BODY version: 2 updated: 2008/04/13 10:56:06
dnl ------------
dnl Body for test-compile of SSL code.
define([CF__SSL_BODY],[
#ifdef USE_GNUTLS_FUNCS
gnutls_global_init();
#else
SSL_shutdown((SSL *)0)
#endif
])dnl
dnl ---------------------------------------------------------------------------
dnl CF__SSL_HEAD version: 2 updated: 2008/04/13 10:56:06
dnl ------------
dnl Headers for test-compile of SSL code.
define([CF__SSL_HEAD],[
#include <stdio.h>
#if defined(USE_OPENSSL_INCL)
#include <openssl/ssl.h>
#elif defined(USE_GNUTLS_FUNCS)
#include <gnutls/gnutls.h>
#elif defined(USE_GNUTLS_INCL)
#include <gnutls/openssl.h>
#else
#include <ssl.h>
#endif
])dnl
dnl ---------------------------------------------------------------------------
dnl jm_GLIBC21 version: 3 updated: 2002/10/27 23:21:42
dnl ----------
dnl Inserted as requested by gettext 0.10.40
dnl File from /usr/share/aclocal
dnl glibc21.m4
dnl ====================
dnl serial 2
dnl
dnl Test for the GNU C Library, version 2.1 or newer.
dnl From Bruno Haible.
AC_DEFUN([jm_GLIBC21],
[
AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
ac_cv_gnu_library_2_1,
[AC_EGREP_CPP([Lucky GNU user],
[
#include <features.h>
#ifdef __GNU_LIBRARY__
#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
Lucky GNU user
#endif
#endif
],
ac_cv_gnu_library_2_1=yes,
ac_cv_gnu_library_2_1=no)
]
)
AC_SUBST(GLIBC21)
GLIBC21="$ac_cv_gnu_library_2_1"
]
)
n class="p">> or <em>Return</em> key to
select an option. You also can use the '<em>/</em>' and '<em>n</em>'ext
<a href="#Search">searching</a> commands for navigating to options which
contain particular strings. <em>NOTE</em> that the popup menu
feature can be disabled via compilation and/or configuration options,
or via the <a href="#InteractiveOptions">Options Menu</a>,
in which case the selection
field options will be converted to a list of radio buttons. The default
setting for use of popups or radio button lists can be toggled via the
<em>-popup</em> command line switch.
<dt> Text Entry Fields
<dd>Text entry (INPUT) fields are displayed as a row of underscores the
length of the entry field: <em>_______</em>. You may enter text directly
by typing at the keyboard. Use the <a
href="keystrokes/edit_help.html">Line Editor</a> keys to
correct errors. If you try to input more text than the field can hold,
the line editor will not accept the additional characters. If you fill
a text field the cursor will not move off the field but remain at the
last field position. Use the <em>up-arrow</em>, and <em>down-arrow</em>,
<em>TAB</em> or <em>Return</em> keys to move up, or down from the text
entry field. NOTE, however, that <em>Return</em> also will <a
href="#submit">submit</a> the form if the text entry field is the
only non-hidden field in the form.
If <A NAME="tna">"Textfields Need Activation"</A> mode is turned on
(with the <kbd>-tna</kbd> command-line option or in <A HREF="#lynx.cfg"
>lynx.cfg</A>),
then text entry fields do not become active immediately upon being
selected, as normally. Keystrokes have their normal command meaning
unless the Line Editor gets activated with <em>Return</em> or <em>Right
Arrow</em>. This mode can be used to avoid "getting stuck" in input
fields, especially by users who rarely fill out forms.
<DIV ID="CtrlVNote">
<p><em>NOTE:</em> If you have a text input field selected you will not
have access to most of the Lynx keystroke commands, because they are
interpreted by the <a href="keystrokes/edit_help.html"
>Line Editor</a> as either text entries or editing commands. Select a
button or box when you want to use Lynx keystrokes; or prefix your
keystroke with <em>^V</em> to temporarily escape from line editing.
<p>
Some flavors of UNIX, shells & terminal settings require
that you enter <em>^V^Ve</em> in order to start the external editor,
as they also use <em>^V</em> as default command-line quote key
(called `lnext' in stty man pages and `stty -a' output);
to avoid this, you can put `stty lnext undef' in your .cshrc
file (or .profile or .bashrc, depending on what shell you use),
or invoke Lynx with a wrapper script, e.g.<p>
<code>
#!/bin/sh<br>
stty lnext undef<br>
$HOME/bin/lynx "$@"<br>
stty lnext ^V<br>
exit</code><p>
NB when NOT in the Line Editor, <em>^V</em> is by default bound
to the command
to switch between SortaSGML and TagSoup HTML parsing
(i.e., SWITCH_DTD).
To avoid confusion, either of these separate functions could be changed
(mapped away) with a KEYMAP directive in <em>lynx.cfg</em>. For
example,
<p>
KEYMAP:^V:DO_NOTHING<br>
KEYMAP:#:SWITCH_DTD
<p>
would map SWITCH_DTD away from <em>^V</em> to <em>#</em>, while leaving
its default Line Editor function as a command escape in place. On the
other hand,
<p>
KEYMAP:^V::NOP:1<br>
KEYMAP:^_::LKCMD:1
<p>
would move <em>^V</em>'s Line Editor binding as command escape to
<em>^_</em> for the first Line Edit style, letting <em>^V</em> still
act as SWITCH_DTD
outside of text input fields.
</DIV>
<dt>TEXTAREA Fields
<dd>TEXTAREA fields are for most purposes handled as if they were a series of
text entry (INPUT) fields
for which successive lines imply a newline at the end of
the preceding line. You enter text on each line to construct the overall
message. Any blank lines at the bottom of the TEXTAREA field will be
eliminated from the submission. The <em>up-arrow</em>, and
<em>down-arrow</em> or <em>Return</em> keys move you to the preceding,
or next line of the overall message, as for INPUT fields. The
<em>TAB</em> key will move you down beyond the bottom of the TEXTAREA
field, and <em>Back Tab</em> (if available, e.g., as Shift-Tab, and
correctly mapped in the terminal description) will move backward to
a link or field before the TEXTAREA.
<dt>Editing TEXTAREA Fields and Special TEXTAREA Functions
<dd>TEXTAREA fields can be edited using an external editor.
The statusline should tell you when this is possible and what
key to use, it might for example say
<PRE> <strong
>(Textarea) Enter text. </strong>[ ..... ]<strong> (^Xe for editor).</strong></PRE>
An external editor has to be defined, for example in the <a
href="#InteractiveOptions">Options Menu</a>, before you can start
using this function.
<p>A key to invoke external TEXTAREA editing is normally provided
by the <a href="keystrokes/edit_help.html">Line-Editor Key</a> Bindings.
A KEYMAP directive in <em>lynx.cfg</em> can also be used to
make a different key invoke external editing; it will then normally
be necessary to prefix that key with <em>^V</em> to "escape" from
line-editing. Two variants exist,<br>
KEYMAP:e:EDITTEXTAREA<br>
or<br>
KEYMAP:e:DWIMEDIT<br>
(the first is only functional for TEXTAREA editing, while the second
allows to use the same key for normal <a href="#FileEdit">file
editing</a> <em>as long as both functions don't conflict</em>).
<p>Please see the <a href="#CtrlVNote">note above</a> for details
about <em>^V</em> behavior.</p>
You can also use two other special TEXTAREA functions. Again, these
are already bound to key sequences in the <a
href="keystrokes/edit_help.html#TASpecial">Line-Editor
Bindings</a>, by default <em>^Xg</em> and <em>^Xi</em>.
You can use different keys
by adding KEYMAP bindings to your <em>lynx.cfg</em> file, e.g.<p>
KEYMAP:$:GROWTEXTAREA<br>
KEYMAP:#:INSERTFILE<p>
With these bindings,
(in a TEXTAREA only) <em>^V$</em> would add 5 lines to the TEXTAREA
and <em>^V#</em> would prompt for the name of an existing file
to be inserted into the TEXTAREA (above the cursorline).
An automatic variation of GROWTEXTAREA is normally compiled in,
so that hitting <em>Enter</em> with the cursor on the last line
adds a new line to the TEXTAREA, with the cursor on it.<p>
If you have some single keys (or control keys) to spare that you
do not need for their normal purposes, you can dedicate those keys
to invoke the special functions (without requiring a prefix key).
For example, to use
the <em>^E</em> key for the DWIMEDIT action, and
the <em>Insert</em> key for the INSERTFILE action,
use<br>
KEYMAP:^E:DWIMEDIT:PASS<br>
KEYMAP:0x10C:INSERTFILE:PASS<br>
(see lynx.cfg for other keystroke codes to use).
<p>Note that the default bindings that use <em>^X</em> as a prefix key
<em>may</em> also work by substituting the <kbd>Escape</kbd> key
for ^X. If your keyboard has a modifier (Meta) key that gets
transmitted as an ESC prefix, for example <kbd>Alt</kbd>, you can
then even use <em>Alt-e</em> instead of <em>^Xe</em>, <em>Alt-g</em>
instead of <em>^Xg</em>, and so on. But this does not work reliably
everywhere (it depends on the way Lynx is compiled, including which
libraries are used, and behavior of the connection and terminal type).
</dl>
In general, you can move around the form using the standard Lynx navigation
keys. The <em>up-arrow</em> and <em>down-arrow</em> keys, respectively,
select the previous or next field, box, or button. The <em>TAB</em> key
selects the next field, box, or button.
<p>To <A name="submit"><em>submit</em></a> the form press
<em>right-arrow</em> or <em>Return</em> when positioned on the form's
submit button. If you've submitted the form previously during the Lynx
session, have not changed any of the form content, and the METHOD was
<em>GET</em>, Lynx will retrieve from its cache what was returned from the
previous submission. If you wish to resubmit that form to the server with
the same content as previously, use the NOCACHE command ('<em>x</em>') when
positioned on the submit button. The <em>right-arrow</em> and <em>Return</em>
keys also will invoke a no-cache resubmission if the reply from a form
submission included a META element with a no-cache Pragma or Cache-Control
directive:<BR>
<pre>
<em><META HTTP-EQUIV="Pragma" CONTENT="no-cache"></em>
<em><META HTTP-EQUIV="Cache-Control" CONTENT="no-cache"></em>
</pre>
or the server sent a "Pragma" or "Cache-Control" MIME header with a
no-cache directive.
<p>You also can use the DOWNLOAD ('<em>d</em>') keystroke command when
positioned on a form submit button if you wish to download the server's
reply to the submission instead of having Lynx render and display it.
<p>Forms which have <em>POST</em> as the METHOD, or a <a
href="lynx_url_support.html#mailto">mailto:</a> URL as the ACTION, are always
resubmitted, even if the content has not changed, when you activate the
<em>submit</em> button. Lynx normally will not resubmit a form which has
<em>POST</em> as the METHOD if the document returned by the form has links
which you activated, and then you go back via the PREV_DOC
(<em>left-arrow</em>) command or via the <a
href="keystrokes/history_help.html">History Page</a>. Lynx can be
compiled so that it resubmits the form in those cases as well, and the default
can be changed via <A HREF="#lynx.cfg">lynx.cfg</A>, and toggled via the
<em>-resubmit_posts</em> command line switch.
<p>If the form has one <em>text entry</em> field and no other fields except,
possibly, hidden INPUT fields not included in the display, then that field
also serves as a <em>submit</em> button, and pressing <em>right-arrow</em>
or <em>Return</em> on that field will invoke submission of the form. Be
sure to use <em>up-arrow</em>, <em>down-arrow</em> or <em>TAB</em> to move
off the text entry field, in such cases, if it is not your intention to
submit the form (or to retrieve what was returned from an earlier submission
if the content was not changed and the METHOD was <em>GET</em>).
<p>Forms can have multiple <em>submit</em> buttons, if they have been
assigned NAMEs in the markup. In such cases, information about which
one of the buttons was used to submit the form is included in the form
content.
<p>Inlined images can be used as submit buttons in forms. If such
buttons are assigned NAMEs in the markup, for graphic clients they can
also serve as <a href="#USEMAP">image maps</a>, and the x,y coordinates of
the graphic client's cursor position in the image when it was
<em>clicked</em> are included in the form content. Since Lynx cannot
inline the image, and the user could not have moved a cursor from the
origin for the image, if no alternatives are made available in the
markup Lynx sends a 0,0 coordinate pair in the form content. Document
authors who use images as submit buttons, but have at least some concern
for text clients and sight-challenged Webizens, should include VALUEs for
the buttons in such markup. Lynx will then display the string assigned
to the VALUE, as it would for a normal submit button. Some document
authors incorrectly use an ALT instead of VALUE attribute for this purpose.
Lynx "cooperates" by treating ALT as a synonym for VALUE when present in
an INPUT tag with TYPE="image". If neither a VALUE nor an ALT attribute
is present, Lynx displays "[IMAGE]-Submit" as the string for such buttons.
If clickable images is set, the "[IMAGE]" portion of the string is a link
for the image, and the "Submit" portion is the button for submitting the
form. Otherwise, the entire string is treated as a submit button. If
a VALUE or ALT attribute is present and clickable images is set, Lynx
prepends "[IMAGE]" as a link for the image, followed by '-' and then
the attribute's value as the displayed string for the submit button.
Note that earlier versions of Lynx would send a name=value pair instead of
a 0,0 coordinate pair if a TYPE="image" submit button was NAME-ed, had a
VALUE attribute in the INPUT tag, and was used to submit the form. The
script which analyzes the form content thus could be made aware whether
the submission was by a user with a graphic client and had image loading
turned on, or by a user who did not see the image nor make a conscious
choice within it. However, requests that this be included in HTML
specifications consistently have fallen on deaf ears, and thus Lynx now
"fakes" a 0,0 coordinate pair whether or not a VALUE or ALT attribute is
present in the INPUT tag. Ideally, the script which analyzes the submitted
content will treat the 0,0 coordinate pair as an indicator that the user
did not see the image and make a conscious choice within it.
<p>Forms can have <em>hidden</em> INPUT fields, which are not displayed,
but have NAMEs and VALUEs included in the content. These often are used
to keep track of information across a series of related form submissions,
but have the potential for including information about the user that might
be considered to represent an invasion of privacy. NOTE, in this regard,
that Lynx has implemented the <a
href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
<em>DISABLED</em> attribute for <em>all</em> of its form fields. These
can be used to keep track of information across submissions, and to cast
it unmodifiable in the current form, but keep the user aware that it will
be included in the submission.
<p>Forms most commonly are submitted to http servers with the content encoded
as <em>ENCTYPE="application/x-www-form-urlencoded"</em> for analysis by a
script, and Lynx treats that as the default if no ENCTYPE is specified in the
FORM start tag. However, you can specify a <a
href="lynx_url_support.html#mailto">mailto</a> URL as the form's ACTION to
have the form content sent, instead, to an email address. In such cases, you
may wish to specify <em>ENCTYPE="text/plain"</em> in the form markup, so that
the content will not be encoded, but remain readable as plain text.
<p>Lynx also supports <em>ENCTYPE="application/sgml-form-urlencoded"</em>
for which all reserved characters in the content will be hex escaped, as
with <em>application/x-www-form-urlencoded</em>, but semicolons
('<em>;</em>') instead of ampersands ('<em>&</em>') will be used as
the separator for name=value pairs in the form content. The use of
semicolons is preferred for forms with the <em>GET</em> METHOD, because
the <em>GET</em> METHOD causes the encoded form content to be appended
as a <em>?searchpart</em> for the form's ACTION, and if such URLs are used
in <em>text/html</em> documents or bookmark files without conversion
of the ampersands to SGML character references (<em>&amp;</em> or
<em>&#38;</em>), their being followed by form field NAMEs which might
correspond to SGML entities could lead to corruption of the intended URL.
<p>NOTE, in this regard, that Lynx converts ampersands to <em>&amp;</em>
when creating bookmarks, and thus the bookmark links will not be vulnerable
to such corruptions. Also NOTE that Lynx allows you to save links in your
bookmark file for documents returned by forms with the <em>GET</em> METHOD,
and which thus have the content appended as a <em>?searchpart</em>, but not
if the METHOD was <em>POST</em>, because the content would be lost and the
link thus would be invalid.
<p>Lynx supports <em>ENCTYPE="multipart/form-data"</em> for sending form
content with name=value pairs encoded as multipart sections with individual
MIME headers and boundaries. However, Lynx does not yet support INPUTs
with <em>TYPE="file"</em> or <em>TYPE="range"</em> and
will set the <em>DISABLED</em> attribute for all of the form's fields if
any INPUTs with either of those two TYPEs are present, so that the form
can't be submitted. Otherwise, Lynx will submit the form with the multipart
ENCTYPE.
<p>A <em>Content-Disposition: file; filename=name.suffix</em>
header can be used by CGI scripts to set the suggested filename offered
by Lynx for '<em>d</em>'ownload and '<em>p</em>'rint menu options to save
or mail the body returned by the script following submission of a FORM.
Otherwise, Lynx uses the last symbolic element in the path for the FORM's
ACTION, which is normally the script, itself, or a PATH_INFO field, and
thus might be misleading. This also can be done via a META element in
any document:
<pre>
<em><META HTTP-EQUIV="Content-Disposition"
CONTENT="file; filename=name.suffix"></em>
</pre>
[<A HREF="#ToC-Forms">ToC</A>]
<h2 ID="Images"><A NAME="Images"><em>Lynx and HTML Images</em></a></h2>
As a text browser, Lynx does not display images as such
-- you need to define a viewer in <em>lynx.cfg</em>: see there -- ,
but users can choose a number of ways of showing their presence.
<p>
There are 3 choices in <em>lynx.cfg</em>, with 2 corresponding keys:
<pre>
MAKE_LINKS_FOR_ALL_IMAGES * IMAGE_TOGGLE
MAKE_PSEUDO_ALTS_FOR_INLINES [ INLINE_TOGGLE
VERBOSE_IMAGES no corresponding key
</pre><p>
You can also use the <em>Options Menu</em>, as outlined below:
<pre>
key lynx.cfg FM KM .lynxrc variable in source
* MAKE_LINKS_ Y N N clickable_images
[ MAKE_PSEUDO_ Y N N pseudo_inline_alts
VERBOSE_ Y Y Y verbose_img
FM = Form-based Menu ; KM = Key-based Menu ;
in .lynxrc , VERBOSE_IMAGES is called `verbose_images':
the other two cannot be saved between sessions.
</pre><p>
In the Form-based Menu, the 3-way `Show images' selection
combines the effects of the `*' & `[' keys, as follows:
<pre>
Ignore clickable_images = FALSE, pseudo_inline_alts = FALSE
As labels clickable_images = FALSE, pseudo_inline_alts = TRUE
As links clickable_images = TRUE, pseudo_inline_alts = unchanged
</pre>
<h2 ID="Tables"><A NAME="Tables"><em>Lynx and HTML Tables</em></a></h2>
HTML includes markup for creating <em>tables</em> structured as arrays of
cells aligned by columns and rows on the displayed page.
<p>Lynx recognizes the TABLE element and all of its associated elements
as described in <a href="http://www.faqs.org/rfcs/rfc1942.html"
>http://www.faqs.org/rfcs/rfc1942.html</a>
and will process any ID attributes in the start tags for handling as NAME-ed
anchors, but does not create actual <em>tables</em>. Instead, it treats
the TR start tag as a collapsible BR (line break), and inserts a collapsible
space before the content of each TH and TD start tag. This generally makes
all of the content of the <em>table</em> readable, preserves most of the
intra-cell organization, and makes all of the links in the <em>table</em>
accessible, but any information critically dependent on the column and row
alignments intended for the <em>table</em> will be missed.
<p>If inherently tabular data must be presented with Lynx, one can use PRE
formatted content, or, if the <em>table</em> includes markup not allowed
for PRE content, construct the <em>table</em> using <a
href="#Tabs">HTML Tabs</a>. An example <em>table</em> using <em>TAB</em>
elements is included in the test subdirectory of the Lynx distribution.
<DIV ID="TRST">
<p>Starting with version 2.8.3, Lynx renders some tables in tabular
form. This tabular representation for <em>simple</em> tables
(<dfn>TRST</dfn>) does not attempt to implement full support for any table
model. Limitations are:
<ul>
<li>All data constituting a table row generally has to fit within the
display width without inserting line breaks.
<li>Cell contents have to be simple. In general, only inline markup is
acceptable, no <code><P></code>, <code><BR></code> etc.
(although <code><BR></code> may
be ignored at the beginning of the first cell or at the end of the
last cell of a row).
<li>When tables are nested, only the innermost level is a candidate
for tabular representation.
<li>Most attributes are ignored, including borders, <code>WIDTH</code>,
vertical alignment.
</ul>
Horizontal alignments (<code>LEFT</code>, <code>CENTER</code>,
<code>RIGHT</code>), <code>COLSPAN</code>, and <code>ROWSPAN</code> are
interpreted according to HTML 4.01. (<code>ROWSPAN</code> can only reserve
empty space in subsequent rows, because of the limitations above.) When
TRST fails because a table is not "simple" enough, the representation falls
back to the minimal handling described earlier.
Many (but, unfortunately, by no means all) tables that represent inherently
tabular material will thus be shown with correct tabular formatting.
Where table markup is used only for layout purposes (containing whole blocks
of text and list within table cells) and not essential for understanding
the textual contents, it remains basically ignored. Some more information
on details is available in the file <kbd>README.TRST</kbd> of the source
distribution.
</DIV>
<p>For tabular display of more complex tables, Lynx users can make use of
external scripts or programs. The normal Lynx distribution currently does
not provide such scripts, but they can be written locally or downloaded
from several sources. It is suggested to use one of Lynx's facilities for
invoking external programs (see <kbd>DOWNLOADER</kbd>, <kbd>PRINTER</kbd>,
<kbd>EXTERNAL</kbd>, <kbd>TRUSTED_LYNXCGI</kbd> in <A
HREF="#lynx.cfg">lynx.cfg</A> and <A HREF="lynx_url_support.html#cgi"><code
>lynxcgi:</code></A> in <em>Supported URLs</em> for information on various
ways for setting this up).
[<A HREF="#ToC-Tables">ToC</A>]
<h2 ID="Tabs"><A NAME="Tabs"><em>Lynx and HTML Tabs</em></a></h2>
Lynx implements the <a
href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
TAB element only when LEFT alignment is in effect. If the alignment is
CENTER or RIGHT (JUSTIFY is not yet implemented in Lynx, and is treated
as a synonym for LEFT), or if the TAB element indicates a position to the
left of the current position on the screen, it is treated as a collapsible
space. For purposes of implementing TAB, Lynx treats <em>en</em> units as
half a character cell width when specified by the INDENT attribute, and
rounds up for odd values (e.g., a value of either 5 or 6 will be treated
as three spaces, each the width of a character cell). See the example
<em>table</em> using TAB elements in the test subdirectory of the Lynx
distribution as a model for using this functionality.
<p>Note that this <em>Users Guide</em> and the <a
href="lynx_url_support.html">Supported URLs</a> page include TAB markup in
a manner which <em>degrades gracefully</em> for WWW browsers which do not
support it. Toggle to display of <a href="#LocalSource">source</a> and <a
href="#Search">search</a> for <em><tab</em> to examine the use of TAB markup
in these documents. [<A HREF="#ToC-Tabs">ToC</A>]
<h2 ID="Frames"><A NAME="Frames"><em>Lynx and HTML Frames</em></a></h2>
Some implementations of HTML include markup, primarily designed for graphic
clients, that is intended to create an array of simultaneously displayed,
independently scrolling windows. Such windows have been termed
<em>frames</em>.
<p>Lynx recognizes the Netscape and Microsoft Explorer FRAME, FRAMESET,
and NOFRAMES elements, but is not capable of windowing to create the
intended positioning of <em>frames</em>. Instead, Lynx creates labeled
links to the <em>frame</em> sources, typically positioned in the upper
left corner of the display, and renders the NOFRAMES section. If the
document provider has disregard for text clients and sight-challenged
Webizens, and thus does not include substantive content in the NOFRAMES
section or a link in it to a document suitable for text clients, you
can usually guess from the labeling of the <em>frame</em> links which
one has the substantive material (if there is any), or you can try each
of those links to see if anything worthwhile is returned.
[<A HREF="#ToC-Frames">ToC</A>]
<p>Some sites -- in ignorance of Lynx capabilities -- may tell you
(for example) "to view this page you need Netscape Navigator".
You can simply ignore such warnings and access the frames
via the Lynx-generated links as above.
<h2 ID="Banners"><A NAME="Banners"><em>Lynx and HTML Banners</em></a></h2>
Some implementations of HTML markup include provisions for creating a
non-scrolling window to be positioned at the top of each page, containing
links with brief, descriptive link names, analogous to a Windows toolbar.
Such windows have been termed <em>banners</em>.
<p>Lynx recognizes and processes all of the <a
href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
REL attribute tokens in LINK elements for creating a <em>banner</em>, and
a number of others which have subsequently been proposed. These
<em>banner</em> tokens are <em>Home</em>, <em>ToC</em>, <em>Contents</em>,
<em>Index</em>, <em>Glossary</em>, <em>Copyright</em>, <em>Up</em>,
<em>Next</em>, <em>Previous</em>, <em>Prev</em>, <em>Help</em>,
<em>Search</em>, <em>Top</em>, <em>Origin</em>, <em>Navigator</em>,
<em>Child</em>, <em>Disclaimer</em>, <em>Sibling</em>, <em>Parent</em>,
<em>Author</em>, <em>Editor</em>, <em>Publisher</em>, <em>Trademark</em>,
<em>Meta</em>, <em>URC</em>, <em>Hotlist</em>, <em>Begin</em>,
<em>First</em>, <em>End</em>, <em>Last</em>, <em>Pointer</em>,
<em>Translation</em>, <em>Definition</em>, <em>Chapter</em>,
<em>Section</em>, <em>Subsection</em>, <em>Alternate</em>,
<em>Documentation</em>, <em>Biblioentry</em>, <em>Bibliography</em>,
<em>Start</em>, <em>Appendix</em>,
<em>Bookmark</em> and <em>Banner</em>. Any LINK elements with those
tokens as the REL attribute value, and an HREF attribute value in the LINK,
will invoke creation of a <em>banner</em> at the top of the first page,
with the element's HREF as the link, and the token as the default link
name. If a TITLE attribute is included in the LINK, it's value will be
used as the link name instead of the default. <em>Bookmark</em> and
<em>Banner</em> are intended to be accompanied by a TITLE attribute,
which in effect makes the namespace for REL <em>banner</em> tokens
infinite.
<p>If the special token <em>Help</em> is used as the REL value and no HREF
is included in the LINK, Lynx will use it own <em>HELPFILE</em> URL for that
link. For the special token <em>Home</em> without an HREF, Lynx will use
the default <em>STARTFILE</em> (i.e., derived from the configuration files
or the WWW_HOME environment variable, <em>not</em> the command line
<em>startfile</em> if one was used). However, if a <em>-homepage=URL</em>
was specified on the command line, it's URL will be used as the HREF.
For the special token <em>Index</em> without an HREF, Lynx will use the
<em>DEFAULT_INDEX_FILE</em> derived from the configuration files, or if an
<em>-index=URL</em> was specified on the command line, it's URL will be used
as the HREF.
<p>Lynx does not waste screen real estate maintaining the <em>banner</em> at
the top of every page, but the Lynx TOOLBAR keystroke command ('<em>#</em>')
will, any time it is pressed, position you on the <em>banner</em> so that
any of its links can be activated, and pressing the <em>left-arrow</em> when
in the <em>banner</em> will return you to where you were in the current
document. The toolbar is indicated by a '<em>#</em>" preceding its first
link when present on the screen, that is, when the first page of the
document is being displayed. The availability of a toolbar is indicated by
a '<em>#</em>' at the top, left-hand corner of the screen when the second
or subsequent pages of the document are being displayed.
<p>Lynx also recognizes the <a
href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
BANNER container element, and will create a <em>banner</em> based on its
content if one has not already been created based on LINK elements. Lynx
treats the Microsoft MARQUEE element as a synonym for BANNER (i.e.,
presenting it's markup as a static <em>banner</em>, without any horizontal
scrolling of its content). Lynx does not prefix the BANNER or MARQUEE
content with a '<em>#</em>' because the content need not be only a series
of links with brief, descriptive links names, but does add a '<em>#</em>'
at the top, left-hand corner of the screen when the content is not being
displayed, to indicate it's accessibility via the TOOLBAR keystroke command.
[<A HREF="#ToC-Banners">ToC</A>]
<h2 ID="Footnotes"><A NAME="Footnotes"><em>Lynx and HTML Footnotes</em></a></h2>
Lynx implements the <a
href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
FN element similarly to a named <em>A</em>nchor within the current document,
and assumes that the footnotes will be positioned at the bottom of the
document. However, in contrast to named <em>A</em>nchors, the FN container
element is treated as a block (i.e., as if a new paragraph were indicated
whether or not that is indicated in its content) with greater than normal
left and right margins, and the block will begin with a <em>FOOTNOTE:</em>
label. For example, if the document contains:
<pre>
See the <em><A HREF="#fn1"></em><a href="#an1">footnote</a><em></A></em>.
</pre>
activating that link will take you to the labeled rendering of:
<pre>
<em><FN ID="fn1"></em><p><a name="an1">Lynx does not use popups for FN blocks.</a></p><em></FN></em>
</pre>
<p>i.e., position it at the top of the page. Then, upon reading the footnote,
you can return to your previous position in the document by pressing the
<em>left-arrow</em> key. The content of an FN element can be any HTML
markup that is valid in the BODY of the document.
[<A HREF="#ToC-Footnotes">ToC</A>]
<h2 ID="Notes"><A NAME="Notes"><em>Lynx and HTML Notes</em></a></h2>
Lynx implements the <a
href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
NOTE element (<em>Admonishment</em>) as a labeled block, i.e., as if a new
paragraph were indicated whether or not paragraphing markup is included
in its content, with greater than normal left and right margins, and with
the type of note indicated by an emphasized label based on the value of its
CLASS or ROLE attribute. If no CLASS or ROLE attribute is included, the
default label <em>NOTE:</em> will be used. Lynx recognizes the values
<em>caution</em> and <em>warning</em>, for which, respectively, the labels
<em>CAUTION:</em> or <em>WARNING:</em> will be used. The NOTE element can
have an ID attribute, which will be treated as a named <em>A</em>nchor, as
for <a href="#Footnotes">HTML Footnotes</a>,
but the NOTE block need not be placed
at the bottom of the document. The content of a NOTE block can be any HTML
markup that is valid in the BODY of the document. This is an example:<BR>
<pre>
<em><NOTE CLASS="warning" ID="too-bad">
<p>The W3C vendors did not retain NOTE in the HTML 3.2 draft.</p>
</NOTE></em>
</pre>
It will <em>degrade gracefully</em> for WWW browsers which do not support
NOTE, except for recognition of the ID attribute as a named <em>A</em>nchor.
[<A HREF="#ToC-Notes">ToC</A>]
<h2 ID="Lists"><A NAME="Lists"><em>Lynx and HTML Lists</em></a></h2>
Lynx implements the <a
href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
list elements UL (<em>Unordered List</em>), OL (<em>Ordered List</em>),
and DL (<em>Definition List</em>), and their associated attributes, and
elements (LH, LI, DT, and DD) for the most part as described in that
specification. The lists can be nested, yielding progressively greater
indentation, up to six levels. The <a
href="http://www.w3.org/MarkUp/html-spec/html-spec_toc.html"
>HTML 2.0</a> MENU and DIR elements <em>both</em> are treated as synonyms
for UL with the PLAIN attribute (no <em>bullets</em>, see below). Note,
thus, that neither DIR nor MENU yields a series of columns with 24-character
spacing. A single nesting index is maintained, so that different types of
List elements can be used for different levels within the nest. Also, the
<a href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
FIG, CAPTION and CREDIT elements are treated as valid within list blocks.
They will be rendered with indentation appropriate for the current nesting
depth, and the CAPTION or CREDIT elements will have a <em>CAPTION:</em> or
<em>CREDIT:</em> label beginning the first line of their content. The
content of any APPLET or OBJECT elements in the lists also will be indented
appropriately for the current nesting depth, but those will not invoke line
breaks unless indicated by their content, and it should not include markup
which is inappropriate within the list.
<p>Lynx also supports the TYPE attribute for OL elements, which can have
values of <em>1</em> for Arabic numbers, <em>I</em> or <em>i</em> for
uppercase or lowercase Roman numerals, or <em>A</em> or <em>a</em> for
uppercase or lowercase letters, that increment for successive LI elements
in the list block. The CONTINUE attribute can be used to continue the
ordering from the preceding list block when the nesting depth is changed.
<p>Lynx treats the OL attributes START and SEQNUM as synonyms for specifying
the ordering value for the first LI element in the block. The values should
be specified as Arabic numbers, but will be displayed as Arabic, Roman, or
alphabetical depending on the TYPE for the block. The values can range from
<em>-29997</em> to the system's maximum positive integer for Arabic numbers.
For Roman numerals, they can range from <em>1</em> (<em>I</em> or <em>i</em>)
to <em>3000</em> (<em>MMM</em> or <em>mmm.</em>). For alphabetical orders,
the values can range from <em>1</em> (<em>A</em> or <em>a</em>) to
<em>18278</em> (<em>ZZZ</em> or <em>zzz</em>). If the CONTINUE attribute is
used, you do not need to specify a START or SEQNUM attribute to extend the
ordering from a previous block, and you can include a TYPE attribute to
change among Arabic, Roman, or alphabetical ordering styles, or their casing,
without disrupting the sequence. If you do not include a START, SEQNUM or
CONTINUE attribute, the first LI element of each OL block will default to
<em>1</em>, and if you do not include a TYPE attribute, Lynx defaults to
Arabic numbers.
<p>For UL blocks without the PLAIN attribute, Lynx uses <em>*</em>,
<em>+</em>, <em>o</em>, <em>#</em>, <em>@</em> and <em>-</em> as
<em>bullets</em> to indicate, progressively, the depth within the six
nesting levels.
<p>Lynx treats UL, OL, DIR, and MENU blocks as having the COMPACT attribute
by default, i.e., single spaces between LH and LI elements within those
blocks. For DL blocks, double spacing will be used to separate the DT and
DD elements unless the COMPACT attribute has been specified.
[<A HREF="#ToC-Lists">ToC</A>]
<h2 ID="Quotes"><A NAME="Quotes"><em>Lynx and HTML Quotes</em></a></h2>
The <a
href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a> and
later specifications provide for two classes of quotation in HTML documents.
Block quotes, designated by the BLOCKQUOTE element (or it's abbreviated
synonym BQ in HTML 3.0), have implied paragraph breaks preceding and following
the start and end tags for the block. Character level quotes, designated by
the Q element, in contrast are simply directives in the markup to insert an
appropriate quotation mark.
<p>Lynx renders block quotes with a greater than normal left and right
indentation. Lynx does not support italics, and normally substitutes
underlining, but does not underline block quotes so as not to obscure any
explicit emphasis elements within the quotation. The BLOCKQUOTE or BQ
block can include a CREDIT container element, whose content will be rendered
as an implied new paragraph with a <em>CREDIT:</em> label at the beginning of
its first line.
<p>Lynx respects nested Q start and end tags, and will use ASCII double-quotes
(<em>"</em>) versus grave accent (<em>`</em>) and apostrophe
(<em>'</em>), respectively, for even versus odd depths in the nest.
<p>Any ID attributes in BLOCKQUOTE, BQ or Q elements can be the target
of a hyperlink in the form URL#id. It is treated just
like the NAME in <em>A</em>nchors. [<A HREF="#ToC-Quotes">ToC</A>]
<h2 ID="Eightbit"><A NAME="Eightbit"><em>Lynx and HTML Internationalization: 8bit, UNICODE, etc.</em></a></h2>
Lynx has superior support for HTML 4.0/I18N internationalization issues.
However, to see the characters other than 7bit properly you <em>should</em>
set your <A HREF="keystrokes/option_help.html#DC">display character set</A>
from Option Menu and save its value, this is a Frequently Asked Question.
Fine-turning is also available from <A HREF="#lynx.cfg">lynx.cfg</A>
[<A HREF="#ToC-Eightbit">ToC</A>]
<h2 ID="USEMAP"><A NAME="USEMAP"><em>Lynx and Client-Side-Image-Maps</em></a></h2>
HTML includes markup, designed primarily for graphic clients, that treats
inlined images as maps, such that areas of the image within which a mouse
cursor was positioned when the mouse was <em>clicked</em> can correspond
to URLs which should be retrieved. The original implementations
were based on the client sending an http server the x,y coordinates
associated with the <em>click</em>, for handling by a script invoked by
the server, and have been termed <em>server-side-image-maps</em>. Lynx
has no rational way of coping with such a procedure, and thus simply
sends a 0,0 coordinate pair, which some server scripts treat as an
instruction to return a document suitable for a text client.
<p>Newer HTML markup provides bases for the client to determine the
URLs associated with areas in the image map, and/or for a text client
to process alternative markup and allow the user to make choices based
on textual information. These have been termed
<em>client-side-image-maps</em>.
<p>Lynx recognizes and processes the MAP container element and its AREA
elements, and will create a menu of links for the HREF of each AREA when
the link created for the IMG element with a USEMAP attribute is activated.
The menu uses the ALT attributes of the AREA elements as the link names,
or, if the document's author has disregard for text clients and
sight-challenged Webizens, and thus did not include ALT attributes, Lynx
uses the resolved URLs pointed to by the HREF attributes as the link names.
Lynx uses the TITLE attribute of the IMG element, or the TITLE attribute of
the MAP, if either was present in the markup, as the title and main header
of the menu. Otherwise, it uses the ALT attribute of the IMG element. If
neither TITLE nor ALT attributes were present in the markup, Lynx creates
and uses a <em>[USEMAP]</em> pseudo-ALT. The MAPs need not be in the same
document as the IMG elements. If not in the same document, Lynx will fetch
the document which contains the referenced MAP, and locate it based on
its NAME or ID attribute. All MAPs encountered in documents during a
Lynx session are cached, so that they need not be retrieved repeatedly
when referenced in different documents.
<p>If the IMG element also indicates a <em>server-side-image-map</em>
via an ISMAP attribute, Lynx normally will create a link for that as well,
using an <em>[ISMAP]</em> pseudo-ALT (followed by a hyphen to indicate its
association with the <em>client-side-image-map</em>) rather than ignoring
it, and will submit a 0,0 coordinate pair if that link is activated.
Although, the <em>client-side-image-map</em> may be more useful for a
client such as Lynx, because all of the URLs associated with the image
map can be accessed, and their nature indicated via ALT attributes,
Lynx-friendly sites can map 0,0 such that the server returns a
for-text-client document homologous to the content of FIG elements (see
below). Inclusion of such a link for submissions to the server can be
disabled by default via the configuration file
(<A HREF="#lynx.cfg">lynx.cfg</A>), and the
default can be toggled via the <em>-ismap</em> command line switch.
<p>Lynx also recognizes the <a
href="http://www.w3.org/MarkUp/html3/Contents.html">HTML 3.0</a>
FIG and OVERLAY elements, and will handle them as intended for text clients.
These are the ideal way to handle <em>client-side-image-maps</em>, because
the FIG content provides complete alternative markup, rather than relying
on the client to construct a relatively meager list of links with link
names based on ALT strings.
<p>The presently experimental OBJECT element encompasses much of the
functionality of the FIG element for <em>client-side-image-maps</em>.
Lynx will render and display the content of OBJECT elements which have
the SHAPES attribute equivalently to its handling of FIG. Lynx also
handles OBJECT elements with the USEMAP and/or ISMAP attributes
equivalently to its handling of IMG elements with
<em>client-side-image-maps</em> and/or <em>server-side-image-maps</em>.
[<A HREF="#ToC-USEMAP">ToC</A>]
<h2 ID="Refresh"><A NAME="Refresh"><em>Lynx and Client-Side-Pull</em></a></h2>
HTML includes provision for passing instructions to clients via directives
in META elements, and one such instruction, via the token <em>Refresh</em>,
should invoke reloading of the document, fetched from a server with the
same URL or a new URL, at a specified number of seconds following receipt
of the current document. This procedure has been termed
<em>client-side-pull</em>. An example of such an element is:
<pre>
<em><META HTTP-EQUIV="Refresh" CONTENT="3; URL="http://host/path"></em>
</pre>
which instructs a client to fetch the indicated URL in 3 seconds after
receiving the current document. If the <em>URL=</em> field is omitted,
the URL defaults to that of the current document. A <em>no-cache</em>
directive is implied when the <em>Refresh</em> if for the same URL.
<p>Lynx recognizes and processes <em>Refresh</em> directives in META
elements, but puts up a labeled link, typically in the upper left corner
of the display, indicating the number of seconds intended before a
refresh, and the URL for the refresh, instead of making the request
automatically after the indicated number of seconds. This allows
people using a braille interface any amount of time to examine the
current document before activating the link for the next URL. In
general, if the number of seconds indicated is short, the timing
is not critical and you can activate the link whenever you like.
If it is long (e.g., 60 seconds), a server process may be generating
new documents or images at that interval, and you would be wasting
bandwidth by activating the link at a shorter interval.
[<A HREF="#ToC-Refresh">ToC</A>]
<h2 ID="Cookies"><A NAME="Cookies"><em>Lynx State Management</em></A>
(Me want <em>cookie</em>!)</h2>
HTTP provides a means to carry state information across successive
connections between a browser and an http server. Normally, http servers
respond to each browser request without relating that request to previous
or subsequent requests. Though the inclusion of INPUT fields with
TYPE="hidden" can be used as a sort of state management by <a href="#Forms"
>HTML Forms</a>, a more general approach involves exchanges of MIME
headers between the server and browser. When replying to a request,
the server can send a <em>Set-Cookie</em> MIME header which contains
information (<em>cookies</em>) relevant to the browser's request, and in
subsequent requests the browser can send a <em>Cookie</em> MIME header
with information derived from previously received cookies.
<p>State Management via cookie exchanges originally was implemented by
Netscape, and such cookies are now designated as <em>Version 0</em>. A
more elaborate format for cookies, designated as <em>Version 1</em>, is
being standardized by the IETF (Internet Engineering Task Force). Lynx
supports both <em>Version 0</em> and <em>Version 1</em> cookie exchanges.
This support can be disabled by default via the SET_COOKIES symbol in the
compilation (<em>userdefs.h</em>) and/or run time
(<A HREF="#lynx.cfg">lynx.cfg</A>)
configuration files, and that default setting can be toggled via the
<em>-cookies</em> command line switch.
The SET_COOKIES symbol can be further modified by the ACCEPT_ALL_COOKIES mode.
If ACCEPT_ALL_COOKIES is set TRUE, and SET_COOKIES is TRUE, Lynx will accept
all cookies. Additionally, the cookies that are automatically accepted or
rejected by Lynx can be further modified with the COOKIE_ACCEPT_DOMAINS and
COOKIE_REJECT_DOMAINS options in your .lynxrc file, each of which is a
comma-separated list of domains to perform the desired action. The domain
listed in these options must be identical to the domain the cookie comes
from, there is no wildcard matching. If a domain is specific in both
COOKIE_ACCEPT_DOMAINS and COOKIE_REJECT_DOMAINS, rejection will take
precedence.
<p>When cookie support is enabled, <em>Set-Cookie</em> MIME headers
received from an http server invoke confirmation prompts with possible
replies of '<em>Y</em>'es or '<em>N</em>'o for acceptance of the cookie,
'<em>A</em>'lways to accept the cookie and to allow all subsequent
cookies from that <em>domain</em> (server's Fully Qualified Domain Name,
or site-identifying portion of the FQDN) without further confirmation
prompts, or ne'<em>V</em>'er to never allow cookies from that
<em>domain</em> to be accepted (silently ignore its <em>Set-Cookie</em>
MIME headers). All unexpired cookies are held in a hypothetical
<em>Cookie Jar</em> which can be examined via the COOKIE_JAR keystroke
command, normally mapped to <em>Ctrl-K</em>, for invoking the <a
href="keystrokes/cookie_help.html">Cookie Jar Page</a>. If Lynx has been
compiled with the --enable-persistent-cookies flag, then unexpired cookies
will be stored between sessions in the filename set with the COOKIE_FILE
option in your .lynxrc.
<p>A common use of cookies by http servers is simply to track the
documents visited by individual users. Though this can be useful to the
site's WebMaster for evaluating and improving the organization of links
in the various documents of the site, if the user has configured Lynx
to include a <em>From</em> MIME header with the user's email address in
http requests, or has passed personal information to the server via a
form submission, the tracking might be used to draw inferences, possibly
incorrect, about that user, and may be considered by some as an invasion
of privacy.
<p>An example of worthwhile State Management via cookies is the setting
of personal preferences, typically via a form submission to the site,
which will then apply to all documents visited at that site.
<p>If you accept cookies when accessing a site, but are given no indication
about how they will be used in subsequent requests to that site, nor can
infer how they will be used, you can <em>Gobble</em> (delete) the cookies
and/or change the 'allow' setting for its <em>domain</em> via the <a
href="keystrokes/cookie_help.html">Cookie Jar Page</a>.
[<A HREF="#ToC-Cookies">ToC</A>]
<h2 ID="Invoking"><A NAME="Invoking"><em>The Lynx command line</em></A></h2>
A summary of the Lynx command line options (switches) is returned to
stdout if Lynx is invoked with the <em>-help</em> switch. A description
of the options also should be available via the system man (Unix) pages
or help (VMS) libraries. On Win32, typing lynx -help in a DOS window
should display similarly.
The basic syntax of the Lynx command line can
be represented as one of the following:
<dl>
<dt><code>Command</code>
<dd><code>lynx [options]</code>
<dd><code>lynx [options] startfile</code>
</dl>
where
<dl>
<dt><code>startfile</code>
<dd>is the file or URL that Lynx will load at start-up.
<ul>
<li>If startfile is not specified, Lynx will use a default
starting file and base directory determined during
installation.
<li>If a specified file is local (i.e., not a URL) Lynx
displays that file and uses the directory in which that
file resides as the base directory.
<li>If a URL is specified, the file will be retrieved,
and only the server base directory will be relevant
to further accesses.
</ul>
<dt><code>options</code>
<dd>can be selected from the following list, where items in all-caps
indicate that a substitution must be made. Many options are
"toggles", meaning that they will change the default action,
however it was specified. To always set the option on, use the
syntax "-option+", "-option=on", or "-option:on". To always set
the option off, use the syntax "-option-", "-option=off", or
"-option:off". The syntax with the "=" may not work under DOS
because of operating system constraints. Use one of the other
forms in that case.
<dl>
<dt><code>-</code>
<dd>If the argument is only '<code>-</code>' (dash), then Lynx
expects to receive the arguments from stdin. This is to
allow for the potentially very long command line that can
be associated with the <em>-get_data</em> or
<em>-post_data</em> arguments (see below).
It can also be used to avoid having sensitive information
in the invoking command line (which would be visible to
other processes on most systems), especially when
the <em>-auth</em> or <em>-pauth</em> options are used.
On VMS, the dash
must be encased in double-quotes ("-") and the
keyboard input terminated with <em>Control-Z</em> or the
command file input terminated by a line that begins
with '<em>$</em>'. On Unix, the keyboard input terminator
is <em>Control-D</em>. On Win32, [???].
<dt><code>-accept_all_cookies</code>
<dd>accept all cookies.
<dt><code>-anonymous</code>
<dd>apply restrictions appropriate for an anonymous
account, see <em>-restrictions</em> below for some
details.
<dt><code>-assume_charset=MIMENAME</code>
<dd>charset for documents that don't specify it.
<dt><code>-assume_local_charset=MIMENAME</code>
<dd>charset assumed for local files.
<dt><code>-assume_unrec_charset=MIMENAME</code>
<dd>use this instead of unrecognized charsets.
<dt><code>-auth=ID:PW</code>
<dd>set authorization ID and password for protected documents
at startup. Be sure to protect any script files which use
this switch.
<dt><code>-base</code>
<dd>prepend a request URL comment and BASE tag to text/html
outputs for -source dumps.
<dt><code>-bibp=URL</code>
<dd>specify a local bibp server (default http://bibhost/).
<dt><code>-blink</code>
<dd>forces high intensity background colors for color mode,
if available and supported by the terminal.
This applies to the slang library (for a few terminal
emulators), or to OS/2 EMX with ncurses.
<dt><code>-book</code>
<dd>use the bookmark page as the startfile. The default or
command line startfile is still set for the Main screen
command, and will be used if the bookmark page is
unavailable or blank.
<dt><code>-buried_news</code>
<dd>toggles scanning of news articles for buried references,
and converts them to news links. Not recommended because
email addresses enclosed in angle brackets will be
converted to false news links, and uuencoded messages can
be trashed.
<dt><code>-cache=NUMBER</code>
<dd>set the <em>NUMBER</em> of documents cached in memory.
The default is 10.
<dt><code>-center</code>
<dd>Toggle center alignment in HTML TABLE.
<dt><code>-case</code>
<dd>enable case-sensitive string searching.
<dt><code>-cfg=FILENAME</code>
<dd>specifies a Lynx configuration file other than the default
<A HREF="#lynx.cfg">lynx.cfg</A>.
<dt><code>-child</code>
<dd>exit on left-arrow in startfile, and disable save to disk.
<dt><code>-cmd_log=FILENAME</code>
<dd>write keystroke commands and related information to the
specified file.
<dt><code>-cmd_script=FILENAME</code>
<dd>read keystroke commands from the specified file. You can
use the data written using the <em>-cmd_log</em> option.
Lynx will ignore other information which the
command-logging may have written to the log-file.
<dt><code>-color</code>
<dd>forces color mode on, if available. Default color control sequences
which work for many terminal types are assumed if the terminal
capability description does not specify how to handle color.
Lynx needs to be compiled with the slang library for this flag.
It is equivalent to setting the COLORTERM environment variable.
(If color support is instead provided by a color-capable curses
library like ncurses, Lynx relies completely on the terminal
description to determine whether color mode is possible, and
this flag is not needed and thus unavailable.)
A saved show_color=always setting found in a .lynxrc file at
startup has the same effect. A saved show_color=always found
in .lynxrc on startup is overridden by this flag.
<dt><code>-connect_timeout=N</code>
<dd>Sets the connection timeout, where N is given in seconds.
This is not available under DOS (use the sockdelay
parameter of WATTCP under DOS).
<dt><code>-cookie_file=FILENAME</code>
<dd>specifies a file to use to read cookies.
If none is specified, the default value is ~/.lynx_cookies
for most systems, but ~/cookies for MS-DOS.
<dt><code>-cookie_save_file=FILENAME</code>
<dd>specifies a file to use to store cookies.
If none is specified, the value given by
<code>-cookie_file</code> is used.
<dt><code>-cookies</code>
<dd>toggles handling of Set-Cookie headers.
<dt><code>-core</code>
<dd>toggles forced core dumps on fatal errors. (Unix only)
<dt><code>-crawl</code>
<dd>with <em>-traversal</em>, output each page to a file.<br>
with <em>-dump</em>, format output as with
<em>-traversal</em>, but to stdout.
<dt><code>-curses_pads</code>
<dd>toggles the use of curses "pad" feature which supports
left/right scrolling of the display.
<dt><code>-debug_partial</code>
<dd>separate incremental display stages with MessageSecs delay
<dt><code>-display=DISPLAY</code>
<dd>set the display variable for X rexe-ced programs.
<dt><code>-display_charset=MIMEname</code>
<dd>set the charset for the terminal output.
<dt><code>-dont_wrap_pre</code>
<dd>inhibit wrapping of text in <pre> when -dump'ing and
-crawl'ing, mark wrapped lines in interactive session.
<dt><code>-dump</code>
<dd>dumps the formatted output of the default document
or one specified on the command line to standard out.
This can be used in the following way:<br>
<em>lynx -dump http://www.w3.org/</em>
<dt><code>-editor=EDITOR</code>
<dd>enable external editing using the specified
<em>EDITOR</em>. (vi, ed, emacs, etc.)
<dt><code>-emacskeys</code>
<dd>enable emacs-like key movement.
<dt><code>-enable_scrollback</code>
<dd>toggles behavior compatible with the scrollback keys in
some communications software (may be incompatible with
some curses packages).
<dt><code>-error_file=FILENAME</code>
<dd>the status code from the HTTP request is placed in this
file.
<dt><code>-exec</code>
<dd>enable local program execution (normally not configured).
<dt><code>-fileversions</code>
<dd>include all versions of files in local VMS directory
listings.
<dt><code>-force_empty_hrefless_a</code>
<dd>force HREF-less 'A' elements to be empty (close them as soon as they are seen).
<dt><code>-force_html</code>
<dd>forces the first document to be interpreted as HTML.
<dt><code>-force_secure</code>
<dd>toggles forcing of the secure flag for SSL cookies.
<dt><code>-forms_options</code>
<dd>toggles whether the Options Menu is key-based or form-based.
<dt><code>-from</code>
<dd>toggles transmissions of From headers to HTTP or HTTPS
servers.
<dt><code>-ftp</code>
<dd>disable ftp access.
<dt><code>-get_data</code>
<dd>properly formatted data for a get form are read in from
stdin and passed to the form. Input is terminated by a
line that starts with '---'.
<dt><code>-head</code>
<dd>send a HEAD request for the mime headers.
<dt><code>-help</code>
<dd>print this Lynx command syntax usage message.
<dt><code>-hiddenlinks=<em>option</em></code>
<dd>control the display of hidden links. Option values are:
<dl>
<dt><code>merge</code>
<dd>hidden links show up as bracketed numbers and are
numbered together with other links in the sequence of
their occurrence in the document.
<dt><code>listonly</code>
<dd>hidden links are shown only on <em>L</em>ist screens and
listings generated by <code>-dump</code> or from the
<em>P</em>rint menu, but appear separately at the end of
those lists. This is the default behavior.
<dt><code>ignore</code>
<dd>hidden links do not appear even in listings.
</dl>
<dt><code>-historical</code>
<dd>toggles use of '>' or '-->' as a terminator for
comments.
<dt><code>-homepage=URL</code>
<dd>set homepage separate from start page. Will be used
if a fetch of the start page fails or if it is a
script which does not return a document, and as the
<code>URL</code> for the '<em>m</em>'ain menu command.
<dt><code>-image_links</code>
<dd>toggles inclusion of links for all images.
<dt><code>-ismap</code>
<dd>toggles inclusion of ISMAP links when client-side
MAPs are present.
<dt><code>-index=URL</code>
<dd>set the default index file to the specified <em>URL</em>
<dt><code>-justify</code>
<dd>do justification of text.
<dt><code>-link=NUMBER</code>
<dd>starting count for lnk#.dat files produced by
<em>-crawl</em>.
<dt><code>-localhost</code>
<dd>disable URLs that point to remote hosts.
<dt><code>-locexec</code>
<dd>enable local program execution from local files only
(if lynx was compiled with local execution enabled).
<dt><code>-lss=FILENAME</code>
<dd>specify filename containing color-style information.
The default is lynx.lss.
<dt><code>-mime_header</code>
<dd>include mime headers and force source dump.
<dt><code>-minimal</code>
<dd>toggles minimal versus valid comment parsing. When
minimal, any '-->' serves as a terminator for a
comment element. When valid, pairs of '--' are
treated as delimiters for series of comments within
the overall comment element. If historical is set,
that overrides minimal or valid comment parsing.
<dt><code>-newschunksize=NUMBER</code>
<dd>number of articles in chunked news listings.
<dt><code>-newsmaxchunk=NUMBER</code>
<dd>maximum news articles in listings before chunking.
<dt><code>-nobold</code>
<dd>disable bold video-attribute.
<dt><code>-nobrowse</code>
<dd>disable directory browsing.
<dt><code>-nocc</code>
<dd>disable Cc: prompts for self copies of mailings. Note
that this does not disable any CCs which are incorporated
within a mailto URL or form ACTION.
<dt><code>-nocolor</code>
<dd>force color mode off, overriding terminal capabilities and any
<em>-color</em> flags, <em>COLORTERM</em> variable, and saved .lynxrc settings.
<dt><code>-noexec</code>
<dd>disable local program execution. (DEFAULT)
<dt><code>-nofilereferer</code>
<dd>disable transmissions of Referer headers for file URLs.
<dt><code>-nolist</code>
<dd>disable the link list feature in dumps.
<dt><code>-nolog</code>
<dd>disable mailing of error messages to document owners.
<dt><code>-nonrestarting_sigwinch</code>
<dd>make window size change handler non-restarting.
This flag is not available on all systems,
Lynx needs to be compiled with HAVE_SIGACTION defined.
If available, this flag <em>may</em> cause Lynx to react
more immediately to window changes when run within an
xterm.
<dt><code>-nopause</code>
<dd>disable forced pauses for statusline messages.
<dt><code>-noprint</code>
<dd>disable most print functions.
<dt><code>-noredir</code>
<dd>don't follow URL redirections
<dt><code>-noreferer</code>
<dd>disable transmissions of Referer headers.
<dt><code>-noreverse</code>
<dd>disable reverse video-attribute.
<dt><code>-nosocks</code>
<dd>disable SOCKS proxy usage by a SOCKSified Lynx.
<dt><code>-nostatus</code>
<dd>disable the retrieval status messages.
<dt><code>-nounderline</code>
<dd>disable underline video-attribute.
<dt><code>-number_fields</code>
<dd>force numbering of links as well as form input fields.
<dt><code>-number_links</code>
<dd>force numbering of links.
<dt><code>-partial</code>
<dd>toggles displaying of partial pages while loading.
<dt><code>-partial_thres=<em>NUMBER</em></code>
<dd>number of lines to render before repainting display
with partial-display logic.
<dt><code>-pauth=ID:PW</code>
<dd>set authorization ID and password for a protected proxy
server at startup. Be sure to protect any script files
which use this switch.
<dt><code>-popup</code>
<dd>toggles handling of single-choice SELECT options via
popup windows or as lists of radio buttons. The default
configuration can be changed in userdefs.h or
<A HREF="#lynx.cfg">lynx.cfg</A>.
It also can be set and saved via the 'o'ptions menu.
The command line switch toggles the default.
<dt><code>-post_data</code>
<dd>properly formatted data for a post form are read in from
stdin and passed to the form. Input is terminated by a
line that starts with '---'.
<dt><code>-preparsed</code>
<dd>show source preparsed and reformatted when used with
-source or in source view ('<em>\</em>').
May be useful for debugging of broken HTML markup
to visualize the difference between SortaSGML and TagSoup
<A HREF="keystrokes/option_help.html#tagsoup">recovery modes</A>,
switched by '<em>^V</em>'.
<dt><code>-prettysrc</code>
<dd>do syntax highlighting and hyperlink handling in source
view.
<dt><code>-print</code>
<dd>enable print functions. (default)
<dt><code>-pseudo_inlines</code>
<dd>toggles pseudo-ALTs for inlines with no ALT string.
<dt><code>-raw</code>
<dd>toggles default setting of 8-bit character translations
or CJK mode for the startup character set.
<dt><code>-realm</code>
<dd>restricts access to URLs in the starting realm.
<dt><code>-reload</code>
<dd>flushes the cache on a proxy server
(only the first document affected).
<dt><code>-restrictions</code>
<dd>allows a list of services to be disabled
selectively and takes the following form:
<dd><em>lynx -restrictions=[option][,option][,option]...</em>
<dd>The list of recognized options is printed if none
are specified.
<dl>
<dt>?
<dd>if used alone, lists restrictions in effect.
<dt>all
<dd>restricts all options listed below.
<dt>bookmark
<dd>disallow changing the location of the bookmark
file.
<dt>bookmark_exec
<dd>disallow execution links via the bookmark file.
<dt>change_exec_perms
<dd>disallow changing the eXecute permission on
files (but still allow it for directories) when
local file management is enabled.
<dt>chdir
<dd>disallow command which changes Lynx's working
directory.
<dt>default
<dd>same as command line option <em>-anonymous</em>.
Set default restrictions for anonymous users.
All specific services listed are always
restricted, except for:
inside_telnet, outside_telnet, inside_ftp,
outside_ftp, inside_rlogin, outside_rlogin,
inside_news, outside_news, telnet_port, jump,
mail, print, exec, and goto. The settings for these,
as well as additional goto restrictions for
specific URL schemes that are also applied,
are derived from definitions within userdefs.h.<br>
Note that this is the only option value that
may have the effect of <em>removing</em> some
restrictions, if they have been set by other
options, namely for those services that
<em>are</em> allowed by default according to
userdefs.h. However, if the separate command
line option form (<em>-anonymous</em>) is used,
Lynx takes care to set the default restrictions
before handling additional <em>-restrictions=</em>
options (even if they precede the
<em>anonymous</em> option), so that this cannot
happen.
<dt>dired_support
<dd>disallow local file management.
<dt>disk_save
<dd>disallow saving to disk in the download and print
menus.
<dt>dotfiles
<dd>disallow access to, or creation of, hidden (dot)
files.
<dt>download
<dd>disallow some downloaders in the download menu.
This does <em>not</em> imply the disk_save
restriction. It also does not disable the
DOWNLOAD command, and does not prevent
"Download or Cancel" offers when a MIME type
cannot otherwise be handled. Those are only
disabled if additionally the disk_save
restriction is in effect <em>and</em>
no download methods are defined in a <A
HREF="#lynx.cfg">Lynx configuration
file</A> that are marked as "always ENABLED"
(or, alternatively, if the -validate switch
is used).
<dt>editor
<dd>disallow external editing.
<dt>exec
<dd>disable execution scripts.
<dt>exec_frozen
<dd>disallow the user from changing the local
execution option.
<dt>externals
<dd>disallow some "EXTERNAL" configuration lines,
if support for passing URLs to external
applications (with the EXTERN_LINK or EXTERN_PAGE
command) is compiled in.
<dt>file_url
<dd>disallow using G)oto, served links or bookmarks
for file: URLs.
<dt>goto
<dd>disable the '<em>g</em>' (goto) command.
<dt>inside_ftp
<dd>disallow ftps for people coming from inside your
domain.
<dt>inside_news
<dd>disallow USENET news reading and posting for
people coming from inside you domain. This
applies to "news", "nntp", "newspost", and
"newsreply" URLs, but not to "snews", "snewspost",
or "snewsreply" in case they are supported.
<dt>inside_rlogin
<dd>disallow rlogins for people coming from inside
your domain.
<dt>inside_telnet
<dd>disallow telnets for people coming from inside
your domain.
<dt>jump
<dd>disable the '<em>j</em>' (jump) command.
<dt>lynxcgi
<dd>disallow execution of Lynx CGI URLs.
<dt>mail
<dd>disallow mailing feature.
<dt>multibook
<dd>disallow multiple bookmarks.
<dt>news_post
<dd>disallow USENET News posting,
<dt>options_save
<dd>disallow saving options in .lynxrc.
<dt>outside_ftp
<dd>disallow ftps for people coming from outside your
domain.
<dt>outside_news
<dd>disallow USENET news reading and posting for
people coming from outside you domain. This
applies to "news", "nntp", "newspost", and
"newsreply" URLs, but not to "snews", "snewspost",
or "snewsreply" in case they are supported.
<dt>outside_rlogin
<dd>disallow rlogins for people coming from outside
your domain.
<dt>outside_telnet
<dd>disallow telnets for people coming from
outside your domain.
<dt>print
<dd>disallow most print options.
<dt>shell
<dd>disallow shell escapes.
<dt>suspend
<dd>disallow <em>Control-Z</em> suspends with escape
to shell on Unix.
<dt>telnet_port
<dd>disallow specifying a port in telnet G)oto's.
<dt>useragent
<dd>disallow modifications of the User-Agent header.
</dl>
<dt><code>-resubmit_posts</code>
<dd>toggles forced resubmissions (no-cache) of forms with
method POST when the documents they returned are sought
with the PREV_DOC (<em>left-arrow</em>) command or from
the <em>History Page</em>.
<dt><code>-rlogin</code>
<dd>disable recognition of rlogin commands.
<dt><code>-scrollbar</code>
<dd>toggles showing scrollbar.
<dt><code>-scrollbar_arrow</code>
<dd>toggles showing arrows at ends of the scrollbar.
<dt><code>-selective</code>
<dd>require .www_browsable files to browse directories.
<dt><code>-short_url</code>
<dd>show very long URLs in the status line with "..." to
represent the portion which cannot be displayed. The
beginning and end of the URL are displayed, rather than
suppressing the end.
<dt><code>-show_cursor </code>
<dd>If enabled the cursor will not be hidden in the right hand
corner but will instead be positioned at the start of the
currently selected link. Show cursor is the default for
systems without FANCY_CURSES capabilities. The default
configuration can be changed in userdefs.h or
<A HREF="#lynx.cfg">lynx.cfg</A>.
It also can be set and saved via the 'o'ptions menu.
The command line switch toggles the default.
<dt><code>-show_rate</code>
<dd>If enabled the transfer rate is shown in bytes/second. If
disabled, no transfer rate is shown. Use lynx.cfg or the
options menu to select KB/second and/or ETA.
<dt><code>-soft_dquotes</code>
<dd>toggles emulation of the old Netscape and Mosaic bug which
treated '<em>></em>' as a co-terminator for
double-quotes and tags.
<dt><code>-source</code>
<dd>works the same as dump but outputs HTML source instead of
formatted text.
<dt><code>-stack_dump</code>
<dd>disable SIGINT cleanup handler.
<dt><code>-startfile_ok</code>
<dd>allow non-http startfile and homepage with
<em>-validate</em>.
<dt><code>-stdin</code>
<dd>read the startfile from standard input
(UNIX only).
<dt><code>-syslog=<em>text</em>
<dd>information for syslog call.
<dt><code>-tagsoup</code>
<dd>initialize DTD with "TagSoup" tables,
<A HREF="keystrokes/option_help.html#tagsoup">more details</A>.
<dt><code>-telnet</code>
<dd>disable recognition of telnet commands.
<dt><code>-term=TERM</code>
<dd>tell Lynx what terminal type to assume its talking to.
(This may be useful for remote execution, when, for
example, Lynx connects to a remote TCP/IP port that starts
a script that, in turn, starts another Lynx process.)
<dt><code>-timeout=<em>N</em></code>
<dd>For win32, sets the network read-timeout, where N is given in seconds.
<dt><code>-tlog</code>
<dd>toggles use of a <em>Lynx Trace Log</em> for the
session. The log is named <em>Lynx.trace</em> and is
created in the home directory when Lynx trace mode is
turned on via the <em>-trace</em> command line switch
(see below), or via the TRACE_TOGGLE (<em>Control-T</em>)
keystroke command. Once a log is started for the session,
all trace and other stderr messages are written to the
log. The contents of the log can be examined during
the session via the TRACE_LOG (normally, '<em>;</em>')
keystroke command. If use of a Lynx Trace Log
is turned off, any trace output will go to the standard
error stream.
<dt><code>-tna</code>
<dd>turns on <A HREF="#tna">"Textfields Need Activation"</A>
mode.
<dt><code>-trace</code>
<dd>turns on Lynx trace mode. If a Lynx Trace Log
(<em>Lynx.trace</em> in the home directory) has
been started for the current session, all trace
messages are written to that log, and
can be examined during the session via the TRACE_LOG
(normally, '<em>;</em>') command. If no Trace Log
file is in use, trace messages go to stderr.
<dt><code>-trace_mask=<em>value</em></code>
<dd>turn on optional traces, which may result in very large trace files.
Logically OR the values to combine options:
<dl>
<dt>1
<dd>SGML character parsing states
<dt>2
<dd>color-style
<dt>4
<dd>TRST (table layout)
<dl>
<dt><code>-traversal</code>
<dd>traverse all http links derived from startfile. When
used with <em>-crawl</em>, each link that begins with the
same string as startfile is output to a file, intended for
indexing. See CRAWL.announce for more information.
<dt><code>-trim_input_fields</code>
<dd>trim input text/textarea fields in forms.
<dt><code>-underscore</code>
<dd>toggles use of _underline_ format in dumps.
<dt><code>-use_mouse</code>
<dd>turn on mouse support, if available.
<dt><code>-useragent=STRING</code>
<dd>set different Lynx User-Agent header. Lynx produces a
warning on startup if the STRING does not contain "Lynx"
or "L_y_n_x", see the <A HREF="#note_ua">note</A> in the
Options Menu section for rationale.
<dt><code>-validate</code>
<dd>accept only http URLs (meant for validation).
<dd>This flag implies security restrictions
generally more severe than <em>-anonymous</em>:
restriction options as for
<em>-restrictions=all</em>, with the notable
exception that goto remains enabled for
http and https URLs; in addition,
the PRINT and DOWNLOAD commands are completely
disabled, and use of a Trace Log file is
forced off.
<dd>Any relaxing of restriction that might be implied
by an also present (or implied) <em>-anonymous</em>
flag is overridden, the only way to possibly relax
<em>some</em> of the restrictions to the level
applicable for "anononymous" accounts is with an
explicit <em>-restrictions=default</em>.
<dt><code>-verbose</code>
<dd>toggles [LINK], [IMAGE] and [INLINE] comments
with filenames of these images.
<dt><code>-version</code>
<dd>print version information.
<dt><code>-vikeys</code>
<dd>enable vi-like key movement.
<dt><code>-wdebug</code>
<dd>enable Waterloo tcp/ip packet debug (print to watt
debugfile). This applies only to DOS versions compiled
with WATTCP or WATT-32.
<dt><code>-width=NUMBER</code>
<dd>number of columns for formatting of dumps, default is 80.
<dt><code>-with_backspaces</code>
<dd>emit backspaces in output if -dumping or -crawling (like
<code>man</code> does).
</dl>
</dl>
<p>No options are required, nor is a startfile argument required.
White space can be used in place of equal sign separators ('<em>=</em>')
appearing in the option list above. It can not be used in place of the equal
signs in forms like "-option=on" and "-option=off" for simple switches and
toggles, for which "-option" alone (without a value) is valid.
[<A HREF="#ToC-Invoking">ToC</A>]
<h2 ID="Environments"><A NAME="Environment"><em>Environment variables used by Lynx</em></A></h2>
Lynx uses certain environment variables and sets a few of them.
Please visit a <A HREF="keystrokes/environments.html">separate page</A>
for this rather technical information.
[<A HREF="#ToC-Environment">ToC</A>]
<h2 ID="lynx.cfg"><A NAME="lynx.cfg"><em>Main configuration file lynx.cfg</em></A></h2>
Lynx has several levels of customization:
from the Options Menu (accessible on-line,
and possibly stored in your local .lynxrc file),
via command-line switches
on startup (mainly for batch processing).
The most important and numerous default settings are stored
in the Lynx configuration file <em>lynx.cfg</em>.
<p>If you are on a UNIX system you should have
appropriate permissions to make changes there or ask your
system administrator to modify lynx.cfg for your needs.
This file provides default settings for all accounts on your system.
It may be copied to your shell account and included with -cfg command line
switch or via an environment variable LYNX_CFG (if you have shell access).
Starting with version 2.8.1 Lynx has an include facility so you can
load the system-wide configuration file and easily add one or more settings
from your local add-on configuration file. It is really cool to read
lynx.cfg with its comments for hundreds of options,
most of them commented out because they are built-in defaults.
You may visit an index of options:
<a href="http://www.hippo.ru/%7Ehvv/lynxcfg_toc.html">by category</a> or
<a href="http://www.hippo.ru/%7Ehvv/lynxcfg_toc.html#alphatoc">by alphabet</a>.
<p>To view your current configuration derived from lynx.cfg and any
included configuration files, press <em>'g'</em> and type in
'<em>lynxcfg:</em>'. If you are using the forms-based <em>Options
Menu</em>, you may press <em>'o'</em> for the Options Menu and follow
the '<em>Check your lynx.cfg</em>' link near the bottom.
<p>However, for those who have a restricted account many Lynx features
may be disabled by the system administrator, you probably will not see
your lynx.cfg.
[<A HREF="#ToC-lynx.cfg">ToC</A>]
<h2 ID="Hist"><A NAME="Hist"><em>Lynx development history</em></A></h2>
Lynx grew out of efforts to build a campus-wide information system
at The University of Kansas. The earliest versions of Lynx provided a
user-friendly, distributed hypertext interface for users connected to
multiuser (Unix and VMS) systems via curses-oriented display devices.
A custom hypertext format was developed to support hypertext links to
local files and files on remote Gopher servers. Using Gopher servers
for distributed file service allowed information providers to publish
information from a wide variety of platforms (including Unix, VMS,
VM/CMS and Macintosh). In addition, Lynx became the most user-friendly
Gopher client, although that was only an ancillary capability.
<p>This distributed approach let providers retain complete control
over their information, but it made communication between users
and providers somewhat more difficult. Following the lead of Neal
Erdwien, of Kansas State University, the Lynx hypertext format was
extended to include links for including ownership information with
each file. This information made it possible for users running
Lynx clients to send comments and suggestions via e-mail to the
providers.
<p>This early version of Lynx was also augmented to support hypertext
links to programs running on remote systems. It included the ability
to open a Telnet connection, as well as the ability to start programs
via rexec, inetd, or by direct socket connects. These capabilities were
included to allow users to access databases or custom program interfaces.
<p>A subsequent version of Lynx incorporated the World Wide Web libraries
to allow access to the full list of WWW servers, along with the option to
build hypertext documents in HTML, rather than the native Lynx format.
HTML has become far more widely used, and the native format has been phased
out. With the addition of the WWW libraries, Lynx became a fully-featured
WWW client, limited only by the display capabilities offered in the curses
environment.
<p>Lynx was designed by Lou Montulli, Charles Rezac and Michael Grobe
of Academic Computing Services at The University of Kansas. Lynx was
implemented by Lou Montulli and maintained by Garrett Arch Blythe and
Craig Lavender.
<p><em>Foteos Macrides</em> and members of the
<a href="lynx-dev.html">lynx-dev</a>
list have developed and supported Lynx since release of v2.3 in May 1994.<br>
The Lynx2-3FM code set was released as v2.4 in June 1995.<br>
The Lynx2-4FM code set was released as v2.5 in May 1996.<br>
The Lynx2-5FM code set was released as v2.6 in September 1996.<br>
The Lynx2-6FM code set was released as v2.7 in February 1997.<br>
The v2-7FM code set was released as v2.7.1 in April 1997.<br>
The v2-7-1FM code set was released as v2.7.2 in January 1998.<br>
The 2.7.1 development set was released as v2.8 in March 1998.<br>
The 2.8 development set was released as v2.8.1 in October 1998.<br>
The 2.8.1 development set was released as v2.8.2 in June 1999.<br>
The 2.8.2 development set was released as v2.8.3 in April 2000.<br>
The 2.8.3 development set was released as v2.8.4 in July 2001.<br>
<p>Since early 1997, the Lynx code has expanded into autoconfigure and
PC versions. The branching of the Lynx source base from a single
source into two sources (FM/Foteos Macrides and ac/autoconfigure)
should be considered a healthy synergism among groups of computer
professionals acting in their spare time out of a common goal.
<p>Lynx has incorporated code from a variety of sources along the
way. The earliest versions of Lynx included code from Earl Fogel
of Computing Services at the University of Saskatchewan, who
implemented HYPERREZ in the Unix environment. Those versions also
incorporated libraries from the Unix Gopher clients developed at
the University of Minnesota, and the later versions of Lynx rely
on the WWW client library code developed by Tim Berners-Lee (and
others) and the WWW community.
<p>Contributors have generally been acknowledged in the CHANGES
file. Earlier CHANGES file can be found in the docs/ subdirectory
of this distribution.
<p>Information on obtaining the most current version of Lynx is available
at <a href="http://lynx.isc.org/current/index.html">the current distribution page</a>.
<p>[<A HREF="#TOC">ToC</A>]
</body>
</html>