emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/gnuplot e679a59 002/184: import everything


From: ELPA Syncer
Subject: [nongnu] elpa/gnuplot e679a59 002/184: import everything
Date: Sun, 29 Aug 2021 11:03:03 -0400 (EDT)

branch: elpa/gnuplot
commit e679a59ccaeb0ddc8783df1dc7c9fa92f8348407
Author: Bruce Ravel <bravel@bnl.gov>
Commit: Bruce Ravel <bravel@bnl.gov>

    import everything
---
 COPYING           |  340 +++
 INSTALL           |   45 +
 Makefile.dst      |   83 +
 Makefile.in       |  151 ++
 README            |  127 +
 aclocal.m4        |   46 +
 configure         | 1002 +++++++
 configure.in      |    7 +
 dot.el            |    7 +
 dotemacs          |   21 +
 gnuplot-gui.el    | 1750 ++++++++++++
 gnuplot.el        | 2576 ++++++++++++++++++
 gnuplot.info      | 7710 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 gpelcard.tex      |  491 ++++
 info-look.20.2.el |  527 ++++
 info-look.20.3.el |  758 ++++++
 install-sh        |  251 ++
 mkinstalldirs     |   40 +
 18 files changed, 15932 insertions(+)

diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..eeb586b
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..adbc4ba
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,45 @@
+       
+To install gnuplot-mode:
+       
+1. At the command line:
+
+      > configure
+      > make
+
+   If you use XEmacs, do "make EMACS=xemacs" (or change the EMACS
+   variable to "xemacs" in the Makefile, the run "make").
+
+   If "configure" doesn't work for you, the file "Makefile.dst" can be
+   used.  In that case do, "make -f Makefile.dst".
+
+2. Move the .elc files to a place where emacs can find them, for
+   example /usr/share/emacs/site-lisp or your personal emacs
+   directory.
+
+3. Insert the contents of the `dotemacs' file into your .emacs file
+   or system start-up file to enable gnuplot mode.
+
+4. The function `gnuplot-info-lookup-symbol' looks at the Gnuplot
+   info file that comes with this package or that can be made from
+   the Gnuplot distribution.  For that function to work, the file
+   gnuplot.info must be placed somewhere where info can find it, for
+   example /usr/info.  A line like this in your .emacs allows you to
+   put gnuplot.info any place convenient:
+     (add-to-list 'Info-default-directory-list "/path/to/file")
+
+
+
+The "configure; make" sequence may not work on all systems,
+particularly Win32 systems.  The long-winded way of making the .elc
+gpelcard.ps files is to edit each of the .el files with emacs and do
+`M-x byte-compile-file'.  Then "latex gpelcard.tex" and
+"dvips gpelcard.dvi".
+
+You will need to follow the instructions contained in the file
+Win9x/INSTALL.Win9x to get gnuplot working with Emacs on a Windows 95
+or 98 machine.
+
+
+
+Problems?  Contact gnuplot-mode's author Bruce Ravel
+<ravel@phys.washington.edu> 
diff --git a/Makefile.dst b/Makefile.dst
new file mode 100644
index 0000000..c9d8c83
--- /dev/null
+++ b/Makefile.dst
@@ -0,0 +1,83 @@
+
+## set this variable to "xemacs" if you use XEmacs
+EMACS = emacs
+
+## You will probably not need to change anything below this line
+
+BYTE = $(EMACS) -batch -q -no-site-file -l dot.el -f batch-byte-compile
+
+.PHONY:        all default clean
+
+default:
+       $(MAKE) info-look.elc gnuplot.elc gnuplot-gui.elc
+
+gnuplot.elc:   gnuplot.el
+       $(BYTE) gnuplot.el
+
+gnuplot-gui.elc:       gnuplot-gui.el
+       $(BYTE) gnuplot-gui.el
+
+## There are many possibilities for info-look:
+##
+##     EMACS version           use
+##  -----------------------------------------
+##   Emacs or XEmacs 19    info-look.20.2.el
+##   Emacs 20.2 or less    info-look.20.2.el
+##   Emacs 20.3            nothing
+##   XEmacs 20+            info-look.20.3.el
+##
+## want to use my modified version even if 20.2 is installed because a
+## bug is fixed
+##
+## the first 6 lines attempt to ascertain the version number of
+## $(EMACS), then multiply by 100 to convert it to an integer for the
+## sake of the integer comparisons in the following lines.  Is this a
+## hassle, or what?!
+##
+MESSAGE = compiling info-look for $(EMACS) $$vnum
+info-look.elc: info-look.20.2.el info-look.20.3.el
+       @if [ $(EMACS) = "emacs" ]; \
+         then vnum=`emacs  --version | grep 'Emacs [12]' | awk '{print $$3}'`; 
\
+          else vnum=`xemacs --version | grep 'Emacs [12]' | awk '{print 
$$2}'`; \
+        fi; \
+        vn=`echo "$$vnum" | awk 'BEGIN{FS="."}{print $$1 "." $$2}'`; \
+       version=`echo "$$vn" | awk '{print 100*$$1}'`; \
+       if [ $(EMACS) = "emacs" -a $$version -ge 2030 ]; \
+          then echo "no need to compile info-look for $(EMACS) $$vnum"; \
+         else echo "$(MESSAGE)"; \
+        fi; \
+       if   [ $(EMACS) = "emacs"  -a $$version -lt 2030 ]; \
+         then cp -v info-look.20.2.el info-look.el; \
+       elif [ $(EMACS) = "xemacs" -a $$version -ge 2000 ]; \
+         then cp -v info-look.20.3.el info-look.el; \
+       elif [ $(EMACS) = "xemacs" -a $$version -lt 2000 ]; \
+         then cp -v info-look.20.2.el info-look.el; \
+        fi ;\
+       if [ ! \( $(EMACS) = "emacs" -a $$version -ge 2030 \) ]; \
+         then $(BYTE) info-look.el; fi;
+
+gpelcard.ps:   gpelcard.dvi
+       dvips -o gpelcard.ps gpelcard.dvi
+
+gpelcard.dvi:  gpelcard.tex
+        latex gpelcard.tex
+
+all:
+       $(MAKE) gnuplot.elc info-look.elc gnuplot-gui.elc gpelcard.ps
+
+clean:
+       rm -f *.elc info-look.el gpelcard.dvi gpelcard.log gpelcard.aux
+
+
+##----------------------------------------------------------------------
+## old stuff:
+
+## from the `all' and `default' targets:
+#  gnuplot-toolbar.elc kw-compl.elc
+
+#kw-compl.elc: kw-compl.el
+#      $(BYTE) kw-compl.el
+
+## only make this for XEmacs
+#gnuplot-toolbar.elc:  gnuplot-toolbar.el
+#      if [ $(EMACS) = "xemacs" ]; then $(BYTE) gnuplot-toolbar.el; fi
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..b7aa28e
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,151 @@
+#
+# Makefile.in for gnuplot-mode
+#
+# Based on original Makefile
+# by Lars Hecking  <lhecking@nmrc.ucc.ie> 1999-02-25
+#
+# Modified to install .el files along with .elc files
+# BR May 17 2002
+
+SHELL = /bin/sh
+
+prefix = @prefix@
+datadir = @datadir@
+lispdir = @lispdir@
+srcdir = @srcdir@
+subdir = lisp
+top_builddir = .
+top_srcdir = @top_srcdir@
+
+@SET_MAKE@
+EMACS = @EMACS@
+MAKEINFO = @MAKEINFO@
+LATEX = latex
+DVIPS = dvips
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+VPATH = @srcdir@
+
+# Command to byte-compile
+BYTEC = $(EMACS) -batch -q -no-site-file -l $(srcdir)/dot.el -f 
batch-byte-compile
+
+ELCS = info-look.elc gnuplot.elc gnuplot-gui.elc
+
+DIST_COMMON = ChangeLog Makefile.dst Makefile.in README aclocal.m4 configure \
+configure.in
+
+EXTRA_DIST = dot.el dotemacs gnuplot-gui.el gnuplot.el gnuplot.el.old \
+gpelcard.tex info-look.20.2.el info-look.20.3.el
+
+DISTFILES = $(DIST_COMMON) $(EXTRA_DIST)
+
+default: $(ELCS)
+
+gnuplot.elc: gnuplot.el
+       test "$(srcdir)" = "$(top_builddir)" || cp $(srcdir)/gnuplot.el .
+       $(BYTEC) gnuplot.el
+
+gnuplot-gui.elc: gnuplot.elc gnuplot-gui.el
+       test "$(srcdir)" = "$(top_builddir)" || cp $(srcdir)/gnuplot-gui.el .
+       $(BYTEC) gnuplot-gui.el
+
+## There are many possibilities for info-look:
+##
+##     EMACS version            use
+##  -----------------------------------------
+##   Emacs or XEmacs 19    info-look.20.2.el
+##   Emacs 20.2 or less    info-look.20.2.el
+##   Emacs 20.3            nothing
+##   XEmacs 20+            info-look.20.3.el
+##
+## want to use my modified version even if 20.2 is installed because a
+## bug is fixed
+##
+## the first 6 lines attempt to ascertain the version number of
+## $(EMACS), then multiply by 100 to convert it to an integer for the
+## sake of the integer comparisons in the following lines.  Is this a
+## hassle, or what?!
+##
+MESSAGE = compiling info-look for $(EMACS) $$vnum
+info-look.elc:  info-look.20.2.el info-look.20.3.el
+       @if [ $(EMACS) = "emacs" ]; \
+         then vnum=`emacs  --version | grep 'Emacs [12]' | awk '{print $$3}'`; 
\
+         else vnum=`xemacs --version | grep 'Emacs [12]' | awk '{print $$2}'`; 
\
+       fi; \
+       vn=`echo "$$vnum" | awk 'BEGIN{FS="."}{print $$1 "." $$2}'`; \
+       version=`echo "$$vn" | awk '{print 100*$$1}'`; \
+       if [ $(EMACS) = "emacs" -a $$version -ge 2030 ]; \
+         then echo "no need to compile info-look for $(EMACS) $$vnum"; \
+         else echo "$(MESSAGE)"; \
+       fi; \
+       if   [ $(EMACS) = "emacs"  -a $$version -lt 2030 ]; \
+         then echo Using info-look.20.2.el; \
+         cp $(srcdir)/info-look.20.2.el info-look.el; \
+       elif [ $(EMACS) = "xemacs" -a $$version -ge 2000 ]; \
+         then echo Using info-look.20.3.el; \
+         cp $(srcdir)/info-look.20.3.el info-look.el; \
+       elif [ $(EMACS) = "xemacs" -a $$version -lt 2000 ]; \
+         then echo Using info-look.20.2.el; \
+         cp $(srcdir)/info-look.20.2.el info-look.el; \
+       fi ;\
+       if [ ! \( $(EMACS) = "emacs" -a $$version -ge 2030 \) ]; \
+         then $(BYTEC) info-look.el; fi;
+
+ps: gpelcard.ps
+
+gpelcard.ps: gpelcard.dvi
+       $(DVIPS) -o gpelcard.ps gpelcard.dvi
+
+gpelcard.dvi: gpelcard.tex
+       $(LATEX) $(srcdir)/gpelcard.tex
+
+all: gnuplot.elc info-look.elc gnuplot-gui.elc
+
+install:
+       mkinstalldirs $(lispdir)
+       @for p in *.el *.elc; do \
+         echo " $(INSTALL_DATA) $$p $(lispdir)/$$p"; \
+         $(INSTALL_DATA) $$p $(lispdir)/$$p; \
+       done
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = lisp
+
+distdir: $(DISTFILES)
+       distdir=`cd $(distdir) && pwd`
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$d/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+.PHONY: tags distdir info-am info dvi-am dvi check check-am \
+installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+clean:
+       -rm -f *.elc info-look.el gpelcard.ps gpelcard.dvi gpelcard.log \
+         gpelcard.aux
+       test "$(srcdir)" = "$(top_builddir)" || rm -f gnuplot.el gnuplot-gui.el
+
+distclean: clean
+       rm -f Makefile config.status config.log config.cache
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/README b/README
new file mode 100644
index 0000000..4292010
--- /dev/null
+++ b/README
@@ -0,0 +1,127 @@
+
+This directory contains files for running Gnuplot from within emacs.
+This package was assembled by Bruce Ravel <ravel@phys.washington.edu>.
+See http://feff.phys.washington.edu/~ravel/gnuplot/ for the latest.
+
+
+                              Contents
+                              ========
+
+README               this file
+INSTALL              thorough installation instructions
+ChangeLog            a log of changes by version number
+gnuplot.el          gnuplot mode for emacs
+gnuplot-gui.el       a GUI for setting command arguments interactively
+info-look.20.2.el    programmer's interface to info files, old version
+info-look.20.3.el    programmer's interface to info files, new version
+dot.el               a short lisp file used by the Makefile
+gnuplot.info        info version of gnuplot 3.6 help
+gpelcard.tex         quick reference card for gnuplot mode (latex)
+gpelcard.ps          
+dotemacs             example .emacs lines for enabling gnuplot mode
+Makefile.in    \            
+Makefile.dst    \    
+aclocal.m4       \     files inherited from the gnuplot distribution
+configure         }    for making gnuplot-mode
+configure.in     /
+install-sh      /
+mkinstalldirs   /
+Win9x/INSTALL.Win9x  Extra installation instructions for Windows 95/98
+Win9x/pgnuplot.c     Program required to run gnuplot from Emacs
+
+Soon gnuplot-mode will be included with the gnuplot 3.7 distribution.
+The installation instructions for the free-standing distribution have
+been modified to be consistent with that.
+
+
+                            Installation
+                            ============
+
+1.  Unpack the gnuplot.tar.gz and cd to the gnuplot directory.  
+
+2.  Type "configure".  If configure doesn't work for you, see note 7
+    below. 
+
+3.  Run "make".  If you use XEmacs, run "make EMACS=xemacs" (or change
+    the EMACS variable to "xemacs" in the Makefile, the run "make").
+
+4.  Move the lisp files to the system site_lisp directory if you are
+    installing as root.  If you are installing as a normal user move
+    the .elc files to a place where emacs, i.e. your personal emacs
+    directory.
+
+5.  Insert the contents of the `dotemacs' file into your .emacs file
+    or into the system's emacs start-up file to enable gnuplot mode.
+
+6.  The function `gnuplot-info-lookup-symbol' looks at the Gnuplot
+    info file that comes with this package or that can be made from
+    the Gnuplot distribution.  For that function to work, the file
+    gnuplot.info must be placed somewhere where info can find it, for
+    example /usr/info.  A line like this in your .emacs allows you to
+    put gnuplot.info any place convenient:
+       (add-to-list 'Info-default-directory-list "/path/to/file")
+
+
+Wouldn't it be //great// if Emacs had some kind of systematized package
+installing facility?  I think so, too!  Oh well....
+
+
+
+                               NOTES
+                               =====
+
+1. gnuplot-mode is designed for use with version 3.7 of gnuplot.  It
+   should work very well with any of the 3.6 beta versions.  Only some
+   of the specialized features will not work with version 3.5 -- the
+   GUI interface to setting command arguments is an example.
+
+2. To use gnuplot-mode with Emacs on Windows 95 or 98 see the
+   instructions in the directory Win9x.
+   
+3. The installation materials used by gnuplot-mode come from the
+   gnuplot distribution.
+
+4. If "configure" doesn't work for you, the file "Makefile.dst" can be
+   used.  In that case do, "make -f Makefile.dst" and carry on from
+   there. 
+
+5. If you do not have the custom library installed, you will get
+   several harmless warnings when compiling gnuplot.el.  Most of
+   gnuplot-mode will work even without the custom library installed.
+
+6. The file info-look.el provides the on-line help functionality.
+   Without it, things like on-line help and keyword completion will
+   not work.  Using a tool that is a standard part of Emacs is a good
+   idea, but this one gets complicated.  This file became part of
+   Emacs with version 20.  It changed between 20.2 and 20.3.  And it
+   does not come with XEmacs.  What's more, the version from 20.2 has
+   a bug and the newer version does not work with Emacs 19.  So, this
+   distribution comes with two versions of info-look.el, the version
+   from Emacs 20.2 patched to work correctly and the version from
+   Emacs 20.3.  Here's what happens when you run make:
+
+   a.  If you use Emacs 19 or XEmacs 19, then the Makefile will
+       compile the 20.2 version.
+   b.  If you use Emacs 20.2 or lower, the Makefile will compile the
+       20.2 version.
+   c.  If you use XEmacs 20 or higher, the Makefile will compile the
+       20.3 version.
+   d.  If you use Emacs 20.3 or higher, the Makefile won't compile any
+       version.
+
+7. The gnuplot-mode distribution comes with the version of the gnuplot
+   info file that gets made by gnuplot 3.7.  Use it rather than the
+   old one.  If you really must use the older info file, see the
+   document string for the variable `gnuplot-info-hook'.  If you
+   already have the info file installed on your computer, you will not
+   need the one that comes with gnuplot-mode.
+
+8. The interactive graphical graphical interface to setting command
+   arguments contained in gnuplot-gui.el is experimental.  It is
+   incomplete and may make mistakes.  Hopefully, you will find it
+   useful.  It *requires* that you are using a version of emacs with
+   the widget library installed or that you have installed it
+   yourself.  Version numbers in the 20's of Emacs and XEmacs ship
+   with the widget library.  For version numbers in the 19's, it can
+   be obtained at http://www.dina.kvl.dk/~abraham/custom/
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..e01e925
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,46 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+
+# serial 1
+
+AC_DEFUN(AM_PATH_LISPDIR,
+ [# If set to t, that means we are running in a shell under Emacs.
+  # If you have an Emacs named "t", then use the full path.
+  test "$EMACS" = t && EMACS=
+  AC_PATH_PROGS(EMACS, emacs xemacs, no)
+  if test $EMACS != "no"; then
+    AC_MSG_CHECKING([where .elc files should go])
+    dnl Set default value
+    lispdir="\$(datadir)/emacs/site-lisp"
+    emacs_flavor=`echo "$EMACS" | sed -e 's,^.*/,,'`
+    if test "x$prefix" = "xNONE"; then
+      if test -d $ac_default_prefix/share/$emacs_flavor/site-lisp; then
+       lispdir="\$(prefix)/share/$emacs_flavor/site-lisp"
+      else
+       if test -d $ac_default_prefix/lib/$emacs_flavor/site-lisp; then
+         lispdir="\$(prefix)/lib/$emacs_flavor/site-lisp"
+       fi
+      fi
+    else
+      if test -d $prefix/share/$emacs_flavor/site-lisp; then
+       lispdir="\$(prefix)/share/$emacs_flavor/site-lisp"
+      else
+       if test -d $prefix/lib/$emacs_flavor/site-lisp; then
+         lispdir="\$(prefix)/lib/$emacs_flavor/site-lisp"
+       fi
+      fi
+    fi
+    AC_MSG_RESULT($lispdir)
+  fi
+  AC_SUBST(lispdir)])
+
diff --git a/configure b/configure
new file mode 100755
index 0000000..53076cf
--- /dev/null
+++ b/configure
@@ -0,0 +1,1002 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 
1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 
1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.13"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 
1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 
1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show 
usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target 
at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 
's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 
2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=dot.el
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; 
exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site 
$ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS 
conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:526: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; 
then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftestmake <<\EOF
+all:
+       @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  SET_MAKE=
+else
+  echo "$ac_t""no" 1>&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir 
$srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:583: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    
/|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+# If set to t, that means we are running in a shell under Emacs.
+  # If you have an Emacs named "t", then use the full path.
+  test "$EMACS" = t && EMACS=
+  for ac_prog in emacs xemacs
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:643: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_EMACS'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$EMACS" in
+  /*)
+  ac_cv_path_EMACS="$EMACS" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_EMACS="$EMACS" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_EMACS="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+fi
+EMACS="$ac_cv_path_EMACS"
+if test -n "$EMACS"; then
+  echo "$ac_t""$EMACS" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+test -n "$EMACS" && break
+done
+test -n "$EMACS" || EMACS="no"
+
+  if test $EMACS != "no"; then
+    echo $ac_n "checking where .elc files should go""... $ac_c" 1>&6
+echo "configure:681: checking where .elc files should go" >&5
+        lispdir="\$(datadir)/emacs/site-lisp"
+    emacs_flavor=`echo "$EMACS" | sed -e 's,^.*/,,'`
+    if test "x$prefix" = "xNONE"; then
+      if test -d $ac_default_prefix/share/$emacs_flavor/site-lisp; then
+       lispdir="\$(prefix)/share/$emacs_flavor/site-lisp"
+      else
+       if test -d $ac_default_prefix/lib/$emacs_flavor/site-lisp; then
+         lispdir="\$(prefix)/lib/$emacs_flavor/site-lisp"
+       fi
+      fi
+    else
+      if test -d $prefix/share/$emacs_flavor/site-lisp; then
+       lispdir="\$(prefix)/share/$emacs_flavor/site-lisp"
+      else
+       if test -d $prefix/lib/$emacs_flavor/site-lisp; then
+         lispdir="\$(prefix)/lib/$emacs_flavor/site-lisp"
+       fi
+      fi
+    fi
+    echo "$ac_t""$lispdir" 1>&6
+  fi
+  
+EMACS=`basename $EMACS`
+# Extract the first word of "makeinfo", so it can be a program name with args.
+set dummy makeinfo; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:708: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_MAKEINFO'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$MAKEINFO" in
+  /*)
+  ac_cv_path_MAKEINFO="$MAKEINFO" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_MAKEINFO="$MAKEINFO" # Let the user override the test with a dos 
path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_MAKEINFO="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_MAKEINFO" && ac_cv_path_MAKEINFO="no"
+  ;;
+esac
+fi
+MAKEINFO="$ac_cv_path_MAKEINFO"
+if test -n "$MAKEINFO"; then
+  echo "$ac_t""$MAKEINFO" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 
2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[    `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
+
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create 
--no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create 
--no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@EMACS@%$EMACS%g
+s%@lispdir@%$lispdir%g
+s%@MAKEINFO@%$MAKEINFO%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 
's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% 
$ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..20d465d
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,7 @@
+AC_INIT(dot.el)
+AC_SET_MAKE
+AC_PROG_INSTALL
+AM_PATH_LISPDIR
+EMACS=`basename $EMACS`
+AC_PATH_PROG(MAKEINFO, makeinfo, no)
+AC_OUTPUT(Makefile)
diff --git a/dot.el b/dot.el
new file mode 100644
index 0000000..3ecc1c9
--- /dev/null
+++ b/dot.el
@@ -0,0 +1,7 @@
+;; These are some lines to help compilation of gnuplot-mode proceed
+;; with fewer warning messages
+(setq load-path             (append (list ".") load-path)
+      byte-compile-verbose  nil
+      byte-compile-warnings nil)
+(require 'font-lock)
+(defun hilit-repaint-command (foo))
diff --git a/dotemacs b/dotemacs
new file mode 100644
index 0000000..6107f55
--- /dev/null
+++ b/dotemacs
@@ -0,0 +1,21 @@
+;;--------------------------------------------------------------------
+;; Lines enabling gnuplot-mode
+
+;; move the files gnuplot.el to someplace in your lisp load-path or
+;; use a line like
+;;  (setq load-path (append (list "/path/to/gnuplot") load-path))
+
+;; these lines enable the use of gnuplot mode
+  (autoload 'gnuplot-mode "gnuplot" "gnuplot major mode" t)
+  (autoload 'gnuplot-make-buffer "gnuplot" "open a buffer in gnuplot mode" t)
+
+;; this line automatically causes all files with the .gp extension to
+;; be loaded into gnuplot mode
+  (setq auto-mode-alist (append '(("\\.gp$" . gnuplot-mode)) auto-mode-alist))
+
+;; This line binds the function-9 key so that it opens a buffer into
+;; gnuplot mode 
+  (global-set-key [(f9)] 'gnuplot-make-buffer)
+
+;; end of line for gnuplot-mode
+;;--------------------------------------------------------------------
diff --git a/gnuplot-gui.el b/gnuplot-gui.el
new file mode 100644
index 0000000..8552050
--- /dev/null
+++ b/gnuplot-gui.el
@@ -0,0 +1,1750 @@
+;;;; gnuplot-gui.el -- GUI interface to setting options in gnuplot-mode
+
+;; Copyright (C) 1998-2000 Bruce Ravel
+
+;; Author:     Bruce Ravel <ravel@phys.washington.edu>
+;; Maintainer: Bruce Ravel <ravel@phys.washington.edu>
+;; Created:    19 December 1998
+;; Updated:    16 November 2000
+;; Version:    (same as gnuplot.el)
+;; Keywords:   gnuplot, plotting, interactive, GUI
+
+;; This file is not part of GNU Emacs.
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This lisp script is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;; Permission is granted to distribute copies of this lisp script
+;; provided the copyright notice and this permission are preserved in
+;; all copies.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, you can either send email to this
+;; program's maintainer or write to: The Free Software Foundation,
+;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; send bug reports to the authors (ravel@phys.washington.edu)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; Commentary:
+;;
+;; This file provides a graphical user interface to setting arguments
+;; to gnuplot commands.  Positioning point near a command and invoking
+;; `gnuplot-gui-set-options-and-insert' (C-c C-c or shift-mouse-2)
+;; will pop open a frame with widgets for setting the various
+;; arguments appropriate the the item that was near point.  The goal
+;; is to provide point-and-click functionality to gnuplot-mode.
+;;
+;; gnuplot-gui is designed for gnuplot 3.7, but since much of 3.7 is
+;; backward compatible to 3.5, it will work well for that version
+;; also.
+;;
+;; gnuplot-gui.el was developed using Emacs 19.34 and is known to work
+;; on Emacs 20.x and XEmacs 20.x.  I do not know what is the earliest
+;; version for which it will work, but I make no guarantees for
+;; versions before 19.34.  Note that this makes heavy use of the
+;; widget package, so this will not work on Emacs 19.34 unless you
+;; install the widget package separately.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;; To do:
+;;
+;; Widgets I need:
+;; -- 'position: two or three comma separated numbers used to denote a
+;;               position or a tic start/end/increment (see arrow,
+;;               need a prefix)
+;; -- 'modifier: colon separated fields used for datafile modifiers
+;;
+;; command types which are currently unsupported or contain mistakes
+;; -- unsupported: cntrparam
+;; -- plot, splot, fit: rather lame
+;; -- label: position information missing
+;; -- label: font string handled in overly simple manner
+;; -- hidden3d: not really suited to 'list, but all options are exclusive...
+;; -- pointstyle argument to "set label"
+;;
+;; overall:
+;; -- continuation lines (ugh!)
+;; -- multiple frames end up displaying same window after setting options
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Code:
+
+(require 'gnuplot)
+(eval-and-compile
+  (condition-case ()
+      (progn
+       (require 'widget)
+       (require 'wid-edit))
+    (error nil)))
+(require 'cl)
+(eval-when-compile                     ; suppress some compiler warnings
+  (defvar gnuplot-xemacs-p nil)
+  (defvar gnuplot-quote-character nil)
+  (defvar gnuplot-info-display nil)
+  (defvar gnuplot-mode-map nil))
+
+;; (eval-when-compile
+;;   (require 'wid-edit))
+
+(eval-and-compile                      ; I need this!
+  (if (fboundp 'split-string)
+      ()
+    (defun split-string (string &optional pattern)
+      "Return a list of substrings of STRING which are separated by PATTERN.
+If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
+      (or pattern
+         (setq pattern "[ \f\t\n\r\v]+"))
+      ;; The FSF version of this function takes care not to cons in case
+      ;; of infloop.  Maybe we should synch?
+      (let (parts (start 0))
+       (while (string-match pattern string start)
+         (setq parts (cons (substring string start (match-beginning 0)) parts)
+               start (match-end 0)))
+       (nreverse (cons (substring string start) parts)))) ))
+
+
+
+;;; customizable variables
+
+(defgroup gnuplot-gui nil
+  "Graphical interface to setting arguments in gnuplot scrips."
+  :prefix "gnuplot-gui-"
+  :group 'gnuplot)
+
+(defcustom gnuplot-gui-popup-flag nil
+  "*Non-nil means to open arguments pop-ups automatically.
+This would be done after menu insertion of Gnuplot commands."
+  :group 'gnuplot-gui
+  :type 'boolean)
+
+(defvar gnuplot-gui-frame nil
+  "Frame used to hold the buffer for setting options.")
+(defcustom gnuplot-gui-frame-plist
+  '(height 18 width 65 border-width 0
+          user-position t top 150 left 150
+          internal-border-width 0 unsplittable t
+          default-toolbar-visible-p nil has-modeline-p nil
+          menubar-visible-p nil)
+  "Frame plist for the input run-time display frame in XEmacs."
+  :type '(repeat (group :inline t
+                       (symbol :tag "Property")
+                       (sexp :tag "Value")))
+  :group 'gnuplot-gui)
+(defcustom gnuplot-gui-frame-parameters
+  '((height . 18)
+    (width . 65)
+    (user-position . t)
+    (top . 150)
+    (left . 150)
+    (border-width . 0)
+    (menu-bar-lines . 0)
+    (unsplittable . t))
+  "Frame parameters for the input run-time display frame in Emacs."
+  :group 'gnuplot-gui
+  :type '(repeat (sexp :tag "Parameter:")))
+
+(defcustom gnuplot-gui-fontname-list
+  '(" " "\"Helvetica\"" "\"Times-Roman\"")
+  "List of known font names.
+These *must* be quoted, like so \"\\\"Helvetica\\\"\".  This allows
+for fonts with names like \"\\\"Arial Bold Italic\\\"\" to be treated
+as single entries in the menu-buttons.  And it is really important that
+the first entry in the list be a blank string."
+  :group 'gnuplot-gui
+  :type '(repeat (string :tag "Font name:")))
+
+;; some global variables
+(defvar gnuplot-current-frame nil)
+(defvar gnuplot-current-buffer nil)
+(defvar gnuplot-current-buffer-point nil)
+(defvar gnuplot-gui-alist nil)
+(defvar gnuplot-gui-current-string nil)
+
+
+;;; various tools for handling data structures and text in the buffer
+
+;; tools for accessing the elements of the lists in `gnuplot-gui-all-types'
+(defsubst gnuplot-gui-type-tag     (obj) (elt obj 0))
+(defsubst gnuplot-gui-type-symbol  (obj) (elt obj 1))
+(defsubst gnuplot-gui-type-default (obj) (elt obj 2))
+(defsubst gnuplot-gui-type-prefix  (obj) (elt obj 3)) ; also 'range seperator
+(defsubst gnuplot-gui-type-fourth  (obj) (elt obj 4))
+(defsubst gnuplot-gui-type-list    (obj) (cddr obj))
+
+(defun gnuplot-this-word ()
+  "Return the word under point."
+  (let ((begin (save-excursion (beginning-of-line) (point-marker)))
+       (end   (save-excursion (end-of-line)       (point-marker))))
+    (save-excursion
+      (or (looking-at "\\<") (= (current-column) 0) (forward-word -1))
+      (if (> (point) begin) (setq begin (point-marker)))
+      (forward-word 1)
+      (if (> (point) end) (goto-char end))
+      (buffer-substring-no-properties begin (point)))))
+
+
+
+;;; data structures containing regarding options in Gnuplot 3.7
+
+;; various constants used for options that take the same sorts of arguments
+(defconst gnuplot-gui-mtics-list
+  '(("FREQUENCY"   'number " ")
+    ("DEFAULT"     'list " " "default")))
+(defconst gnuplot-gui-data-list
+  '(("DATA TYPE"   'list " " "time")))
+(defconst gnuplot-gui-label-list
+  '(("LABEL"       'string " ")
+    ("POSITION"    'position " " "" 2)
+    ("FONTNAME"    'list " " gnuplot-gui-fontname-list)
+    ("FONTSIZE"    'fontsize " ")))
+(defconst gnuplot-gui-range-list
+  '(("RANGE"       'range (" " . " ") ":")
+    ("REVERSE"     'list " " "reverse" "noreverse")
+    ("WRITEBACK"   'list " " "writeback" "nowriteback")))
+(defconst gnuplot-gui-tics-list
+  '(("WHERE"       'list " " "axis" "border")
+    ("MIRROR"      'list " " "mirror" "nomirror")
+    ("ROTATE"      'list " " "rotate" "norotate")
+    ("SERIES"      'position " " "" 3)
+    ("LABEL ARRAY" 'labels () )))
+(defconst gnuplot-gui-zeroaxis-list
+  '(("LINETYPE"    'number " ")))
+
+(defvar gnuplot-gui-terminal-types nil
+  "Associated list of terminal descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-terminal-types
+      (list (cons "aifm"
+                 '(("COLOR"     'list " " "monochrome" "gray" "color")
+                   ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
+                   ("FONTSIZE"  'fontsize " ")))
+           (cons "cgm"
+                 '(("MODE"      'list   " " "landscape" "portrait" "default")
+                   ("COLOR"     'list   " " "color" "monochrome")
+                   ("ROTATION"  'list   " " "rotate" "norotate")
+                   ("WIDTH"     'number " " "width")
+                   ("LINEWIDTH" 'number " " "linewidth")
+                   ("FONTNAME"  'list   " " "\"Arial\"" "\"Arial Italic\""
+                    "\"Arial Bold\"" "\"Arial Bold Italic\""
+                    "\"Times Roman\"" "\"Times Roman Italic\""
+                    "\"Times Roman Bold\"" "\"Times Roman Bold Italic\""
+                    "\"Helvetica\"" "\"Roman\"")
+                   ("FONTSIZE"  'fontsize " ")))
+           (cons "corel"
+                 '(("COLOR"            'list " " "default" "color" 
"monochrome")
+                   ("FONTNAME"         'list " " "\"SwitzerlandLight\""
+                    "\"Helvetica\"" "\"Times-Roman\"")
+                   ("FONTSIZE "        'number " ")
+                   ("X-SIZE   "        'number " ")
+                   ("Y-SIZE   "        'number " ")
+                   ("LINEWIDTH"        'number " ")))
+           (cons "dumb"
+                 '(("LINEFEED"         'list   " " "feed" "nofeed")
+                   ("X-SIZE"           'number " ")
+                   ("Y-SIZE"           'number " ")))
+           (cons "emf"
+                 '(("COLOR"            'list " " "color" "monochrome")
+                   ("LINE"             'list " " "solid" "dashed")
+                   ("FONTNAME"         'string " ")
+                   ("FONTSIZE"         'number " ")))
+           (cons "emtex"
+                 '(("FONTNAME"         'list     " " "courier" "roman")
+                   ("FONTSIZE"         'fontsize " ")))
+           (cons "fig"
+                 '(("COLOR"            'list   " " "color" "monochrome")
+                   ("FRAMESIZE"        'list   " " "small" "big")
+                   ("POINTSMAX"        'number " " "pointsmax")
+                   ("ORIENTATION"      'list   " " "landscape" "portrait")
+                   ("UNITS"            'list   " " "metric" "inches")
+                   ("FONT SIZE"        'number " " "fontsize")
+                   ("SIZE"             'pair   (" " . " ") "size")
+                   ("LINE THICKNESS"   'number " " "thickness")
+                   ("LAYER DEPTH"      'number " " "depth")))
+           (cons "hp500c"
+                 '(("RESOLUTION"       'list " " "75" "100" "150" "300")
+                   ("COMPRESSION"      'list " " "rle" "tiff")))
+           (cons "hpgl"
+                 '(("PENS"             'number " ")
+                   ("EJECT"            'list   " " "eject")))
+           (cons "hpdj"
+                 '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
+           (cons "hpljii"
+                 '(("RESOLUTION"       'list " " "75" "100" "150" "300")))
+           (cons "hppj"
+                 '(("FONT"             'list " " "FNT9X17" "FNT5X9" 
"FNT13X25")))
+           (cons "imagen"
+                 '(("FONT SIZE"        'number " ")
+                   ("LAYOUT"           'list   " " "portrait" "landscape")
+                   ("NUMBER OF GRAPHS" 'range (" " . " ") ",")))
+           (cons "gpic"
+                 '(("X ORIGIN"         'number " ")
+                   ("Y ORIGIN"         'number " " ",")))
+           (cons "latex"
+                 '(("FONTNAME"         'list " " "courier" "roman")
+                   ("FONTSIZE"         'fontsize " ")))
+           (cons "mif"
+                 '(("COLOUR"           'list " " "colour" "monochrome")
+                   ("LINETYPE"         'list " " "polyline" "vectors")))
+           (cons "nec-cp6"
+                 '(("MODE"             'list " " "monochrome" "colour" 
"draft")))
+           (cons "pbm"
+                 '(("SIZE"      'list " " "small" "medium" "large")
+                   ("COLOR"     'list " " "monochrome" "gray" "color")))
+           (cons "pcl5L"
+                 '(("MODE"      'list " " "landscape" "portrait")
+                   ("FONTNAME"  'list " " "stick" "univers" "cg_times")
+                   ("FONTSIZE"  'fontsize " ")))
+           (cons "png"
+                 '(("SIZE"      'list " " "small" "medium" "large")
+                   ("COLOR"     'list " " "monochrome" "gray" "color")))
+           (cons "postscript"
+                 '(("MODE"      'list " " "landscape" "portrait" "eps" 
"default")
+                   ("ENHANCED"  'list " " "enhanced" "noenhanced")
+                   ("COLOR"     'list " " "color" "monochrome")
+                   ("SOLID"     'list " " "solid" "dashed")
+                   ("DUPLEXING" 'list " " "defaultplex" "simplex" "duplex")
+                   ("FONTNAME"  'list " " gnuplot-gui-fontname-list)
+                   ("FONTSIZE"  'fontsize " ")))
+           (cons "pslatex"
+                 '(("COLOR"     'list " " "monochrome" "color")
+                   ("DASHED"    'list " " "dashed")
+                   ("ROTATION"  'list " " "rotate" "norotate")
+                   ("AUXFILE"   'list " " "auxfile")))
+           (cons "pstex"
+                 '(("COLOR"     'list " " "monochrome" "color")
+                   ("DASHED"    'list " " "dashed")
+                   ("ROTATION"  'list " " "rotate" "norotate")
+                   ("AUXFILE"   'list " " "auxfile")))
+           (cons "pstricks"
+                 '(("HACK TEXT"        'list " " "hacktext" "nohacktext")
+                   ("PLOT SCALING"     'list " " "nounit" "unit")))
+           (cons "regis"
+                 '(("COLOR DEPTH"      'list "4" "16")))
+           (cons "tgif"
+                 '(("LAYOUT"           'list   " " "portrait" "landscape")
+                   ("NUMBER OF GRAPHS" 'range (" " . " ") ",")
+                   ("LINE TYPE"        'list " " "solid" "dashed")
+                   ("FONTNAME"         'list " " gnuplot-gui-fontname-list)
+                   ("FONTSIZE"         'fontsize " ")))
+           (cons "tpic"
+                 '(("POINTSIZE"        'number " ")
+                   ("LINEWIDTH"        'number " ")
+                   ("INTERVAL "        'number " ")))
+           (cons "vgagl"               ; for pm3d patch (also persist, raise 
in x11) <MT>
+                 '(("BACKGROUND"       'position  " " "background" 3)
+                   ("INTERPOLATION"    'list " " "uniform" "interpolate")
+                   ("DUMP"             'file " ")
+                   ("MODE"             'string  " " "")))
+           (cons "x11"
+                 '(("RESET"            'list " " "reset")
+                   ("TERMINAL NUMBER"  'number " ")
+                   ("PERSIST"          'list " " "persist" "nopersist")
+                   ("RAISE"            'list " " "raise" "noraise"))) ))
+
+(defvar gnuplot-gui-terminal-list nil)
+(setq gnuplot-gui-terminal-list
+      (append (list " ") (mapcar 'car gnuplot-gui-terminal-types)))
+
+(defvar gnuplot-gui-set-types nil
+  "Associated list of set option descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-set-types
+      (list (cons "angles"
+                 '(("UNITS" 'list " " "degrees" "radians")))
+           (cons "arrow"
+                 '(("TAG"       'tag " ")
+                   ("FROM"      'position " " "from" 3)
+                   ("TO"        'position " " "to" 3)
+                   ("HEAD"      'list " " "head" "nohead")
+                   ("LINESTYLE" 'number " " "ls")
+                   ("LINETYPE " 'number " " "lt")
+                   ("LINEWIDTH" 'number " " "lw")))
+           (cons "noarrow"
+                 '(("TAG" 'tag " ")))
+           (cons "autoscale"
+                 '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
+                    "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
+                    "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
+           (cons "noautoscale"
+                 '(("AXIS" 'list " " "x" "y" "z" "x2" "y2" "xy"
+                    "xmin" "ymin" "zmin" "x2min" "y2min" "xymin"
+                    "xmax" "ymax" "zmax" "x2max" "y2max" "xymax")))
+           (cons "bar"
+                 '(("SIZE" 'list " " "small" "large")))
+           (cons "border"
+                 '(("BORDER CODE" 'number " ")
+                   ("LINE STYLE"  'list   " " "lines"
+                    "dots" "points" "linespoints")
+                   ("LINESTYLE"   'number " " "ls")
+                   ("LINETYPE"    'number " " "lt")
+                   ("LINEWIDTH"   'number " " "lw")
+                   ))
+           (cons "boxwidth"
+                 '(("WIDTH" 'number " ")))
+           (cons "clabel"
+                 '(("FORMAT" 'format " ")))
+           (cons "clip"
+                 '(("CLIP TYPE" 'list " " "points" "one" "two")))
+           (cons "noclip"
+                 '(("CLIP TYPE" 'list " " "points" "one" "two")))
+           ;;(cons "cntrparam"
+               ;;  '(("INTERPOLATION" 'list " " "linear" "cubicspline" 
"bspline")
+               ;;    ("POINTS" 'number " " "points")
+               ;;    ("ORDER"  'number " " "order")))
+           (cons "contour"
+                 '(("WHERE"     'list " " "base" "surface" "both")))
+           (cons "dgrid3d"
+                  '(("ROW,COLUMN,NORM" 'position " " "" 3)))
+           (cons "encoding"
+                 '(("ENCODING" 'list " " "default" "iso_8859_1"
+                    "cp850" "cp437")))
+           (cons "format"
+                 '(("AXIS"   'list " " "x" "y" "z" "xy" "x2" "y2")
+                   ("FORMAT" 'format  " ")))
+           (cons "dummy"
+                 '(("VAR 1" 'string " " "")
+                   ("VAR 2" 'string " " ",")))
+           (cons "grid"
+                 '(("XTICS"  'list " " "xtics" "mxtics" "noxtics" "nomxtics")
+                   ("YTICS"  'list " " "ytics" "mytics" "noytics" "nomytics")
+                   ("ZTICS"  'list " " "ztics" "mztics" "noztics" "nomztics")
+                   ("X2TICS" 'list " " "x2tics" "mx2tics" "nox2tics" 
"nomx2tics")
+                   ("Y2TICS" 'list " " "y2tics" "my2tics" "noy2tics" 
"nomy2tics")
+                   ("POLAR"  'number " " "polar")
+                   ("MAJOR LINETYPE" 'number " ")
+                   ("MINOR LINETYPE" 'number " ")))
+           (cons "hidden3d"
+                 '(("ALGORITHM" 'list " " "defaults"
+                    "offset"
+                   "nooffset"
+                    ;;"trianglepattern  # bitpattern between 0 and 7"
+                   "trianglepattern 0" "trianglepattern 1"
+                    "trianglepattern 2" "trianglepattern 3"
+                    "trianglepattern 4" "trianglepattern 5"
+                    "trianglepattern 6" "trianglepattern 7"
+                    ;;"undefined        # level between 0 and 3"
+                   "undefined 0" "undefined 1" "undefined 2" "undefined 3"
+                   "noundefined" "altdiagonal" "noaltdiagonal"
+                   "bentover" "nobentover")))
+           (cons "historysize"
+                 '(("SIZE" 'number " ")))
+           (cons "isosamples"
+                 '(("ISO_U LINES" 'number " ")
+                   ("ISO_V LINES" 'number " " ",")))
+           (cons "key"
+                 '(("LOCATION"      'list " " "left" "right" "top" "bottom"
+                                          "outside" "below")
+                   ("POSITION"      'position  " " "" 3)
+                   ("JUSTIFICATION" 'list " " "Left" "Right")
+                   ("REVERSE"       'list " " "reverse" "noreverse")
+                   ("SAMPLE LENGTH" 'number " " "samplen")
+                   ("SPACING"       'number " " "spacing")
+                   ("WIDTH"         'number " " "width")
+                   ("TITLE"         'string " " "title ")
+                   ("BOX LINETYPE"  'number " " "box") ;; linetype data
+                   ("NOBOX"         'list   " " "nobox")))
+           (cons "label"
+                 '(("TAG" 'tag " ")
+                   ("LABEL TEXT" 'string " ")
+                   ("POSITION"   'position " " "at" 3)
+                   ;; first, second, graph, screen
+                   ("JUSTIFICATION" 'list " " "left" "right" "center")
+                   ("ROTATE"        'list " " "rotate" "norotate")
+                   ("FONT"          'string " " "font"))) ;; font "name,size"
+           (cons "nolabel"
+                 '(("TAG"        'tag " ")))
+           (cons "linestyle"
+                 '(("TAG      "  'tag " ")
+                   ("LINE STYLE" 'list " " "boxerrorbars" "boxes"
+                    "boxxyerrorbars" "candlesticks" "dots"
+                    "financebars" "fsteps" "histeps" "impulses"
+                    "lines" "linespoints" "points" "steps" "vector"
+                    "xerrorbars" "xyerrorbars" "yerrorbars")
+                   ("LINETYPE " 'number " " "lt")
+                   ("LINEWIDTH" 'number " " "lw")
+                   ("POINTTYPE" 'number " " "pt")
+                   ("POINTSIZE" 'number " " "ps")))
+           (cons "locale"
+                 '(("LOCALE" 'string " ")))
+           (cons "logscale"
+                 '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
+                    "x2" "y2")
+                   ("BASE" 'number " ")))
+           (cons "nologscale"
+                 '(("AXIS" 'list " " "x" "y" "z" "xy" "xz" "yz" "xyz"
+                    "x2" "y2")))
+           (cons "mapping"
+                 '(("COORDINATE SYSTEM" 'list " " "cartesian" "spherical"
+                    "cylindrical")))
+                                       ; _margin
+           (cons "bmargin"
+                 '(("BOTTOM MARGIN" 'number " ")))
+           (cons "lmargin"
+                 '(("LEFT MARGIN"   'number " ")))
+           (cons "rmargin"
+                 '(("RIGHT MARGIN"  'number " ")))
+           (cons "tmargin"
+                 '(("TOP MARGIN"    'number " ")))
+
+           (cons "missing"
+                 '(("CHARACTER" 'string " " 1)))
+                                       ; m_tics
+           (cons "mxtics"  gnuplot-gui-mtics-list)
+           (cons "mytics"  gnuplot-gui-mtics-list)
+           (cons "mztics"  gnuplot-gui-mtics-list)
+           (cons "mx2tics" gnuplot-gui-mtics-list)
+           (cons "my2tics" gnuplot-gui-mtics-list)
+
+                                       ; pm3d additions <MT>
+           (cons "mouse"
+                 '(("DOUBLECLICK"     'number " " "doubleclick")
+                   ("ZOOM"            'list   " " "zoomcoordinates" 
"nozoomcoordinates")
+                   ("POLAR"           'list   " " "polarcoordinates" 
"nopolarcoordinates")
+                   ("FORMAT"          'string " " "format")
+                   ("CLIPBOARDFORMAT" 'string " " "clipboardformat")
+                   ("MOUSEFORMAT"     'string " " "mouseformat")
+                   ("LABELS"          'list   " " "labels" "nolabels")
+                   ("LABELOPTIONS"    'string " " "labeloptions")
+                   ("ZOOMJUMP"        'list   " " "zoomjump" "nozoomjump")
+                   ("VERBOSE"         'list   " " "verbose" "noverbose")))
+           (cons "palette"
+                 '(("COLOR"       'list     " " "gray" "color")
+                   ("RGBFORMULAE" 'position " " "rgbformulae" 3)
+                   ("PARITY"      'list     " " "positive" "negative")
+                   ("FORMULAE"    'list     " " "nops_allcF" "ps_allcF")
+                   ("MAXCOLORS"   'number   " ")
+                   ("COLOR_BOX"   'list     " " "nocb" "cbdefault" "cbuser")
+                   ("ORIENTATION" 'list     " " "cbvertical" "cbhorizontal")
+                   ("ORIGIN"      'position " " "origin" 2)
+                   ("SIZE"        'position " " "size" 2)
+                   ("BORDER"      'number   " ")
+                   ("NOBORDER"    'list     " " "bdefault" "noborder")))
+           (cons "pm3d"
+                 '(("AT"         'list*  " " "b" "s" "t" "bs" "bt" "st" "bst")
+                   ("SCANS"      'list   " " "scansautomatic" "scansforward" 
"scansbackward")
+                   ("FLUSH"      'list*  " " "begin" "center" "end")
+                   ("CLIP"       'list   " " "clip1in" "clip4in")
+                   ("ZRANGE"     'range (" " . " ") ":")
+                   ("HIDDEN3D"   'number " ")
+                   ("NOHIDDEN3D" 'list   " " "nohidden3d")
+                   ("FILLING"    'list   " " "transparent" "solid")
+                   ("MAP"        'list   " " "map")))
+
+           (cons "offsets"
+                 '(("LEFT  " 'number " ")
+                   ("RIGHT " 'number " " ",")
+                   ("TOP   " 'number " " ",")
+                   ("BOTTOM" 'number " " ",")))
+           (cons "origin"
+                 '(("X ORIGIN"   'number " ")
+                   ("Y ORIGIN"   'number " " ",")))
+           (cons "output"
+                 '(("FILENAME"   'file " ")))
+           (cons "pointsize"
+                 '(("MULTIPLIER" 'number " ")))
+           (cons "samples"
+                 '(("2D PLOT"    'number " ")
+                   ("3D PLOT"    'number " " ",")))
+           (cons "size"
+                 '(("ASPECT"           'list " " "square" "nosquare"
+                                                 "ratio" "noratio")
+                   ("X-SCALE OR RATIO" 'number " ")
+                   ("Y-SCALE"          'number " " ",")))
+           (cons "style"
+                 '(("DATA TYPE"  'list " " "data" "function")
+                   ("PLOT STYLE" 'list " " "boxerrorbars" "boxes"
+                    "boxxyerrorbars" "candlesticks" "dots"
+                    "financebars" "fsteps" "histeps" "impulses"
+                    "lines" "linespoints" "points" "steps" "vector"
+                    "xerrorbars" "xyerrorbars" "yerrorbars")))
+           (cons "terminal"
+                 '(("TERMINAL TYPE" 'list " " gnuplot-gui-terminal-list)))
+           (cons "tics"
+                 '(("DIRECTION"  'list " " "in" "out")))
+           (cons "ticslevel"
+                 '(("RELATIVE HEIGHT" 'number " ")))
+           (cons "ticscale"
+                 '(("MAJOR" 'number " ")
+                   ("MINOR" 'number " ")))
+           (cons "timestamp"
+                 '(("FORMAT STRING" 'format " ")
+                   ("WHERE"         'list " " "top" "bottom")
+                   ("ROTATE"        'list " " "rotate" "norotate")
+                   ("X-OFFSET"      'number " ")
+                   ("Y-OFFSET"      'number " " ",")
+                   ("FONTNAME"      'list " " gnuplot-gui-fontname-list)))
+           (cons "timefmt"
+                 '(("FORMAT STRING" 'string " ")))
+           (cons "title"
+                 '(("TITLE" 'string " ")))
+           (cons "view"
+                 '(("X-ROTATION" 'number " ")
+                   ("Z-ROTATION" 'number " " ",")
+                   ("SCALE"      'number " " ",")
+                   ("Z-SCALE"    'number " " ",")))
+           ;; ("SCALE" 'position " " "," 4)
+                                       ; _data
+           (cons "xdata"      gnuplot-gui-data-list)
+           (cons "ydata"      gnuplot-gui-data-list)
+           (cons "zdata"      gnuplot-gui-data-list)
+           (cons "x2data"     gnuplot-gui-data-list)
+           (cons "y2data"     gnuplot-gui-data-list)
+                                       ; _label
+           (cons "xlabel"     gnuplot-gui-label-list)
+           (cons "ylabel"     gnuplot-gui-label-list)
+           (cons "zlabel"     gnuplot-gui-label-list)
+           (cons "x2label"    gnuplot-gui-label-list)
+           (cons "y2label"    gnuplot-gui-label-list)
+                                       ; _range, note that the [] syntax for
+                                       ;         the writeback argument is
+                                       ;         not properly supported
+           (cons "xrange"     gnuplot-gui-range-list)
+           (cons "yrange"     gnuplot-gui-range-list)
+           (cons "zrange"     gnuplot-gui-range-list)
+           (cons "x2range"    gnuplot-gui-range-list)
+           (cons "y2range"    gnuplot-gui-range-list)
+           (cons "trange"     gnuplot-gui-range-list)
+           (cons "rrange"     gnuplot-gui-range-list)
+           (cons "urange"     gnuplot-gui-range-list)
+           (cons "vrange"     gnuplot-gui-range-list)
+                                       ; _tics
+           (cons "xtics"      gnuplot-gui-tics-list)
+           (cons "ytics"      gnuplot-gui-tics-list)
+           (cons "ztics"      gnuplot-gui-tics-list)
+           (cons "x2tics"     gnuplot-gui-tics-list)
+           (cons "y2tics"     gnuplot-gui-tics-list)
+                                       ; zeroaxis
+           (cons "zeroaxis"   gnuplot-gui-zeroaxis-list)
+           (cons "xzeroaxis"  gnuplot-gui-zeroaxis-list)
+           (cons "yzeroaxis"  gnuplot-gui-zeroaxis-list)
+           (cons "y2zeroaxis" gnuplot-gui-zeroaxis-list)
+           (cons "x2zeroaxis" gnuplot-gui-zeroaxis-list)
+
+           (cons "zero"
+                 '(("THRESHOLD" 'number " ")))
+           ))
+
+(defvar gnuplot-gui-command-types nil
+  "Associated list of command descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-command-types
+      (list (cons "cd"
+                 '(("FILENAME"       'file   " ")))
+           (cons "call"
+                 '(("INPUT FILE"     'file   " ")
+                   ("PARAMETER LIST" 'string " ")))
+           (cons "load"
+                 '(("INPUT FILE"     'file   " ")))
+           (cons "pause"
+                 '(("TIME"           'number " ")
+                   ("MESSAGE"        'string " ")))
+           (cons "print"
+                 '(("EXPRESSION"     'string " ")))
+           (cons "save"
+                 '(("SAVE"           'list   " " "functions" "variables" "set")
+                   ("FILE"           'file   " ")))
+           (cons "update"
+                 '(("INITIAL FILE"   'file   " " t)
+                   ("UPDATED FILE"   'file   " " t))) ))
+
+
+(defcustom gnuplot-gui-plot-splot-fit-style 'simple
+  "Control the complexity of the GUI display for plot, splot, and fit.
+The values are 'simple, which causes a limited set of plot, splot, or
+fit options to be displayed, and 'complete, which attempts to display
+all options.  The 'complete setting is prone to making errors when
+parsing values already in the script buffer."
+  :group 'gnuplot-gui
+  :type '(radio (const :tag "Simple listing"   simple)
+               (const :tag "Complete listing" complete)))
+
+
+(defconst gnuplot-gui-plot-simple-list
+  '(("X RANGE"     'range (" " . " ") ":")
+    ("Y RANGE"     'range (" " . " ") ":")
+    ("DATA FILE"   'file   " ")
+    ("THRU"        'string* " " "thru")
+    ("USING"       'modifier " ")
+    ("TITLE"       'string " ")
+    ("WITH"        'list* " " "boxerrorbars" "boxes"
+     "boxxyerrorbars" "candlesticks" "dots" "financebars"
+     "fsteps" "histeps" "impulses" "lines" "linespoints"
+     "points" "steps" "vector" "xerrorbars" "xyerrorbars"
+     "yerrorbars")))
+(defconst gnuplot-gui-plot-full-list
+  '(;;("T RANGE"     'range (" " . " ") ":")
+    ("X RANGE"     'range (" " . " ") ":")
+    ("Y RANGE"     'range (" " . " ") ":")
+    ("xa"          'text   "\t---------------------")
+    ("FUNCTION"    'string " ")
+    ("xc"          'text   "   or")
+    ("DATA FILE"   'file   " ")
+    ("INDEX"       'modifier " ")
+    ("EVERY"       'modifier " ")
+    ("THRU"        'string* " " "thru")
+    ("USING"       'modifier " ")
+    ("SMOOTH"      'list* " " "unique" "csplines" "acsplines"
+     "bezier" "sbezier")
+    ;; datafile modifiers
+    ("AXES"        'list* " " "x1y1" "x2y2" "x1y2" "x2y1")
+    ("TITLE"       'string " ")
+    ("NOTITLE"     'list   " " "notitle")
+    ("xf"          'text   "\t---------------------")
+    ("xi"          'text   "Select a standard plotting style")
+    ("WITH"        'list* " " "boxerrorbars" "boxes"
+     "boxxyerrorbars" "candlesticks" "dots" "financebars"
+     "fsteps" "histeps" "impulses" "lines" "linespoints"
+     "points" "steps" "vector" "xerrorbars" "xyerrorbars"
+     "yerrorbars")
+    ("xo"          'text   "     or a previously defined style")
+    ("LINE STYLE " 'number " " "ls")
+    ("xr"          'text   "     or specify a style in-line")
+    ("LINE TYPE  " 'number " " "lt")
+    ("LINE WIDTH " 'number " " "lw")
+    ("POINT TYPE " 'number " " "pt")
+    ("POINT STYLE" 'number " " "ps")
+    ))
+(defconst gnuplot-gui-splot-simple-list
+  '(("DATA FILE"   'file   " ")
+    ("TITLE"       'string " ")
+    ("WITH"        'list* " " "lines" "linespoints" "points" "dots" 
"impulses")))
+(defconst gnuplot-gui-splot-full-list
+  '(;;("U RANGE"     'range (" " . " ") ":")
+    ;;("V RANGE"     'range (" " . " ") ":")
+    ("X RANGE"     'range (" " . " ") ":")
+    ("Y RANGE"     'range (" " . " ") ":")
+    ("Z RANGE"     'range (" " . " ") ":")
+    ("xa"          'text   "\t---------------------")
+    ("FUNCTION"    'string " ")
+    ("xc"          'text   "   or")
+    ("DATA FILE"   'file   " ")
+    ("INDEX"       'modifier " ")
+    ("EVERY"       'modifier " ")
+    ("THRU"        'string* " " "thru")
+    ("USING"       'modifier " ")
+    ("SMOOTH"      'list* " " "unique" "csplines" "acsplines"
+     "bezier" "sbezier")
+    ("TITLE"       'string " ")
+    ("NOTITLE"     'list   " " "notitle")
+    ("WITH"        'list* " " "lines" "linespoints" "points" "dots" 
"impulses")))
+(defconst gnuplot-gui-fit-simple-list
+  '(("FUNCTION"     'string* " " "")
+    ("DATA FILE"    'file    " ")
+    ("VIA (params)" 'string* " " "via") ))
+(defconst gnuplot-gui-fit-full-list
+  '(("X RANGE"      'range  (" " . " ") ":")
+    ("Y RANGE"      'range  (" " . " ") ":")
+    ("xa"           'text    "----- fitting functionn and file --------")
+    ("FUNCTION"     'string* " " "")
+    ("DATA FILE"    'file    " ")
+    ("xb"           'text    "----- datafile modifiers ----------------")
+    ("INDEX"        'modifier " ")
+    ("EVERY"        'modifier " ")
+    ("THRU"         'string* " " "thru")
+    ("USING"        'modifier " ")
+    ("SMOOTH"       'list* " " "unique" "csplines" "acsplines"
+     "bezier" "sbezier")
+    ("xc"           'text    "----- parameters (file or parameters) ---")
+    ("VIA (file)"   'string  " " "via")
+    ("VIA (params)" 'string* " " "via") ))
+
+(defvar gnuplot-gui-plot-splot-fit nil
+  "Associated list of plot, splot, and fit descriptions.
+See the doc-string for `gnuplot-gui-all-types'.")
+(setq gnuplot-gui-plot-splot-fit
+      (list (cons "plot"  (if (equal gnuplot-gui-plot-splot-fit-style 
'complete)
+                             gnuplot-gui-plot-full-list
+                           gnuplot-gui-plot-simple-list))
+           (cons "splot" (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+                             gnuplot-gui-splot-full-list
+                           gnuplot-gui-splot-simple-list))
+           (cons "fit"   (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+                             gnuplot-gui-fit-full-list
+                           gnuplot-gui-fit-simple-list))) )
+
+
+(defvar gnuplot-gui-test-type nil)
+(setq gnuplot-gui-test-type
+      (list (cons "test"
+                 '(("TAG"      'tag      " ")
+                   ("LIST"     'list     " " "1" "2" "3")
+                   ("LIST*"    'list*    " " "1" "2" "3")
+                   ("NUMBER"   'number   " " "number")
+                   ("RANGE"    'range   (" " . " ") ":")
+                   ("PAIR"     'pair    (" " . " ") "pair")
+                   ("LABELS"   'labels   ())
+                   ("FILE"     'file     " ")
+                   ("TEXT"     'text     "this is text")
+                   ("STRING"   'string   " ")
+                   ("STRING*"  'string*  " " "string*")
+                   ("FORMAT"   'format   " ")
+                   ("POSITION" 'position " " "at" 3)
+                   ("FONTSIZE" 'fontsize " ") ))))
+
+(defvar gnuplot-gui-all-types nil
+    "Associated list of terminal, set option, and command arguments.
+
+Each entry in the list is a cons cell of the form
+      (OPTION . ALIST)
+where OPTION is one of the recognized options in Gnuplot, either a
+command, something that is set, or a terminal type.  Only those
+commands, set options, and terminal types that actually take arguments
+are in this associated list.
+
+ALIST is itself an associated list where each entry is of the form:
+
+      (TAG TYPE DEFAULT REST)
+
+TAG is the name used on the widget and indicates one of the options
+for this command, set option, or terminal type.
+
+TYPE is one of
+     'list       a menu-list of strings
+     'list*      a menu-list of strings with a prefix
+     'number     a number with an optional prefix
+     'tag        like number but must be the first argument
+     'fontsize   like number but must be the last argument
+     'range      a pair of numbers like [#,#] or [#:#]
+     'pair       a pair of numbers with no punctuation and a prefix
+     'file       a quoted string and a file browser
+     'string     a quoted string with an optional prefix
+     'string*    an unquoted string with a prefix
+     'format     a quoted string and an info-link to (gnuplot)format
+     'labels     an array as needed for xtics, ytics, etc
+     'position   2 or 3 comma separated numbers with an optional prefix
+
+DEFAULT is the default value for this option.  Note that the default
+for 'range and 'pair is a cons cell and the default for 'labels is a
+list.  For most things, the best choice of DEFAULT is a string of
+white space or a cons cell of two strings of white space.  Strings of
+white space are better defaults than empty strings or nil.
+
+The value of REST depends upon TYPE:
+
+  For 'list &    REST is the list of options that will go into the
+      'list*       menu-button.  This can also be a symbol which
+                   evaluates to a list containing the options to go into
+                   the menu-button.  This list variable must contain the
+                   DEFAULT.
+  For 'number    REST is the prefix string (if it exists) for that number.
+  For 'range     REST is the separator, \":\" for plot ranges and
+                   \",\" for plot dimensions (see for example the tgif
+                   terminal type)
+  For 'string &  REST may a number denoting the width of the editable-text
+      'string*     field or it may be a string denoting a prefix.  By
+                   default, the width is half the width of the frame
+                   and there is no prefix.  It may be useful to
+                   specify \"1\" when the input is a single character
+                   as in 'set missing'.
+  For 'file      REST determines the label placed before the file insertion
+                   field.  If non-nil, then TAG is used.  If nil, then
+                   the default \"File\" is used.
+  For 'position  REST is the prefix and the number of comma separated numbers
+  For others     REST is not used.
+
+Here is an example entry for the png terminal type:
+
+  (cons \"png\"
+       '((\"SIZE\"  'list \" \" \"small\" \"medium\" \"large\")
+         (\"COLOR\" 'list \" \" \"monochrome\" \"gray\" \"color\")))
+
+This alist is formed at load time by appending together
+`gnuplot-gui-terminal-types', `gnuplot-gui-set-types' and
+`gnuplot-gui-command-types'.")
+
+(setq gnuplot-gui-all-types (append gnuplot-gui-terminal-types
+                                   gnuplot-gui-set-types
+                                   gnuplot-gui-command-types
+                                   gnuplot-gui-plot-splot-fit
+                                   gnuplot-gui-test-type
+                                   ))
+
+
+(defun gnuplot-gui-swap-simple-complete ()
+  (interactive)
+  (setq gnuplot-gui-plot-splot-fit-style
+       (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+           'simple 'complete))
+  (if (equal gnuplot-gui-plot-splot-fit-style 'complete)
+      (progn
+       (setcdr (assoc "plot"  gnuplot-gui-all-types) 
gnuplot-gui-plot-full-list)
+       (setcdr (assoc "splot" gnuplot-gui-all-types) 
gnuplot-gui-splot-full-list)
+       (setcdr (assoc "fit"   gnuplot-gui-all-types) 
gnuplot-gui-fit-full-list))
+    (setcdr (assoc "plot"  gnuplot-gui-all-types) gnuplot-gui-plot-simple-list)
+    (setcdr (assoc "splot" gnuplot-gui-all-types) 
gnuplot-gui-splot-simple-list)
+    (setcdr (assoc "fit"   gnuplot-gui-all-types) gnuplot-gui-fit-simple-list))
+  (message "Using %s lists for plot, splot, and fit."
+          gnuplot-gui-plot-splot-fit-style) )
+
+
+
+
+;;; user interface to the widget-y stuff
+
+(defun gnuplot-gui-mouse-set (event)
+  "Use the mouse to begin setting options using a GUI interface.
+EVENT is a mouse event.  Bound to \\[gnuplot-gui-mouse-set]
+Note that \"plot\", \"splot\", \"fit\", and \"cntrparam\" are not
+currently supported."
+  (interactive "@e")
+  (when (fboundp 'widget-create)
+    (save-excursion
+      (mouse-set-point event)
+      (gnuplot-gui-set-options-and-insert))))
+
+(defun gnuplot-gui-get-frame-param (param)
+  (if gnuplot-xemacs-p
+      (plist-get gnuplot-gui-frame-plist param)
+    (cdr (assoc param gnuplot-gui-frame-parameters))))
+(defun gnuplot-gui-set-frame-param (param value)
+  (if gnuplot-xemacs-p
+      (plist-put gnuplot-gui-frame-plist param value)
+    (setcdr (assoc param gnuplot-gui-frame-parameters) value)))
+
+(defun gnuplot-gui-set-options-and-insert ()
+  "Insert arguments using a GUI interface.
+Determine contents of current line and set up the appropriate GUI
+frame.  Bound to \\[gnuplot-gui-set-options-and-insert]
+Note that \"cntrparam\" is not currently supported."
+  (interactive)
+  (when (fboundp 'widget-create)
+    (let ((begin  (save-excursion (beginning-of-line) (point-marker)))
+         (end    (save-excursion (end-of-line)       (point-marker)))
+         (termin (concat "\\(,\\s-*" (regexp-quote "\\") "\\|;\\)"))
+         (set nil) (term nil))
+      (save-excursion
+       ;; there can be more then one command per line
+       (if (search-backward ";" begin "to_limit")
+           (progn (forward-char  1) (setq begin (point-marker))))
+       (if (re-search-forward termin end "to_limit")
+           (progn (backward-char (length (match-string 1)))
+                  (setq end (point-marker))))
+       (goto-char begin)
+       (skip-syntax-forward "-" end)
+       ;; various constructions are recognized here. at the end of this
+       ;; cond, point should be just after the word whose arguments are
+       ;; to be set
+       (cond ((looking-at "set\\s-+")
+              (setq set t)
+              (goto-char (match-end 0))
+              (if (looking-at "\\sw+") (goto-char (match-end 0)))
+              (when (string-match "^ter" (gnuplot-this-word)) ; terminal?
+                (setq term t)
+                (forward-word 1))
+              (when (string-match "^\\(da\\|fu\\)" (gnuplot-this-word))
+                (unless (looking-at "\\s-+st")
+                  (insert " style") (forward-word 1))
+                (forward-word 1)))
+             ((looking-at (concat "\\(cd\\|ca\\|lo\\|pa\\|pr\\|sa\\|u\\)"
+                                  "\\w*"
+                                  "[\\s-\\']"))
+              (forward-word 1))
+             ;;(goto-char (match-end 0)))
+             (t
+              (forward-word 1)))
+       (if (> (point) end) (goto-char end))
+       (let* ((w (gnuplot-this-word))
+              (wd (try-completion w gnuplot-gui-all-types))
+              (word "") wrd list)
+         (cond ((equal wd t)                     (setq word w))
+               ((equal wd nil)                   (setq word w))
+               ((assoc wd gnuplot-gui-all-types) (setq word wd))
+               (t                                (setq wd nil)))
+         (cond ((equal (string-match "^\\s-*$" w) 0)
+                (message "Blank line"))
+               ((and wd (stringp word))
+                (gnuplot-gui-correct-command word set term begin)
+                (setq gnuplot-gui-alist nil
+                      gnuplot-gui-current-string
+                      (buffer-substring-no-properties (point) end))
+                (gnuplot-gui-set-alist word gnuplot-gui-current-string)
+                (let* ((old-height (gnuplot-gui-get-frame-param 'height))
+                       (old-top    (gnuplot-gui-get-frame-param 'top)))
+                  (when (or
+                         (and (equal gnuplot-gui-plot-splot-fit-style 
'complete)
+                              (member* word '("plot" "splot" "fit")
+                                       :test 'string=))
+                         (equal word "test"))
+                    (gnuplot-gui-set-frame-param 'height 32)
+                    (gnuplot-gui-set-frame-param 'top    50))
+                  (gnuplot-gui-prompt-for-frame word)
+                  (when (or
+                         (and (equal gnuplot-gui-plot-splot-fit-style 
'complete)
+                              (member* word '("plot" "splot" "fit")
+                                       :test 'string=))
+                         (equal word "test"))
+                    (gnuplot-gui-set-frame-param 'height old-height)
+                    (gnuplot-gui-set-frame-param 'top    old-top)) ))
+               ((setq wrd (car (all-completions w '(("cntrparam")))))
+                (message
+                 "Setting arguments for %S is currently unsuported in 
gnuplot-mode"
+                 wrd))
+               ((setq list (all-completions w gnuplot-gui-all-types))
+                (message "%S could be one of %S" w list))
+               (t
+                (message
+                 "%S is not a gnuplot command which takes options" w)))) ))))
+
+(defun gnuplot-gui-toggle-popup ()
+  (interactive)
+  (setq gnuplot-gui-popup-flag (not gnuplot-gui-popup-flag))
+  (message (if gnuplot-gui-popup-flag
+              "Argument popup will appear after insertions."
+            "Argument popup will no longer appear after insertions.")))
+
+
+(defun gnuplot-gui-y-n (foo))
+(if gnuplot-xemacs-p
+    (defalias 'gnuplot-gui-y-n 'y-or-n-p-maybe-dialog-box)
+  (defalias 'gnuplot-gui-y-n 'y-or-n-p))
+
+(defun gnuplot-gui-correct-command (word set term begin)
+  "Check syntax of set command and terminal specifications.
+WORD is the item being set. SET and TERM are non-nil if the words
+\"set\" and \"terminal\" were found preceding WORD in the buffer.
+BEGIN is the beginning of the command."
+  (save-excursion
+    (cond ((assoc word gnuplot-gui-terminal-types)
+          (when (and (not (and set term))
+                     (gnuplot-gui-y-n
+                      (format
+                       "%S must be preceded by \"set terminal\".  Add it? "
+                       word)))
+            (backward-word 1)
+            (let ((e (point-marker)))
+              (goto-char begin)
+              (skip-syntax-forward "-" e)
+              (delete-region (point) e)
+              (insert "set terminal "))))
+         ((assoc word gnuplot-gui-set-types)
+          (when (and (not set)
+                     (gnuplot-gui-y-n
+                      (format
+                       "%S must be preceded by \"set\".  Add \"set\"? " word)))
+            (backward-word 1)
+            (let ((e (point-marker)))
+              (goto-char begin)
+              (skip-syntax-forward "-" e)
+              (delete-region (point) e)
+              (insert "set "))))))
+  (message nil))
+
+
+
+;;; handle the actual arguments
+
+(defun gnuplot-gui-fix-arg-list (list)
+  "Correct the result of splitting `gnuplot-gui-current-string'.
+LIST is the split string.  This removes empty and all-blank strings
+from the list and concatenates the strings that are part of a quoted
+argument, for example an axis label or a font name.  It also replaces
+bounding single quotes with double quotes, since double quotes are
+used in `gnuplot-gui-all-types'."
+  (let (fixed-list quote quoted)       ; remove blanks
+    (setq list (remove* "\\s-+" list :test 'string-match)
+         list (remove* ""      list :test 'string=))
+    (while list                                ; concatinate parts of quoted 
string
+      (if (not (string-match "^\\([\]\[()'\"]\\)" (car list)))
+         (setq fixed-list (append fixed-list (list (car list))))
+       (setq quote (match-string 1 (car list))
+             quoted (car list))
+       (if (string= quote "[") (setq quote "]"))
+       (if (string= quote "(") (setq quote ")"))
+       (while (and list
+                   (or (equal (length quoted) 1)
+                       (not (string-match (concat (regexp-quote quote) "$")
+                                          quoted))))
+         (setq quoted (concat quoted " " (cadr list))
+               list (cdr list)))
+       (if (string= quote "'")
+           (setq quoted (concat "\"" (substring quoted 1))
+                 quoted (concat (substring quoted 0 -1) "\"")))
+       (setq fixed-list (append fixed-list (list quoted))))
+      (setq list (cdr list)) )
+    fixed-list))
+
+(defun gnuplot-gui-set-alist (word string)
+  "Set defaults for arguments, using text from buffer if appropriate.
+WORD is the Gnuplot expression whose arguments are being set.  STRING
+is text from the buffer containing the previous values for WORD's
+arguments."
+  (let ((alist    (cdr (assoc word gnuplot-gui-all-types)))
+       (arg-list (gnuplot-gui-fix-arg-list (split-string string)) ))
+    ;; arg-list contains the arguments taken from the buffer
+    (setq gnuplot-gui-alist nil)
+    (while alist
+      (let* ((list      (car alist))
+            (tag       (gnuplot-gui-type-tag     list))
+            (symbol    (eval (gnuplot-gui-type-symbol list)))
+            (default   (gnuplot-gui-type-default list))
+            (prefix    (gnuplot-gui-type-prefix  list))
+            (values    (gnuplot-gui-type-list    list))
+            (this-cons (cond ((stringp default) (cons tag default))
+                             ((consp default) ; set cons valued default w/care
+                              (cons tag (cons (car default) (cdr default))))
+                             (t (cons tag default))))
+            (temp-list arg-list) )
+       ;;(message "%S" temp-list)      ; want to lop values off arg-list
+                                       ; as they are found
+       (if (symbolp (cadr values))
+         (setq values (symbol-value (cadr values))))
+       ;; check if an argument of this type is in arg-list
+       ;; set the current cons cell if it is
+       (while temp-list
+         (cond
+          ;; ---------------------------- list
+          ((member* symbol '(list list*) :test 'equal)
+           (let* ((case-fold-search nil)
+                  (match-cons (member* (concat "^" (car temp-list))
+                                       values :test 'string-match)))
+             (if (and (car match-cons) ; " " may be first elem. of list
+                      (not (string= " " (car match-cons))))
+                 (setq this-cons (cons tag (car match-cons))
+                       arg-list (remove* (car temp-list) arg-list
+                                         :test 'string= :count 1)
+                       temp-list nil)
+               (setq temp-list (cdr temp-list)))))
+          ;; ---------------------------- tag (first number in list)
+          ((equal symbol 'tag)
+           (if (string-match "^[-0-9.]+$" (car arg-list))
+               (setq this-cons (cons  tag (car arg-list))
+                     temp-list nil)
+             (setq temp-list (cdr temp-list))) )
+          ;; ---------------------------- fontsize (last number in list)
+          ((equal symbol 'fontsize)
+           (if (string-match "^[-0-9.]+$" (car (last arg-list)))
+               (setq this-cons (cons  tag (car (last arg-list)))
+                     temp-list nil)
+             (setq temp-list (cdr temp-list))) )
+          ;; ---------------------------- number with prefix
+          ((equal symbol 'number)
+           (cond ((and (string= prefix (car temp-list))
+                       (string-match "^[-0-9.]+$" (cadr temp-list)))
+                  (setq this-cons (cons tag (cadr temp-list))
+                        arg-list (remove* (car temp-list) arg-list
+                                          :test 'string= :count 1)
+                        arg-list (remove* (cadr temp-list) arg-list
+                                          :test 'string= :count 1)
+                        temp-list nil))
+                 ;; --------------------- number without prefix
+                 ((and (not prefix)
+                       (string-match "^[-0-9.]+$" (car temp-list)))
+                  (setq this-cons (cons tag (car temp-list))
+                        arg-list (remove* (car temp-list) arg-list
+                                          :test 'string= :count 1)
+                        temp-list nil))
+                 (t
+                  (setq temp-list (cdr temp-list)))))
+          ;; ---------------------------- pair with prefix
+          ((equal symbol 'pair)
+           (if (and (string= prefix (car temp-list))
+                    (string-match "^[-0-9.]+$" (cadr temp-list)))
+               (let ((this-car (cadr temp-list))
+                     (this-cdr (if (string-match "^[-0-9.]+$" (caddr 
temp-list))
+                                   (caddr temp-list) "")))
+                 (setq this-cons (cons tag (cons this-car this-cdr))
+                       temp-list nil))
+             (setq temp-list (cdr temp-list))))
+          ;; ---------------------------- range
+          ((equal symbol 'range)
+           (if (string-match (concat "\\[\\s-*" ; opening bracket
+                                     "\\([^:, \t]*\\)" ; first argument
+                                     "\\s-*[:,]\\s-*" ; separator
+                                     "\\([^\] \t]*\\)" ; second argument
+                                     "\\s-*\\]") ; closing bracket
+                             (car temp-list))
+               (setq this-cons
+                     (cons tag (cons (match-string 1 (car temp-list))
+                                     (match-string 2 (car temp-list))))
+                     arg-list (remove* (car temp-list) arg-list
+                                       :test 'string= :count 1)
+                     temp-list nil)
+             (setq temp-list (cdr temp-list)) ))
+          ;; ---------------------------- labels
+          ((equal symbol 'labels)
+           (if (string-match (concat "(" ; opening paren
+                                     "\\([^\)]*\\)" ; string
+                                     ")") ; closing paren
+                             (car temp-list))
+               (let* ((list (split-string (car temp-list) "[ \t(),]+"))
+                      (list (remove* "" list :test 'string=))
+                      (return ()))
+                 (while list
+                   (if (string-match "['\"]\\([^'\"]*\\)['\"]" (car list))
+                       (setq return (append return
+                                            (list (match-string 1 (car list))))
+                             list (cdr list)
+                             return (append return (list (car list))) )
+                     (setq return (append return (list "" (car list)))))
+                   (setq list (cdr list)) )
+                 (setq this-cons (cons tag return)
+                       arg-list (remove* (car temp-list) arg-list
+                                         :test 'string= :count 1)
+                       temp-list nil))
+             (setq temp-list (cdr temp-list))) )
+          ;; ---------------------------- string, file, format
+          ((member* symbol '(string file format) :test 'equal)
+           (if (string-match (concat "['\"]" ; opening quote
+                                     "\\([^'\"]*\\)" ; string
+                                     "['\"]") ; closing quote
+                             (car temp-list))
+               (setq this-cons (cons tag (match-string 0 (car temp-list)))
+                     arg-list (remove* (car temp-list) arg-list
+                                       :test 'string= :count 1)
+                     temp-list nil)
+             (setq temp-list (cdr temp-list)) ))
+          ;; ---------------------------- string*
+          ((equal symbol 'string*)
+           (if (string= prefix (car temp-list))
+               (setq this-cons (cons tag (cadr temp-list))
+                     arg-list (remove* (car temp-list) arg-list
+                                       :test 'string= :count 1)
+                     arg-list (remove* (cadr temp-list) arg-list
+                                       :test 'string= :count 1)
+                     temp-list nil)
+             (setq temp-list (cdr temp-list)) ) )
+          ;; ---------------------------- other or unknown
+          (t
+           (setq temp-list nil))
+          ))
+       (setq gnuplot-gui-alist
+             (append gnuplot-gui-alist (list this-cons))))
+      (setq alist (cdr alist))) ))
+
+
+(defun gnuplot-gui-post-process-alist (type)
+  "A few types need some additional processing.
+'range, 'pair, and 'labels are cons or list valued and need to b made
+into strings.  This is called right before inserting the arguments
+into the buffer.  TYPE is the object whose arguments are being set."
+  (let ((alist gnuplot-gui-alist)
+       (types (cdr (assoc type gnuplot-gui-all-types))) )
+    (while alist  ;; loop thru alist looking for tyeps needing post-processing
+      (let* ((list   (assoc (caar alist) types))
+            (value  (cdr (assoc (caar alist) gnuplot-gui-alist)))
+            (prefix (gnuplot-gui-type-prefix list))
+            (symb   (gnuplot-gui-type-symbol list)) )
+       (cond
+        ;;-------------------------- flat text
+        ((equal (eval symb) 'text)
+         (setcdr (assoc (caar alist) gnuplot-gui-alist) ""))
+        ;;-------------------------- range [#:#] or [#,#]
+        ((equal (eval symb) 'range)
+         (if (and (string-match "^\\s-*$" (car value))
+                  (string-match "^\\s-*$" (cdr value)))
+             (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
+           (setcdr (assoc (caar alist) gnuplot-gui-alist)
+                   (concat "[" (car value) prefix (cdr value) "]")) ) )
+        ;;-------------------------- pair
+        ((equal (eval symb) 'pair)
+         (if (and (string-match "^\\s-*$" (car value))
+                  (string-match "^\\s-*$" (cdr value)))
+             (setcdr (assoc (caar alist) gnuplot-gui-alist) "")
+           (setcdr (assoc (caar alist) gnuplot-gui-alist)
+                   (concat prefix " " (car value) " " (cdr value) )) ) )
+        ;;-------------------------- labels
+        ((equal (eval symb) 'labels)
+         (if (consp value)
+             (let ((word "") (list value))
+               (while list
+                 (if (string-match "^\\s-*$" (car list))
+                     (setq word (concat word (format "%s, " (cadr list))))
+                   (setq word (concat word (format "%S %s, " (car list)
+                                                   (cadr list)))))
+                 (setq list (cddr list)) )
+               (setq value (concat "(" (substring word 0 -2) ")")))
+           (setq value "") )
+         (setcdr (assoc (caar alist) gnuplot-gui-alist) value) ))
+
+       (setq alist (cdr alist))) )))
+
+
+;;; GUI frames
+
+(defun gnuplot-gui-prompt-for-frame (&optional option save-frame)
+  (setq option (or option (completing-read "Option: " gnuplot-gui-all-types
+                                          nil t nil t)))
+  (gnuplot-gui-make-frame
+   option (cdr (assoc option gnuplot-gui-all-types)) save-frame) )
+
+
+(defface gnuplot-gui-error-face '((((class color) (background light))
+                                 (:foreground "grey30"))
+                                (((class color) (background dark))
+                                 (:foreground "grey70")))
+  "Face used to display message about unknown widget types."
+  :group 'gnuplot-faces)
+
+(defface gnuplot-gui-flat-text-face '((((class color) (background light))
+                                      (:foreground "MediumBlue"))
+                                     (((class color) (background dark))
+                                      (:foreground "LightSteelBlue")))
+  "Face used to display message about unknown widget types."
+  :group 'gnuplot-faces)
+
+(defun gnuplot-gui-make-frame (item alist &optional save-frame)
+  "Open the frame and populate it with widgets.
+ITEM is the object for which arguments are being set.  ALIST is
+the alist of arguments for ITEM taken from `gnuplot-gui-all-types'.
+SAVE-FRAME is non-nil when the widgets are being reset."
+  (unless save-frame
+    (setq gnuplot-current-frame (selected-frame)
+         gnuplot-current-buffer (current-buffer)
+         gnuplot-current-buffer-point (point-marker))
+    (unless (and gnuplot-gui-frame (frame-live-p gnuplot-gui-frame))
+      (setq gnuplot-gui-frame (if gnuplot-xemacs-p
+                                 (make-frame gnuplot-gui-frame-plist)
+                               (make-frame gnuplot-gui-frame-parameters))))
+    (select-frame gnuplot-gui-frame)
+    ;;(set-frame-position gnuplot-gui-frame 150 150) ;; so herky-jerky
+    (if gnuplot-xemacs-p
+       (set-mouse-position (selected-window) 0 0)
+      (set-mouse-position gnuplot-gui-frame 0 0)))
+  (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+  (switch-to-buffer (get-buffer-create "*Gnuplot GUI*"))
+  (kill-all-local-variables)
+  (if gnuplot-xemacs-p
+      (progn
+       (set (make-local-variable 'frame-title-format)
+            "Set Gnuplot Options")
+       (set (make-local-variable 'frame-icon-title-format)
+            "Set Gnuplot Options"))
+    (modify-frame-parameters (selected-frame)
+                            '((title . "Set Gnuplot Options"))) )
+  (widget-insert "\nSet options for \"" item "\"  ")
+  (let (tag help val)
+    (cond ((string-match "^[xyz]2?tics" item)
+          (setq tag  "info on tic labels"
+                help "Open a frame displaying the info entry for tic labels"
+                val  "xtics"))
+         ((string-match "^no" item)
+          (setq tag  (concat "info on " (substring item 2))
+                help (format "Open a frame displaying the info entry for %S"
+                             item)
+                val  item))
+         (t
+          (setq tag  (concat "info on " item)
+                help (format "Open a frame displaying the info entry for %S"
+                             item)
+                val  item)))
+    (widget-create 'gnuplot-gui-info-link :tag tag :help-echo help :value val))
+
+  (widget-insert "\n\n")
+  (while alist
+    (let* ((this    (car   alist))
+          (tag     (gnuplot-gui-type-tag    this))
+          (wtype   (gnuplot-gui-type-symbol this))
+          (prefix  (gnuplot-gui-type-prefix this))
+          (default (cdr (assoc tag gnuplot-gui-alist)))
+          (list    (gnuplot-gui-type-list   this)))
+      (if (symbolp (cadr list))
+         (setq list (symbol-value (cadr list))))
+      (widget-insert "\t")             ; insert the appropriate widget
+      (cond
+       ;;------------------------------ list, list* ------------
+       ((member* (eval wtype) '(list list*) :test 'equal)
+       (let ((starred (if (equal (eval wtype) 'list*) t nil)))
+         (gnuplot-gui-menu-choice tag default list starred)))
+       ;;------------------------------ number, tag, fontsize --
+       ((member* (eval wtype) '(number tag fontsize) :test 'equal)
+       (gnuplot-gui-number tag default prefix))
+       ;;------------------------------ position ---------------
+       ;;------------------------------ range, pair ------------
+       ((member* (eval wtype) '(range pair) :test 'equal)
+       (let ((is-range (equal (eval wtype) 'range)))
+         (gnuplot-gui-range tag default prefix is-range)))
+       ;;------------------------------ string, string* --------
+       ((member* (eval wtype) '(string string*) :test 'equal)
+       (let ((starred (if (equal (eval wtype) 'string) nil t)))
+         (gnuplot-gui-string tag default prefix starred)))
+       ;;------------------------------ format -----------------
+       ((equal (eval wtype) 'format)
+       (gnuplot-gui-format tag default))
+       ;;------------------------------ file -------------------
+       ((equal (eval wtype) 'file)
+       (gnuplot-gui-file tag default prefix))
+       ;;------------------------------ labels -----------------
+       ((equal (eval wtype) 'labels)
+       (gnuplot-gui-labels tag default))
+       ;;------------------------------ text -------------------
+       ((equal (eval wtype) 'text)
+       (let ((str (gnuplot-gui-type-default this)))
+         (put-text-property 0 (length str) 'face 'gnuplot-gui-flat-text-face 
str)
+         (widget-insert str "\n")))
+       ;;------------------------------ unknown ----------------
+       (t
+       (let ((str (concat "<" (downcase tag) "> ('"
+                          (symbol-name (eval wtype))
+                          " arguments are not yet supported)\n")))
+         (put-text-property 0 (length str) 'face 'gnuplot-gui-error-face str)
+         (widget-insert str)) )))
+    (setq alist (cdr alist)))
+  ;; insert control buttons: [Set options]   [Reset]   [Clear]   [Cancel]
+  (widget-insert "\n\t")
+  (widget-create 'push-button
+                :value "Set options"
+                :doc item
+                :button-face 'gnuplot-gui-button-face
+                :help-echo "Push this button to set options"
+                :notify
+                (lambda (widget &rest ignore)
+                  (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+                  (delete-frame)
+                  (select-frame gnuplot-current-frame)
+                  (switch-to-buffer gnuplot-current-buffer)
+                  (goto-char gnuplot-current-buffer-point)
+                  (gnuplot-gui-post-process-alist
+                   (widget-get widget :doc))
+                  (let ((alist gnuplot-gui-alist) marker
+                        (eol (save-excursion (end-of-line) (point-marker) )) )
+                    (if (re-search-forward ";" eol "to_limit")
+                        (backward-char 1))
+                    (delete-region gnuplot-current-buffer-point (point-marker))
+                    (delete-horizontal-space)
+                    (setq marker (point-marker))
+                    (while alist
+                      (let ((val (cdar alist)))
+                        (if (string-match "^\\s-+$" val) ()
+                          (if (string-match "^['\"]\\(.*\\)['\"]$" val)
+                              (setq val (concat gnuplot-quote-character
+                                                (match-string 1 val)
+                                                gnuplot-quote-character)))
+                          (insert (format " %s" val))))
+                      (setq alist (cdr alist)))
+                    (setq eol (point-marker))
+                    (goto-char marker)
+                    (while (< (point) eol) ; a few odd cases
+                      (unless (looking-at (concat "[" (regexp-quote "(")
+                                                  (regexp-quote "*") ",]"))
+                        (just-one-space))
+                      (forward-sexp)))
+                  (delete-horizontal-space)
+                  (if (string= "terminal" (widget-get widget :doc))
+                      (gnuplot-gui-set-options-and-insert)) ))
+  (widget-insert "   ")
+  (widget-create 'push-button :value "Reset"
+                :help-echo "Push this button to reset all values"
+                :button-face 'gnuplot-gui-button-face
+                :doc item
+                :notify
+                (lambda (widget &rest ignore)
+                  (let ((word (widget-get widget :doc)))
+                    (gnuplot-gui-set-alist word gnuplot-gui-current-string)
+                    (gnuplot-gui-prompt-for-frame word t))))
+  (widget-insert "   ")
+  (widget-create 'push-button :value "Clear"
+                :help-echo "Push this button to clear all values"
+                :button-face 'gnuplot-gui-button-face
+                :doc item
+                :notify
+                (lambda (widget &rest ignore)
+                  (let* ((word (widget-get widget :doc))
+                         (alist (cdr (assoc word gnuplot-gui-all-types))))
+                    (while alist
+                      (setcdr (assoc (gnuplot-gui-type-tag (car alist))
+                                     gnuplot-gui-alist)
+                              (gnuplot-gui-type-default (car alist)))
+                      (setq alist (cdr alist)))
+                    (gnuplot-gui-prompt-for-frame word t))) )
+  (widget-insert "   ")
+  (widget-create 'push-button :value "Cancel"
+                :help-echo "Quit setting options and dismiss frame"
+                :button-face 'gnuplot-gui-button-face
+                :notify (lambda (widget &rest ignore)
+                          (kill-buffer (get-buffer-create "*Gnuplot GUI*"))
+                          (setq gnuplot-gui-alist nil
+                                gnuplot-gui-current-string nil)
+                          (delete-frame)
+                          (select-frame gnuplot-current-frame)))
+  (goto-char (point-min))
+  (use-local-map widget-keymap)
+  (widget-setup))
+
+
+;;; widgets
+
+(defface gnuplot-gui-menu-face '((((class color) (background light))
+                                 (:bold t :foreground "darkolivegreen"))
+                                (((class color) (background dark))
+                                 (:bold t :foreground "seagreen"))
+                                (t
+                                 (:italic t)))
+  "Face used for menu-buttons."
+  :group 'gnuplot-faces)
+(defface gnuplot-gui-button-face '((((class color) (background light))
+                                 (:bold t :foreground "sienna"))
+                                (((class color) (background dark))
+                                 (:bold t :foreground "tan"))
+                                (t
+                                 (:italic t)))
+  "Face used for push-buttons.
+Only used in Emacs.  XEmacs displays push-buttons with a pixmap."
+  :group 'gnuplot-faces)
+(defface gnuplot-gui-labels-face '((((class color) (background light))
+                                   (:bold t :foreground "darkslateblue"))
+                                  (((class color) (background dark))
+                                   (:bold t :foreground "lightslateblue"))
+                                  (t
+                                   (:italic t)))
+  "Face used for insert and delete button in the labels widget."
+  :group 'gnuplot-faces)
+
+(defun gnuplot-gui-menu-choice (item default list &optional starred)
+  "Create a menu widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT
+is the default argument value, LIST contains the items for the pop-up
+menu.  STARRED is true if this a 'list* widget."
+  (let ((widget
+        (apply 'widget-create
+               'menu-choice :value default :tag item :doc starred
+               :button-face 'gnuplot-gui-menu-face
+               :button-prefix "[" :button-suffix "]"
+               :help-echo (format "Mouse-2 to view the %S menu" (downcase 
item))
+               :notify
+               (lambda (widget &rest ignore)
+                 (let ((lab (if (widget-get widget :doc)
+                                (concat (downcase (widget-get widget :tag)) " 
")
+                              "" )))
+                   (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
+                           (if (string= (widget-value widget) " ") ""
+                             (format "%s%s" lab (widget-value widget))) )))
+               (mapcar (lambda (x) (list 'item :value x))
+                       list))))
+    (widget-value-set widget default)
+    (if (and starred (not (string-match "^\\s-*$" default)))
+       (setcdr (assoc item gnuplot-gui-alist)
+               (format "%s %s" (downcase item) default)))
+    widget))
+
+(defun gnuplot-gui-number (item default &optional prefix)
+  "Create a number widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT
+is the default value for the widget, PREFIX is a text string preceding
+the numerical argument."
+  (let ((help-label (or prefix (downcase item))))
+    (widget-insert (capitalize item) ": ")
+    (widget-create 'editable-field
+                  :size 2 :tag item :value default :doc prefix
+                  :help-echo (format "Insert new value of %S here" help-label)
+                  :notify (lambda (widget &rest ignore)
+                            (let ((val (widget-value widget))
+                                  (pre (concat (widget-get widget :doc) " ")))
+                              (setcdr (assoc (widget-get widget :tag)
+                                             gnuplot-gui-alist)
+                                      (if (string-match
+                                           "^\\s-*[-0-9.*]+\\s-*$" val)
+                                          (format "%s%s" pre val) "") )))))
+  (unless (string-match "^\\s-*$" default)
+    (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" prefix default)))
+  (widget-insert " " (make-string (- 40 (current-column)) ?.)
+                " (numeric value)\n"))
+
+(defun gnuplot-gui-string (item default &optional width_or_prefix starred)
+  "Create a string widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT is
+the default value for the widget, and WIDTH_OR_PREFIX is the width of
+the text entry field (which defaults to half the frame width) or the
+prefix for the string.  STARRED is t if quotes are not to be used."
+  (let ((help-label (downcase item)) width (prefix "") (pp ""))
+    (cond ((stringp width_or_prefix)
+          (setq prefix width_or_prefix
+                pp prefix)
+          (if starred (setq prefix (concat prefix "_star"))) )
+         ((numberp width_or_prefix)
+          (setq width width_or_prefix)))
+    (setq width (or width (/ (frame-width) 2)))
+    (if (string-match "^['\"]" default)
+       (setq default (replace-match "" nil nil default)))
+    (if (string-match "['\"]$" default)
+       (setq default (replace-match "" nil nil default)))
+    (widget-insert (capitalize item) ": ")
+    (widget-create
+     'editable-field
+     :size width :tag item :doc prefix :value default
+     :help-echo (format "Insert new value of %S here" help-label)
+     :notify (lambda (widget &rest ignore)
+              (let ((val (widget-value widget))
+                    (q gnuplot-quote-character)
+                    (p (widget-get widget :doc)) )
+                (setcdr (assoc (widget-get widget :tag) gnuplot-gui-alist)
+                        (if (string-match "^\\s-*$" val)
+                            ""
+                          (progn
+                            (if (string-match "_star$" p)
+                                (setq p (concat (substring p 0 -5) " ")
+                                      q ""))
+                            (if (string-match "^\\s-+" val)
+                                (setq val (replace-match "" nil nil val)))
+                            (if (string-match "\\s-+$" val)
+                                (setq val (replace-match "" nil nil val)))
+                            (format "%s%s%s%s" p q val q)))))))
+    (unless (string-match "^\\s-*$" default)
+      (setcdr (assoc item gnuplot-gui-alist) (format "%s %s" pp default)))
+    (widget-insert "\n")))
+
+(defun gnuplot-gui-format (item default)
+  "Create a string widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT is
+the default value for the widget, and WIDTH_OR_PREFIX is the width of
+the text entry field (which defaults to half the frame width) or the
+prefix for the string."
+  (if (string-match "^['\"]" default)
+      (setq default (replace-match "" nil nil default)))
+  (if (string-match "['\"]$" default)
+      (setq default (replace-match "" nil nil default)))
+  (widget-insert (capitalize item) ": ")
+  (widget-create 'editable-field
+                :size (/ (frame-width) 3) :tag item :value default
+                :help-echo (format "Insert new format string here")
+                :notify (lambda (widget &rest ignore)
+                          (let ((val (widget-value widget)))
+                            (setcdr (assoc (widget-get widget :tag)
+                                           gnuplot-gui-alist)
+                                    (format "%s%s%s"
+                                            gnuplot-quote-character
+                                            val
+                                            gnuplot-quote-character)))))
+  (widget-insert "   ")
+  (widget-create 'gnuplot-gui-info-link
+                :tag (concat "info on format")
+                :help-echo "Open a frame displaying the info entry for format"
+                :value "format")
+  (widget-insert "\n"))
+
+
+;; swiped from widget-color-complete
+(defun gnuplot-gui-file-completion (widget)
+  "Complete the filename in WIDGET."
+  (let* ((str (buffer-substring-no-properties (widget-field-start widget)
+                                             (point)))
+        (file (or (file-name-nondirectory str) ""))
+        (dir  (or (file-name-directory str) "./"))
+        (val  (file-name-completion file dir)) )
+    (cond ((eq val t)
+          (message "Exact match"))
+         ((null val)
+          (error "Can't find completion for \"%s\"" str))
+         ((not (string-equal str val))
+          (insert (substring val (length file))))
+         (t
+          (message "Making completion list...")
+          (let ((list (file-name-all-completions file dir)))
+            (with-output-to-temp-buffer "*Completions*"
+              (display-completion-list list)))
+          (message "Making completion list...done")))))
+
+(defun gnuplot-gui-file (item default &optional tag)
+  "Create a file widget for the Gnuplot GUI.
+ITEM is the object whose arguments is set by this widget, DEFAULT is
+the default value for the argument.  TAG is non-nil if ITEM rather than
+\"File:\" is to be used as the tag."
+  (setq tag (if tag (capitalize item) "File"))
+  (if (string-match "^['\"]" default)
+      (setq default (replace-match "" nil nil default)))
+  (if (string-match "['\"]$" default)
+      (setq default (replace-match "" nil nil default)))
+  (let ((widg (widget-create
+              'file
+              :value default :tag tag
+              :size (- (/ (frame-width) 2) 3)
+              :doc item :help-echo "Insert a filename here"
+              :complete 'gnuplot-gui-file-completion
+              :notify
+              (lambda (widget &rest ignore)
+                (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
+                        (format "%s%s%s" gnuplot-quote-character
+                                (widget-value widget)
+                                gnuplot-quote-character)) )) ))
+    (widget-insert " ")
+    (widget-create
+     'push-button :value "Browse"
+     :doc item :help-echo "Browse directories for a filename."
+     :parent widg
+     :notify (lambda (widget &rest ignore)
+              (let ((fname (file-relative-name (read-file-name "File: ")
+                                               default-directory))
+                    (q gnuplot-quote-character))
+                (widget-value-set (widget-get widget :parent) fname)
+                (setcdr (assoc (widget-get widget :doc) gnuplot-gui-alist)
+                        (format "%s%s%s" q fname q))
+                (widget-setup))))
+    (widget-insert "\n")))
+
+(defun gnuplot-gui-labels (item default)
+  "Create a labels widget for the Gnuplot GUI.
+ITEM is the object whose arguments is set by this widget, DEFAULT is
+the default value for the argument."
+  (widget-create
+   '(editable-list
+     (list :inline t :tag "Tic label"
+          (string :tag "label" :size 10
+                  :help-echo "Enter the tic label here" )
+          (string :tag "  position" :size 10
+                  :help-echo "Enter an expression for the tic location here" 
)))
+                :tag (capitalize item)
+                :value default
+                :format "%{%t%}:\n%v\t  %i\n"
+                :entry-format "\t  %i %d %v\n"
+                :button-face 'gnuplot-gui-labels-face
+                :notify (lambda (widget &rest ignore)
+                          (setcdr (assoc (upcase (widget-get widget :tag))
+                                         gnuplot-gui-alist)
+                                  (widget-value widget)))))
+
+(defun gnuplot-gui-range (item default separator is-range)
+  "Create a range or pair widget for the Gnuplot GUI.
+ITEM is the object whose arguments are set by this widget, DEFAULT is
+the default value for the widget, SEPARATOR is a text string preceding
+the numerical argument, or the prefix for a pair operator.  IS-RANGE
+is non-nil if this is a 'range widget."
+  (widget-insert (capitalize item) ": ")
+  (if is-range (widget-insert "["))
+  (widget-create 'editable-field
+                :size 4 :tag item :value (car default)
+                :help-echo (format "Insert the first value of the %S here"
+                                   (downcase item))
+                :notify (lambda (widget &rest ignore)
+                          (setcar (cdr (assoc (widget-get widget :tag)
+                                              gnuplot-gui-alist))
+                                  (format "%s" (widget-value widget)))))
+  (if is-range (widget-insert separator) (widget-insert "  "))
+  (widget-create 'editable-field
+                :size 4 :tag item :value (cdr default)
+                :help-echo (format "Insert the second value of the %S here"
+                                   (downcase item))
+                :notify (lambda (widget &rest ignore)
+                          (setcdr (cdr (assoc (widget-get widget :tag)
+                                              gnuplot-gui-alist))
+                                  (format "%s" (widget-value widget)))))
+  (if is-range (widget-insert "]"))
+  (widget-insert " " (make-string (- 39 (current-column)) ?.)
+                " (numeric values)\n"))
+
+
+;; suppress compiler warning
+;;(eval-when-compile (defun gnuplot-info-lookup-symbol (sym mode)))
+(define-widget 'gnuplot-gui-info-link 'info-link
+  "A link to an info file for the Gnuplot GUI."
+  :action '(lambda (widget &optional event)
+            (let ((gnuplot-info-display 'frame))
+              (if gnuplot-keywords-pending             ; <HW>
+                  (gnuplot-setup-info-look))
+              (gnuplot-info-lookup-symbol (widget-value widget)
+                                          'gnuplot-mode))))
+
+
+;;; just about done
+
+(provide 'gnuplot-gui)
+;;;============================================================================
+;;;
+;;; gnuplot-gui.el ends here
diff --git a/gnuplot.el b/gnuplot.el
new file mode 100644
index 0000000..f1022cb
--- /dev/null
+++ b/gnuplot.el
@@ -0,0 +1,2576 @@
+;;;; gnuplot.el -- drive gnuplot from within emacs
+
+;; Copyright (C) 1998 Phil Type and Bruce Ravel, 1999-2002 Bruce Ravel
+
+;; Author:     Bruce Ravel <ravel@phys.washington.edu> and Phil Type
+;; Maintainer: Bruce Ravel <ravel@phys.washington.edu>
+;; Created:    June 28 1998
+;; Updated:    December 13, 2002
+;; Version:    0.6.0
+;; Keywords:   gnuplot, plotting
+
+;; This file is not part of GNU Emacs.
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+;;
+;; This lisp script is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+;;
+;; Permission is granted to distribute copies of this lisp script
+;; provided the copyright notice and this permission are preserved in
+;; all copies.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program; if not, you can either send email to this
+;; program's maintainer or write to: The Free Software Foundation,
+;; Inc.; 675 Massachusetts Avenue; Cambridge, MA 02139, USA.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; send bug reports to the author (ravel@phys.washington.edu)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Commentary:
+;;
+;; This is a major mode for composing gnuplot scripts and displaying
+;; their results using gnuplot.  It is optimized for use with gnuplot
+;; 3.7 or one of the later patchlevels of "version 3.6".  It should
+;; also work very handily with version 3.5.  This mode offers several
+;; tools to help you compose your scripts, including syntax
+;; colorization using either font-lock or hilit19, a syntax table
+;; appropriate to gnuplot, key bindings, pull-down menus, indentation,
+;; keyword completions and variable customization using the Custom
+;; package.  Once the script is composed, there are several function
+;; for sending some or all of the script to gnuplot.  The interaction
+;; with the gnuplot process is within a comint buffer.
+;;
+;;    C-c C-l       send current line to gnuplot
+;;    C-c C-v       send current line to gnuplot and move forward 1 line
+;;    C-c C-r       send current region to gnuplot
+;;    C-c C-b       send entire buffer to gnuplot
+;;    C-c C-f       send a file to gnuplot
+;;    C-c C-i       insert filename at point
+;;    C-c C-n       negate set option on current line
+;;    C-c C-c       comment region
+;;    C-c C-o       set arguments for command at point
+;;   S-mouse-2      set arguments for command under mouse cursor
+;;    C-c C-h       read the gnuplot info file
+;;    C-c C-e       show-gnuplot-buffer
+;;    C-c C-k       kill gnuplot process
+;;    C-c C-u       submit a bug report about gnuplot-mode
+;; M-tab or M-ret   complete keyword before point
+;;      ret         newline and indent
+;;      tab         indent current line
+;;
+;; Gnuplot-mode adds two key bindings to the comint buffer:
+;;     M-C-p        plot the current script buffer line-by-line
+;;     M-C-f        save the current script buffer and load that file
+;;
+;; These two functions are useful for starting up gnuplot-mode.
+;;
+;; M-x gnuplot-mode
+;;         start gnuplot-mode in the current buffer
+;;
+;; M-x gnuplot-make-buffer
+;;         open a new buffer (which is not visiting a file) and start
+;;         gnuplot-mode in that buffer
+;;
+;; ---------------------------------------------------------------------
+;;
+;; Other lisp files used by gnuplot.el
+;;
+;; info-look.el (comes with GNU Emacs 20):
+;;   This provides the interface to the gnuplot-info file and provides
+;;   on-line help and keyword completion functionality.  The version
+;;   of info-look.el that comes with version 20.2 of Emacs contains a
+;;   bug that will impede its interaction with the gnuplot info file.
+;;   You should use the version from the gnuplot-mode homepage
+;;   instead.  info-look is not distributed with XEmacs and so should
+;;   be installed along with gnuplot-mode when using XEmacs.
+;;
+;; gnuplot-gui.el (written by Bruce):
+;;   Defines the GUI interface for setting setting arguments to
+;;   gnuplot options.  This uses the widget package extensively.
+;;
+;; ---------------------------------------------------------------------
+;;
+;; This mode was inspired by the original gnu-plot-mode by Gershon
+;; Elber, which is distributed with gnuplot itself and which dates
+;; back to the early 90's.  Although this mode encompasses the
+;; functionality of the original, the two share no code and the
+;; current implementation takes advantage of many features of modern
+;; versions of emacs and adheres (or so I intend) to the major mode
+;; conventions described in the emacs-lisp reference for version 19
+;; and later.
+;;
+;; ---------------------------------------------------------------------
+;;
+;;                         Installation
+;;                         ============
+;;
+;; A recent version of this file can be found at
+;;   http://feff.phys.washington.edu/~ravel/software/gnuplot-mode/
+;;
+;; To autoload gnuplot-mode on any file with gp extension, put this in
+;; your .emacs file
+;;   (autoload 'gnuplot-mode "gnuplot" "gnuplot major mode" t)
+;;   (autoload 'gnuplot-make-buffer "gnuplot" "open a buffer in gnuplot-mode" 
t)
+;;
+;; Something like
+;;   (setq auto-mode-alist (append '(("\\.gp$" . gnuplot-mode))
+;;                                auto-mode-alist))
+;; is useful for having files ending in .gp start up in gnuplot-mode.
+;;
+;; Something like
+;;   (global-set-key [(f9)] 'gnuplot-make-buffer)
+;; may be useful.  This binds f9 to the function that opens a scratch
+;; buffer (i.e. one that is not visiting a file) in gnuplot-mode.
+;; This is handy for your quick 'n' dirty plotting chores.
+;;
+;; To use the `gnuplot-info-lookup-symbol' function, the file
+;; gnuplot.info MUST be installed somewhere that info can find it.
+;; This means you must either:
+;;   1.  Copy gnuplot.info to the normal info directory or
+;;   2.  Make sure info can find gnuplot.info by putting this in your
+;;       .emacs file:
+;;         (setenv "INFOPATH"
+;;           (concat (getenv "INFOPATH") ":"
+;;                    (expand-file-name "/path/to/file")))
+;;       where "/path/to/file" is the location of gnuplot.info
+;;
+;; This had been tested extensively with Emacs 19.34 and 20.2 and
+;; XEmacs 20.3 and in a limited manner with Emacs 19.30 and XEmacs
+;; 19.14.
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; History:
+;;
+;;  0.1   Jun 25 1998 Finished with initial release.
+;;  0.2   Sep  4 1998 Added filename insertion, indentation, and
+;;        colorization/completion in comint buffer. <BR>
+;;  0.2a  Sep 11 1998 made `indent-line-function' buffer-local (whoops!)
+;;        and fixed some stuff in the installation script <BR>
+;;  0.3   Sep 12 1998 include insertions menu <BR>
+;;  0.3a  Sep 14 1998 fixed bug finding info file if missing, fixed bug
+;;        starting font-lock, fixed bug re overwriting files in
+;;        installation script <BR>
+;;  0.3b  Sep 15 1998 Added (require 'info) to `(eval-and-compile'
+;;        clause, Added (kill-all-local-variables) to `gnuplot-mode',
+;;        altered order of:-
+;;            (provide 'gnuplot)
+;;            (run-hooks 'gnuplot-load-hook)
+;;        at the end of the file in case something in the load hook
+;;        requires gnuplot (oh not that old one again...), added
+;;        `gnuplot-comint-setup-hook', corrected `gnuplot-mark-active'
+;;        which caused an error to be raised by (mark) when the mark
+;;        was inactive <DB>  Some changes to font-lock rules <LB>&<BR>
+;;  0.4   Nov 14 1998 <BR> Use info-look for info interface.  No
+;;        change to gnuplot-mode user interface, but cleaner code.
+;;        With info-look, the help funcion works regardless of the
+;;        version number of gnuplot.  Also, `gnuplot-keywords' (used
+;;        for help, keyword-completion, and hilit19 highlighting) is
+;;        now generated automatically.
+;;  0.4a  Nov 18 1998 <BR> info-look leaves a couple of really useless
+;;        buffers lying around so I cleaned them up.  Also fixed
+;;        font-lock rules so that things in quotes get highlighted
+;;        correctly and the surrounding text is unhighlighted.  Fixed
+;;        up font-lock rules for plot and splot.  Added
+;;        `gnuplot-send-line-and-forward' as suggested by <MD>.
+;;  0.4b  Nov 21 1998 <BR> added toolbar for xemacs -- see file
+;;        gnuplot-toolbar.el.  fixed error message in plot line
+;;        function when line is empty.  option added to display the
+;;        comint buffer showing the gnuplot process in a separate
+;;        frame
+;;  0.4c  Minor stuff: Nov 30 1998 <BR> fixed highlighting in comint
+;;        buffer.  fixed frame behavior.  added "[:]" to range
+;;        insertions.  added :link to defgroup.  Dec 1 1998 <BR> fixed
+;;        some mismatched defcustoms.  added a few lines to suppress
+;;        some compile-time warnings.  Dec 3 1998 <BR> Fixed behavior
+;;        of filename insertion function.  Added more :links to
+;;        defgroup.
+;;  0.4d  Dec 6 1998 <BR> Added function gnuplot-setup-info-look and
+;;        variable gnuplot-info-hook to handle various versions of the
+;;        gnuplot info file.
+;;  0.4e  Dec 12 1998 <BR> Split up gnuplot-insertions-menu for ease of
+;;        custimization, put menubar initialization in a function.
+;;  0.4f  Dec 14 1998 <BR> defcustom the insertions submenus, add
+;;        gnuplot-insertion-menu-flag, intelligent Makefile knows
+;;        which info-look to compile
+;;  0.5   Dec 27 1998 <BR> wrote initial draft of gnuplot-gui.el,
+;;        included it in insertions menu and in `gnuplot-insert'.
+;;        Negate option function, bound to C-c C-n. Dec 29 1998 <BR>
+;;        C-c C-h with no response goes to Commands menu.  Transparent
+;;        toolbar icons.  Replace kw-compl with a simple completion
+;;        function.  Put gnuplot-toolbar code in gnuplot.el.
+;;  0.5a  Jan 23 1999 <BR> send file uses the load command.  add
+;;        gnuplot-plot-from-comint and
+;;        gnuplot-save-and-plot-from-comint and keybindings in the
+;;        comint buffer.  do (process-kill-without-query
+;;        gnuplot-process nil).  `gnuplot-negate-option' checks if set
+;;        option has a negated form.
+;;  0.5b  `gnuplot-kill-gnuplot-buffer' made more robust.  fixed a bug
+;;        in `gnuplot-plot-from-comint'.  fixed description of
+;;        gnuplot-faces group.
+;;  0.5c  update copyright information, update gpelcard
+;;  0.5d  Mar 20 1999 <BR> adopt installation materials from <LH>.  Add
+;;        some support for hidden3d.  Use constants in types alists in
+;;        gui.  Various other minor improvements to the types alists.
+;;  0.5e  Apr 6 1999 <BR> at the suggestion of <SE> I did away with the
+;;        gnuplot-which-highlight variable and revamped how
+;;        colorization gets turned on.  This is a bit tricky since I
+;;        want it to work with font-lock under emacs and xemacs and
+;;        with hilit19.  Apr 11 1999 <BR> insert space at end of
+;;        unique completion.  add a few GUI types, rewrite some stuff
+;;        in the GUI interface.  primitive support for plot, splot,
+;;        and fit.  Fixed completion in file widget.
+;;  0.5f  May 15 1999 <BR> Add pgnuplot.c and Win9x install instructions
+;;        to the distribution.  Fixed a defface bug.  Added
+;;        `gnuplot-keywords-when' allowing deferral of parsing the
+;;        info file.
+;;  0.5g  May 27 1999 <BR> Fixed font-locking of strings and
+;;        comments.  Figure out gnuplot-version number from startup
+;;        message and set `gnuplot-echo-command-line-flag'
+;;        accordingly.  Added `gnuplot-program-version' variable.
+;;        Check that font-lock is actually a feature, as suggested by
+;;        <KL>
+;;  0.5h  Aug 15 1999 <BR> Added `gnuplot-determine-gnuplot-version' so
+;;        that the gnuplot version number and `comint-process-echos'
+;;        actually get set correctly.  Actually, the first time
+;;        something is plotted, the echoing might not work, but the
+;;        second time it will.
+;;  0.5i  Sep  2 1999 <BR> Once again changed how
+;;        `comint-process-echos' gets set.  Maybe I got it right this
+;;        time?  Also fixed certain situations where the info file
+;;        did notget properly loaded (insertion with info toggle on
+;;        and info button in GUI).
+;;  0.5j  Sep  9 1999 <BR> Do a more robust check for the gnuplot
+;;        process before killing the gnuplot buffer, as suggested by
+;;        <SE>.
+;;  0.5k  Sep 22 1999 <BR> make `gnuplot-send-line-and-forward' skip
+;;        over blank and comment lines as suggested by <SE>.  Jan 10
+;;        2000 Bound C-c C-j to `gnuplot-forward-script-line'.
+;;  0.5l  Nov 16 2000 <BR> support for pm3d in gnuplot-gui and in plot
+;;        options insertions menu.  mentioned pm3d in gpelcard. gui
+;;        support for x11 pm3d and vgagl terms.
+;;        `gnuplot-negate-option' works with new syntax.
+;;  0.5m  Nov 17 2000 <BR> add colorization and gui support for new
+;;        commands in 3.8.  gui support for emf term. gui support for
+;;        new "set style" syntax.  much better scheme for determining
+;;        gnuplot version number + make better use of it.
+;;  0.5n  Jan 4 2001 <BR> corrected a serious problem interacting with
+;;        speedbar
+;;  0.5o  skipped
+;;  0.5p  Mar 14 2001 <BR> fixed problem with toolbar creation and
+;;        speedbar clicking
+;;  0.5q  May 30 2001 <BR> added font-lock bindings for words associated
+;;        with plotting
+;;  0.5r  Oct 17 2001 <BR> Incorporate two suggestions by <RF>, bind
+;;        C-c C-c to comment-region and C-c C-o to the GUI, also make
+;;        C-c C-l respect continuation lines
+;;        April 12, 2002 <BR> added feature to trim length of gnuplot
+;;        process buffer
+;;  0.5s  Jun 7 2002 <BR> Yet again changed how `comint-process-echos'
+;;        gets set.  It really needs to be nil on NTEmacs 21.1 or
+;;        comint gets stuck in an infinate loop.
+;;  0.5t  Sep 16 2002 <BR> Fixed a problem with C-c C-v jumping
+;;        forward 2 lines at a time
+;;  0.6.0 Dec 13 2002 <BR> Changed numbering scheme to accommodate
+;;        gnuplot packaging requirements
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Acknowledgements:
+;;    David Batty       <DB> (numerous corrections)
+;;    Laurent Bonnaud   <LB> (suggestions regarding font-lock rules)
+;;    Markus Dickebohm  <MD> (suggested `gnuplot-send-line-and-forward')
+;;    Stephen Eglan     <SE> (suggested the use of info-look,
+;;                            contributed a bug fix regarding shutting
+;;                            down the gnuplot process, improvement to
+;;                            `gnuplot-send-line-and-forward')
+;;    Robert Fenk       <RF> (suggested respecting continuation lines)
+;;    Michael Karbach   <MK> (suggested trimming the gnuplot process buffer)
+;;    Alex Chan Libchen <AL> (suggested font-lock for plotting words)
+;;    Kuang-Yu Liu      <KL> (pointed out buggy dependence on font-lock)
+;;    Hrvoje Niksic     <HN> (help with defcustom arguments for insertions)
+;;    Andreas Rechtsteiner <AR> (pointed out problem with C-c C-v)
+;;    Michael Sanders   <MS> (help with the info-look interface)
+;;    Jinwei Shen       <JS> (suggested functionality in comint buffer)
+;;    Michael M. Tung   <MT> (prompted me to add pm3d support)
+;;    Holger Wenzel     <HW> (suggested using `gnuplot-keywords-when')
+;;    Wolfgang Zocher   <WZ> (pointed out problem with gnuplot-mode + speedbar)
+;;  and especially to Lars Hecking <LH> for including gnuplot-mode
+;;  with the gnuplot 3.7-beta distribution and for providing me with
+;;  installation materials
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; To Do:
+;;
+;; 1. Since `gnuplot-display-process' can be nil, it would be
+;;    handy to have a function to put on
+;;    `gnuplot-after-plot-buffer-hook' to check and see if the script
+;;    executed properly.  Alas I am not sure how gnuplot signals its
+;;    errors.
+;; 2. improve plot, splot, fit in GUI
+;; 3. interface to setting bind command using `read-key-sequence'.
+;;    this is a pain because the nomenclature is really different in
+;;    gnuplot than in `read-key-sequence'
+;;
+;;; Bugs:
+;;
+;; -- indentation is not quite right (but close)
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; Code:
+
+(require 'comint)
+(require 'easymenu)
+
+
+;;; --- variable definitions + eval-and-compile clauses
+
+;; handle defcustom
+(eval-and-compile
+  (condition-case ()
+      (require 'custom)
+    (error nil))
+  (if (and (featurep 'custom) (fboundp 'custom-declare-variable))
+      nil ;; We've got what we needed
+    ;; We have the old custom-library, hack around it!
+    (if (fboundp 'defgroup)
+        nil
+      (defmacro defgroup (&rest args)
+        nil))
+    (if (fboundp 'defface)
+        nil
+      (defmacro defface (var values doc &rest args)
+        (` (progn
+             (defvar (, var) (quote (, var)))
+             ;; To make colors for your faces you need to set your .Xdefaults
+             ;; or set them up ahead of time in your .emacs file.
+             (make-face (, var))
+             ))))
+    (if (fboundp 'defcustom)
+        nil
+      (defmacro defcustom (var value doc &rest args)
+        (` (defvar (, var) (, value) (, doc)))))))
+
+;; (eval-and-compile
+;;   (condition-case ()
+;;       (require 'kw-compl)
+;;     (error nil)))
+(eval-and-compile  ;; <DB>
+  (require 'info))
+(eval-and-compile
+  (condition-case ()
+      (require 'info-look)
+    (error nil)))
+;; this just gets rid of an annoying compile time error message
+;; (eval-when-compile
+;;   (defun gnuplot-dummy ())
+;;   (defalias 'hilit-set-mode-patterns 'gnuplot-dummy))
+
+
+(defconst gnuplot-xemacs-p (string-match "XEmacs" (emacs-version)))
+(defconst gnuplot-ntemacs-p (string-match "msvc" (emacs-version)))
+(defvar   gnuplot-three-eight-p "")
+
+(defconst gnuplot-maintainer "Bruce Ravel")
+(defconst gnuplot-maintainer-email "ravel@phys.washington.edu")
+(defconst gnuplot-maintainer-url
+  "http://feff.phys.washington.edu/~ravel/software/gnuplot-mode/";)
+(defconst gnuplot-version "0.6.0")
+
+(defgroup gnuplot nil
+  "Gnuplot-mode for Emacs."
+  :prefix "gnuplot-"
+  :group 'processes
+  :group 'applications
+  :group 'local
+  :link '(emacs-library-link :tag "Lisp File" "gnuplot.el")
+  :link '(url-link :tag "Homepage"
+                  
"http://feff.phys.washington.edu/~ravel/software/gnuplot-mode/";)
+  :link '(custom-manual "(gnuplot)Top")
+  :link '(emacs-commentary-link :tag "Commentary" "gnuplot.el") )
+(defgroup gnuplot-insertions nil
+  "Insert commands into gnuplot-scripts from a pull-down menu."
+  :prefix "gnuplot-insertions-"
+  :group 'gnuplot)
+(defgroup gnuplot-hooks nil
+  "Hook variables used by `gnuplot-mode'."
+  :prefix "gnuplot-"
+  :group 'gnuplot)
+
+(defcustom gnuplot-mode-hook nil
+  "*Hook run when `gnuplot-mode' is entered."
+  :group 'gnuplot-hooks
+  :type 'hook)
+(defcustom gnuplot-load-hook nil
+  "*Hook run when gnuplot.el is first loaded."
+  :group 'gnuplot-hooks
+  :type 'hook)
+(defcustom gnuplot-after-plot-hook nil
+  "*Hook run after gnuplot plots something.
+This is the last thing done by the functions for plotting a line, a
+region, a buffer, or a file."
+  :group 'gnuplot-hooks
+  :type 'hook)
+(defcustom gnuplot-info-hook nil
+  "*Hook run before setting up the info-look interface.
+This hook is necessary to handle inconsistencies in versions of and
+sources of the gnuplot info file.  If Gnuplot-mode can find the info
+file generated from the 3.6beta patchlevel 347 (or later) release of
+Gnuplot, then this hook probably is not necessary.  Some versions of
+the info file may have a General Index session, which can be used by
+info-look.  In that case the following (or something similar with the
+value of `info-lookup-symbol-alist' altered appropriately) should be
+placed in the .emacs file.
+
+Emacs version 20.2 ships with a different version of info-look that
+does 20.3.  If you use any version of Emacs 19, you must use the
+version from 20.2.  Any version of XEmacs 20 or 21 should use the
+version from 20.3 but can use either.  XEmacs 19 should use the
+version 20.2.
+
+For the newer version of info-look, do this:
+
+  (add-hook \'gnuplot-info-hook
+           \'(lambda ()
+              (let ((elem (assoc \'gnuplot-mode info-lookup-alist)))
+                (delete elem info-lookup-alist)
+                (info-lookup-maybe-add-help
+                 :mode 'gnuplot-mode :topic 'symbol
+                 :regexp \"[a-zA-Z][_a-zA-Z0-9]*\"
+                 :doc-spec '((\"(gnuplot)General Index\" nil
+                              \"[_a-zA-Z0-9]+\"))))))
+
+For the older version of info-look, do this:
+
+  (add-hook \'gnuplot-info-hook
+           \'(lambda ()
+              (let ((elem (assoc \'gnuplot-mode info-lookup-alist)))
+                (delete elem info-lookup-alist)
+                (setq info-lookup-alist
+                      (append info-lookup-alist
+                              \'((gnuplot-mode
+                                 \"[a-zA-Z][_a-zA-Z0-9]*\" nil
+                                 ((\"(gnuplot)General Index\" nil
+                                   \"[_a-zA-Z0-9]+\" )))))))))"
+  :group 'gnuplot-hooks
+  :type 'hook)
+;; comint hook suggested by <DB>
+(defcustom gnuplot-comint-setup-hook nil
+  "*Hook run after setting up the gnuplot buffer in comint mode.
+So the configuration can be customised by the user."
+  :group 'gnuplot-hooks
+  :type 'hook)
+(defvar gnuplot-recently-sent nil
+  "This is a record of the most recent kind of text sent to gnuplot.
+It takes as its value nil, 'line, 'region, 'buffer, or 'file.  It is
+useful for functions included in `gnuplot-after-plot-hook'.")
+(make-variable-buffer-local 'gnuplot-recently-sent)
+
+(defcustom gnuplot-program "gnuplot"
+  "*The name of the gnuplot executable."
+  :group 'gnuplot
+  :type 'string)
+(defvar gnuplot-program-version nil
+  "Version number of gnuplot.
+This is found using `gnuplot-determine-gnuplot-version")
+(defcustom gnuplot-process-name "gnuplot"
+  "Name given to the gnuplot buffer and process."
+  :group 'gnuplot
+  :type 'string)
+(defvar gnuplot-buffer nil
+  "*The name of the buffer displaying the gnuplot process.")
+(defvar gnuplot-process nil
+  "Variable holding the process handle.")
+(defvar gnuplot-process-frame nil
+  "The frame for displaying the gnuplot process.
+This is used when `gnuplot-display-process' is equal to 'frame.")
+(defvar gnuplot-comint-recent-buffer nil
+  "The most recently plotted gnuplot script buffer.
+This is used by the function that plot from the comint buffer.  It is
+reset every time something is plotted from a script buffer.")
+
+(defcustom gnuplot-gnuplot-buffer "plot.gp"
+  "*The name of the gnuplot scratch buffer opened by 'gnuplot-make-buffer'."
+  :group 'gnuplot
+  :type 'string)
+
+(defcustom gnuplot-display-process 'window
+  "This controls how the gnuplot process buffer is displayed.
+The values are
+   'frame    display gnuplot process in a separate frame
+   'window   display gnuplot process in this frame but in another window
+   nil       `gnuplot-process' is in the current frame but not displayed"
+  :group 'gnuplot
+  :type '(radio (const :tag "Separate frame"  frame)
+               (const :tag "Separate window" window)
+               (const :tag "Not displayed"   nil)))
+(defcustom gnuplot-info-display 'window
+  "*Determines how `gnuplot-info-lookup-symbol' displays the info file.
+The values are
+   'frame    display info file in a separate frame
+   'window   display info file in another window
+   nil       display info file in the current window"
+  :group 'gnuplot
+  :type '(radio (const :tag "Separate frame"  frame)
+               (const :tag "Separate window" window)
+               (const :tag "This window"     nil)))
+
+(defcustom gnuplot-echo-command-line-flag (not gnuplot-ntemacs-p)
+  "*This sets the fall-back value of `comint-process-echos'.
+If `gnuplot-mode' cannot figure out what version number of gnuplot
+this is, then the value of this variable will be used for
+`comint-process-echos'.  It seems that gnuplot 3.5 wants this to be
+nil and 3.7 wants it to be t.  If lines that you send to gnuplot from
+the `gnuplot-mode' buffer are not appearing at the gnuplot prompt in
+the process buffer, try toggling it.  Also see the document string for
+`comint-process-echos'.  If you change this, kill the gnuplot process
+and start it again."
+  :group 'gnuplot
+  :type 'boolean)
+(defcustom gnuplot-insertions-show-help-flag nil
+  "*Non-nil means to display certain help messages automatically.
+These messages are shown after menu insertion of gnuplot commands."
+  :group 'gnuplot-insertions
+  :type 'boolean)
+
+(defcustom gnuplot-delay 0.01
+  "*Amount of time to delay before sending a new line to gnuplot.
+This is needed so that the the line is not written in the gnuplot
+buffer in advance of its prompt.  Increase this number if the
+prompts and lines are displayed out of order."
+  :group 'gnuplot
+  :type 'number)
+(defcustom gnuplot-buffer-max-size 1000
+  "*The maximum size in lines of the gnuplot process buffer.
+Each time text is written in the gnuplot process buffer, lines are
+trimmed from the beginning of the buffer so that the buffer is this
+many lines long.  The lines are deleted after the most recent lines
+were interpretted by gnuplot.  Setting to 0 turns off this feature
+(i.e. no lines get trimmed)."
+  :group 'gnuplot
+  :type 'integer)
+(defcustom gnuplot-quote-character "\'"
+  "*Quotation character used for inserting quoted strings.
+Gnuplot can use single or double quotes.  If you prefer to have the
+filename insertion function never insert quotes for you, set this
+to the empty string."
+  :group 'gnuplot
+  :type '(radio (const :tag "double quote"  "\"")
+               (const :tag "single quote"  "\'")
+               (const :tag "none"          ""  )))
+;; (defcustom gnuplot-gnuplot-version nil
+;;   "*Force gnuplot-mode to behave for this version of gnuplot."
+;;   :group 'gnuplot
+;;   :type '(radio (const :tag "unspecified"   nil)
+;;             (const :tag "3.8 or newer" "3.8")
+;;             (const :tag "3.7 or older" "3.7")))
+
+(defvar gnuplot-info-frame nil)
+(defvar gnuplot-info-nodes '())
+
+(defvar gnuplot-first-call t)
+
+;; with info-look, there is no need to carry this list around -- it
+;; can be generated on the fly appropriate to the currently installed
+;; version of gnuplot.info
+(defvar gnuplot-keywords nil
+  "A list of keywords used in GNUPLOT.
+These are set by `gnuplot-set-keywords-list' from the values in
+`info-lookup-cache'.")
+(defvar gnuplot-keywords-pending t     ;; <HW>
+  "A boolean which gets toggled when the info file is probed.")
+(defcustom gnuplot-keywords-when 'deferred ;; 'immediately
+  "This variable controls when the info file is parsed.
+The choices are immediately upon starting gnuplot-mode or the first
+time that data is needed.  If you use hilit19, then the info file is
+parsed immediately regardless of the value of this variable.  But
+you're not using that musty old thing, are you..."
+  :group 'gnuplot
+  :type
+  '(radio (const :tag "Parse info file when gnuplot-mode starts"    
immediately)
+         (const :tag "Parse info file the first time it is needed" deferred)))
+
+(defgroup gnuplot-faces nil
+  "Text faces used by gnuplot-mode."
+  :prefix "gnuplot-"
+  :group 'gnuplot)
+
+(cond ((and (featurep 'custom) (fboundp 'custom-declare-variable))
+       (defface gnuplot-prompt-face '((((class color))
+                                      (:foreground "firebrick"))
+                                     (t
+                                      (:bold t :underline t)))
+        "Face used for the prompt in the gnuplot process buffer."
+        :group 'gnuplot-faces))
+      (t
+       (make-face 'gnuplot-prompt-face)
+       (set-face-foreground 'gnuplot-prompt-face "firebrick")))
+
+
+;;; --- key bindings and menus
+
+(defvar gnuplot-mode-map nil)
+(if gnuplot-mode-map
+    ()
+  (setq gnuplot-mode-map (make-sparse-keymap))
+  (define-key gnuplot-mode-map "\C-c\C-b" 'gnuplot-send-buffer-to-gnuplot)
+  (define-key gnuplot-mode-map "\C-c\C-c" 'comment-region) ; <RF>
+  (define-key gnuplot-mode-map "\C-c\C-o" 'gnuplot-gui-set-options-and-insert)
+  (define-key gnuplot-mode-map "\C-c\C-d" 'gnuplot-show-version)
+  (define-key gnuplot-mode-map "\C-c\C-e" 'gnuplot-show-gnuplot-buffer)
+  (define-key gnuplot-mode-map "\C-c\C-f" 'gnuplot-send-file-to-gnuplot)
+  (define-key gnuplot-mode-map "\C-c\C-h" 'gnuplot-info-lookup-symbol)
+  (define-key gnuplot-mode-map "\C-c\C-i" 'gnuplot-insert-filename)
+  (define-key gnuplot-mode-map "\C-c\C-j" 'gnuplot-forward-script-line)
+  (define-key gnuplot-mode-map "\C-c\C-k" 'gnuplot-kill-gnuplot-buffer)
+  (define-key gnuplot-mode-map "\C-c\C-l" 'gnuplot-send-line-to-gnuplot)
+  (define-key gnuplot-mode-map "\C-c\C-n" 'gnuplot-negate-option)
+  (define-key gnuplot-mode-map "\C-c\C-p" 'gnuplot-show-gnuplot-version)
+  (define-key gnuplot-mode-map "\C-c\C-r" 'gnuplot-send-region-to-gnuplot)
+  ;;(define-key gnuplot-mode-map "\C-c\C-t" 'gnuplot-gui-swap-simple-complete)
+  (define-key gnuplot-mode-map "\C-c\C-u" 'gnuplot-bug-report)
+  (define-key gnuplot-mode-map "\C-c\C-v" 'gnuplot-send-line-and-forward)
+  (define-key gnuplot-mode-map "\C-c\C-z" 'gnuplot-customize)
+  (define-key gnuplot-mode-map "\M-\r"    'gnuplot-complete-keyword)
+  (define-key gnuplot-mode-map "\M-\t"    'gnuplot-complete-keyword)
+  (define-key gnuplot-mode-map "\C-i"     'indent-for-tab-command)
+  (define-key gnuplot-mode-map "\C-m"     'newline-and-indent)
+  ;;(define-key gnuplot-mode-map "\C-m"     'reindent-then-newline-and-indent)
+  ;;(if (featurep 'kw-compl)
+  ;;    (define-key gnuplot-mode-map "\M-\r" 'kw-compl-abbrev)))
+  (cond (gnuplot-xemacs-p
+        (define-key gnuplot-mode-map '(shift button2)
+          'gnuplot-gui-mouse-set))
+       (t
+        (define-key gnuplot-mode-map [S-mouse-2]
+          'gnuplot-gui-mouse-set))) )
+
+(defvar gnuplot-mode-menu nil)
+(defvar gnuplot-menu nil
+  "Menu for `gnuplot-mode'.")
+(setq gnuplot-menu
+      '("Gnuplot"
+       ["Send line to gnuplot"             gnuplot-send-line-to-gnuplot   t]
+       ["Send line & move forward"         gnuplot-send-line-and-forward (not 
(eobp))]
+       ["Send region to gnuplot"           gnuplot-send-region-to-gnuplot
+        (gnuplot-mark-active)]
+       ["Send buffer to gnuplot"           gnuplot-send-buffer-to-gnuplot t]
+       ["Send file to gnuplot"             gnuplot-send-file-to-gnuplot t]
+       "---"
+       ["Insert filename at point"         gnuplot-insert-filename t]
+       ["Negate set option"                gnuplot-negate-option t]
+       ;;["Set key binding"             gnuplot-set-binding 
gnuplot-three-eight-p]
+       ["Keyword help"                     gnuplot-info-lookup-symbol
+        (or gnuplot-keywords gnuplot-keywords-pending)]
+       ["Show gnuplot process buffer"      gnuplot-show-gnuplot-buffer t]
+       ["Set arguments at point"           gnuplot-gui-set-options-and-insert
+        (fboundp 'gnuplot-gui-set-options-and-insert)]
+       ["Swap plot/splot/fit lists in GUI" gnuplot-gui-swap-simple-complete
+        (fboundp 'gnuplot-gui-swap-simple-complete)]
+       "---"
+       ["Customize gnuplot"                gnuplot-customize t]
+       ["Submit bug report"                gnuplot-bug-report t]
+       ["Show gnuplot-mode version"        gnuplot-show-version t]
+       ["Show gnuplot version"             gnuplot-show-gnuplot-version t]
+       "---"
+       ["Kill gnuplot"                     gnuplot-kill-gnuplot-buffer t]
+       ))
+
+
+;;; --- insertions variables and menus
+
+;;(load-library "gnuplot-insertions")
+(defvar gnuplot-mode-insertions-menu nil)
+(defvar gnuplot-insertions-menu nil
+  "Menu for insertions in `gnuplot-mode'.
+
+The insertions menu is composed of several sub-menus.  The variables
+describing the sub-menus are:
+  `gnuplot-insertions-adornments'
+  `gnuplot-insertions-plot-options'
+  `gnuplot-insertions-terminal'
+  `gnuplot-insertions-x-axis'
+  `gnuplot-insertions-y-axis'
+  `gnuplot-insertions-z-axis'
+  `gnuplot-insertions-x2-axis'
+  `gnuplot-insertions-y2-axis'
+  `gnuplot-insertions-parametric-plots'
+  `gnuplot-insertions-polar-plots'
+  `gnuplot-insertions-surface-plots'
+These variables can be customized by the user.  For example, there are
+many terminal types which are not in the terminal submenu but which
+may be compiled into a user's copy of gnuplot.
+
+Each of these variables is a list whose first element is a string and
+all the rest are vectors as described in the document string for
+`easy-menu-define'.  The callback used throughout these menus is
+`gnuplot-insert' which inserts the appropriate set expression and,
+optionally, looks up that item in the gnuplot info file.
+
+The easiest way to customize the submenus is to use the custom
+package.  Just type \\[gnuplot-customize] and follow your nose.
+
+You can also add new items to any of these sub-menus by adding to the
+`gnuplot-load-hook' in your .emacs file.  Here is an example of adding
+the \"regis\" terminal type to the terminal sub-menu:
+
+ (add-hook
+  'gnuplot-load-hook
+  '(lambda ()
+      (setq gnuplot-insertions-terminal
+           (append gnuplot-insertions-terminal
+                   (list
+                    [\"regis\"
+                      (gnuplot-insert \"set terminal regis\")
+                       t])))))")
+
+(defvar gnuplot-insertions-top ()
+  "Top part of insertions menu.
+See the document string for `gnuplot-insertions-menu'")
+
+(defcustom gnuplot-insertions-menu-flag t
+  "*Non-nil means to place the insertion menu in the menubar.
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type 'boolean)
+
+(defcustom gnuplot-insertions-adornments ; this is icky...
+  (if gnuplot-three-eight-p
+      '("adornments"
+       ["arrow"       (gnuplot-insert "set arrow ")          t]
+       ["bar"         (gnuplot-insert "set bar")             t]
+       ["border"      (gnuplot-insert "set border")          t]
+       ["boxwidth"    (gnuplot-insert "set boxwidth ")       t]
+       ["format"      (gnuplot-insert "set format ")         t]
+       ["grid"        (gnuplot-insert "set grid")            t]
+       ["key"         (gnuplot-insert "set key ")            t]
+       ["label"       (gnuplot-insert "set label ")          t]
+       ["pointsize"   (gnuplot-insert "set pointsize ")      t]
+       ["samples"     (gnuplot-insert "set samples ")        t]
+       ["size"        (gnuplot-insert "set size ")           t]
+       ["style"       (gnuplot-insert "set style ")          t]
+       ["tics"        (gnuplot-insert "set tics ")           t]
+       ["timefmt"     (gnuplot-insert "set timefmt ")        t]
+       ["timestamp"   (gnuplot-insert "set timestamp ")      t]
+       ["title"       (gnuplot-insert "set title ")          t]
+       ["zeroaxis"    (gnuplot-insert "set zeroaxis")        t] )
+    '("adornments"
+      ["data style"     (gnuplot-insert "set data style ")     t]
+      ["function style" (gnuplot-insert "set function style ") t]
+      ["arrow"          (gnuplot-insert "set arrow ")         t]
+      ["bar"           (gnuplot-insert "set bar")             t]
+      ["border"         (gnuplot-insert "set border")         t]
+      ["boxwidth"       (gnuplot-insert "set boxwidth ")       t]
+      ["format"         (gnuplot-insert "set format ")        t]
+      ["grid"          (gnuplot-insert "set grid")            t]
+      ["key"           (gnuplot-insert "set key ")            t]
+      ["label"          (gnuplot-insert "set label ")         t]
+      ["pointsize"      (gnuplot-insert "set pointsize ")      t]
+      ["samples"        (gnuplot-insert "set samples ")               t]
+      ["size"           (gnuplot-insert "set size ")          t]
+      ["tics"           (gnuplot-insert "set tics ")          t]
+      ["timefmt"        (gnuplot-insert "set timefmt ")        t]
+      ["timestamp"      (gnuplot-insert "set timestamp ")      t]
+      ["title"          (gnuplot-insert "set title ")         t]
+      ["zeroaxis"       (gnuplot-insert "set zeroaxis")        t] ))
+  "Adornments submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+       :group 'gnuplot-insertions
+       :type '(list (string :tag "Title")
+                    (repeat :inline t
+                            (vector (string   :tag "Name")
+                                    (function :tag "Callback")
+                                    (boolean  :tag "Enabled" t)))))
+
+
+
+(defcustom gnuplot-insertions-plot-options
+  '("plot options"
+    ["autoscale"  (gnuplot-insert "set autoscale ")         t]
+    ["clip"      (gnuplot-insert "set clip ")               t]
+    ["encoding"   (gnuplot-insert "set encoding ")          t]
+    ["locale"     (gnuplot-insert "set locale ")            t]
+    ["logscale"          (gnuplot-insert "set logscale ")           t]
+    ["multiplot"  (gnuplot-insert "set multiplot")          t]
+    ["missing"   (gnuplot-insert "set missing \"\"")        t]
+    ["palette"    (gnuplot-insert "set palette ")            t]        ; <MT>
+    ["pm3d"       (gnuplot-insert "set pm3d ")               t]
+    ["offsets"   (gnuplot-insert "set offsets ")            t]
+    ["output"     (gnuplot-insert "set output ")            t]
+    ["zero"      (gnuplot-insert "set zero ")               t] )
+  "Plot options submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-terminal
+  '("terminal"
+    ["eepic"      (gnuplot-insert "set terminal eepic")      t]
+    ["fig"        (gnuplot-insert "set terminal fig")        t]
+    ["gpic"       (gnuplot-insert "set terminal gpic")       t]
+    ["latex"      (gnuplot-insert "set terminal latex")      t]
+    ["linux"      (gnuplot-insert "set terminal linux")      t]
+    ["pbm"        (gnuplot-insert "set terminal pbm")        t]
+    ["png"        (gnuplot-insert "set terminal png")        t]
+    ["postscript" (gnuplot-insert "set terminal postscript") t]
+    ["pslatex"    (gnuplot-insert "set terminal pslatex")    t]
+    ["table"      (gnuplot-insert "set terminal table")      t]
+    ["tek40xx"    (gnuplot-insert "set terminal tek40xx")    t]
+    ["tkcanvas"   (gnuplot-insert "set terminal tkcanvas")   t]
+    ["tpic"       (gnuplot-insert "set terminal tpic")       t]
+    ["vgagl"      (gnuplot-insert "set terminal vgagl")      t]        ; for 
pm3d patch
+    ["vttek"      (gnuplot-insert "set terminal vttek")      t]
+    ["x11"        (gnuplot-insert "set terminal x11")        t] )
+  "Terminal submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-x-axis
+  '("x-axis"
+    ["xdata"     (gnuplot-insert "set xdata ")              t]
+    ["xlabel"    (gnuplot-insert "set xlabel ")             t]
+    ["xrange"    (gnuplot-insert "set xrange [:]")          t]
+    ["xtics"     (gnuplot-insert "set xtics ")              t]
+    ["mxtics"    (gnuplot-insert "set mxtics ")             t]
+    ["xzeroaxis"  (gnuplot-insert "set xzeroaxis ")         t]
+    ["xdtics"    (gnuplot-insert "set xdtics ")             t]
+    ["xmtics"    (gnuplot-insert "set xmtics ")             t])
+  "X-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-x2-axis
+  '("x2-axis"
+    ["x2data"    (gnuplot-insert "set xdata ")              t]
+    ["x2label"   (gnuplot-insert "set xlabel ")             t]
+    ["x2range"   (gnuplot-insert "set xrange [:]")          t]
+    ["x2tics"    (gnuplot-insert "set xtics ")              t]
+    ["mx2tics"   (gnuplot-insert "set mxtics ")             t]
+    ["x2zeroaxis" (gnuplot-insert "set xzeroaxis ")         t]
+    ["x2dtics"   (gnuplot-insert "set xdtics ")             t]
+    ["x2mtics"   (gnuplot-insert "set xmtics ")             t])
+  "X2-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-y-axis
+  '("y-axis"
+    ["ydata"     (gnuplot-insert "set ydata ")              t]
+    ["ylabel"    (gnuplot-insert "set ylabel ")             t]
+    ["ymtics"    (gnuplot-insert "set ymtics ")             t]
+    ["yrange"    (gnuplot-insert "set yrange [:]")          t]
+    ["ytics"     (gnuplot-insert "set ytics ")              t]
+    ["yzeroaxis"  (gnuplot-insert "set yzeroaxis ")         t]
+    ["ydtics"    (gnuplot-insert "set ydtics ")             t]
+    ["mytics"    (gnuplot-insert "set mytics ")             t])
+  "Y-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+(defcustom gnuplot-insertions-y2-axis
+  '("y2-axis"
+    ["y2data"    (gnuplot-insert "set ydata ")              t]
+    ["y2label"   (gnuplot-insert "set ylabel ")             t]
+    ["y2range"   (gnuplot-insert "set yrange [:]")          t]
+    ["y2tics"    (gnuplot-insert "set ytics ")              t]
+    ["my2tics"   (gnuplot-insert "set mytics ")             t]
+    ["y2zeroaxis"  (gnuplot-insert "set yzeroaxis ")        t]
+    ["y2mtics"   (gnuplot-insert "set ymtics ")             t]
+    ["y2dtics"   (gnuplot-insert "set ydtics ")             t])
+  "Y2-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+
+
+(defcustom gnuplot-insertions-z-axis
+  '("z-axis"
+    ["zdata"     (gnuplot-insert "set zdata ")              t]
+    ["zlabel"    (gnuplot-insert "set zlabel ")             t]
+    ["zrange"    (gnuplot-insert "set zrange [:]")          t]
+    ["ztics"     (gnuplot-insert "set ztics ")              t]
+    ["mztics"    (gnuplot-insert "set mztics ")             t]
+    ["zdtics"    (gnuplot-insert "set zdtics ")             t]
+    ["zmtics"    (gnuplot-insert "set zmtics ")             t] )
+  "Z-axis submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-parametric-plots
+  '("parametric plots"
+    ["parametric" (gnuplot-insert "set parametric")         t]
+    ["isosamples" (gnuplot-insert "set isosamples ")        t]
+    ["dummy"     (gnuplot-insert "set dummy ")              t]
+    ["trange"    (gnuplot-insert "set trange [:]")          t]
+    ["urange"    (gnuplot-insert "set urange [:]")          t]
+    ["vrange"    (gnuplot-insert "set vrange [:]")          t] )
+  "Parametric plots submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-polar-plots
+  '("polar plots"
+    ["polar"     (gnuplot-insert "set polar")               t]
+    ["angles"    (gnuplot-insert "set angles ")             t]
+    ["rrange"    (gnuplot-insert "set rrange [:]")          t] )
+  "Polar plots submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+
+(defcustom gnuplot-insertions-surface-plots
+  '("surface plots"
+    ["clabel"    (gnuplot-insert "set clabel ")             t]
+    ["cntrparam"  (gnuplot-insert "set cntrparam ")         t]
+    ["contour"   (gnuplot-insert "set contour")             t]
+    ["dgrid3d"   (gnuplot-insert "set dgrid3d ")            t]
+    ["hidden3d"          (gnuplot-insert "set hidden3d ")           t]
+    ["mapping"   (gnuplot-insert "set mapping ")            t]
+    ["surface"   (gnuplot-insert "set surface ")            t]
+    ["view"      (gnuplot-insert "set view ")               t] )
+  "Surface plots submenu in the insertions menu.
+See the document string for `gnuplot-insertions-menu'
+Changing this will not effect a change in any currently existing
+`gnuplot-mode' buffer.  You will see the change the next time you
+create a `gnuplot-mode' buffer."
+  :group 'gnuplot-insertions
+  :type '(list (string :tag "Title")
+              (repeat :inline t
+                      (vector (string   :tag "Name")
+                              (function :tag "Callback")
+                              (boolean  :tag "Enabled" t)))))
+
+
+
+(defvar gnuplot-insertions-bottom ()
+  "Bottom part of the insertions menu.
+This part contains the toggle buttons for displaying info or
+opening an argument-setting popup.")
+(setq gnuplot-insertions-bottom
+      '("---"
+       ["Display of info with insertion" gnuplot-toggle-info-display
+        :style toggle :selected gnuplot-insertions-show-help-flag]
+       ["Display GUI popup with insertion" gnuplot-gui-toggle-popup
+        :active (fboundp 'gnuplot-gui-toggle-popup)
+        :style toggle :selected (and (fboundp 'gnuplot-gui-toggle-popup)
+                                     gnuplot-gui-popup-flag)] ))
+
+
+;; Regarding a comment by <DB>:
+;;
+;; This is from the header in easymenu.el distributed with XEmacs:
+;;
+;; ;; - Function: easy-menu-add MENU [ MAP ]
+;; ;;     Add MENU to the current menubar in MAP.
+;; ;;
+;; ;; - Function: easy-menu-remove MENU
+;; ;;     Remove MENU from the current menubar.
+;; ;;
+;; ;; Emacs 19 never uses `easy-menu-add' or `easy-menu-remove', menus
+;; ;; automatically appear and disappear when the keymaps specified by
+;; ;; the MAPS argument to `easy-menu-define' are activated.
+;; ;;
+;; ;; XEmacs will bind the map to button3 in each MAPS, but you must
+;; ;; explicitly call `easy-menu-add' and `easy-menu-remove' to add and
+;; ;; remove menus from the menu bar.
+;;
+;; in Emacs, easy-menu-add is defined like this:
+;;      (defun easy-menu-add (menu &optional map))
+
+(defun gnuplot-setup-menubar ()
+  "Initial setup of gnuplot and insertions menus."
+  (if gnuplot-insertions-menu-flag     ; set up insertions menu
+      (progn
+       (if gnuplot-xemacs-p
+           (setq gnuplot-insertions-top
+                 '("insert set expression" "--:doubleLine"))
+         (setq gnuplot-insertions-top
+               '("insert set expression" "---")))
+       (setq gnuplot-insertions-menu
+             (append (list "Insertions")
+                     gnuplot-insertions-top
+                     (list gnuplot-insertions-adornments)
+                     (list gnuplot-insertions-plot-options)
+                     (list gnuplot-insertions-terminal)
+                     (list gnuplot-insertions-x-axis)
+                     (list gnuplot-insertions-y-axis)
+                     (list gnuplot-insertions-z-axis)
+                     (list gnuplot-insertions-x2-axis)
+                     (list gnuplot-insertions-y2-axis)
+                     (list gnuplot-insertions-parametric-plots)
+                     (list gnuplot-insertions-polar-plots)
+                     (list gnuplot-insertions-surface-plots)
+                     gnuplot-insertions-bottom))
+       (easy-menu-define gnuplot-mode-insertions-menu gnuplot-mode-map
+                         "Insertions menu used in Gnuplot-mode"
+                         gnuplot-insertions-menu)
+       (easy-menu-add gnuplot-mode-insertions-menu gnuplot-mode-map)))
+  (easy-menu-define                    ; set up gnuplot menu
+   gnuplot-mode-menu gnuplot-mode-map "Menu used in gnuplot-mode"
+   gnuplot-menu)
+  (easy-menu-add gnuplot-mode-menu gnuplot-mode-map) )
+
+;; There is no `mark-active' variable in XEmacs.  Hassle!  This is not
+;; only replicates mark-active, but it only returns true if the region
+;; is of non-zero width.
+;; Error checking suggested by <DB>
+(defun gnuplot-mark-active ()
+  "Return non-nil if the mark is active and it is not equal to point."
+  (condition-case nil
+      (and (mark) (/= (mark) (point)))
+    (error nil)))
+
+
+;;; --- XEmacs toolbar
+
+(defgroup gnuplot-toolbar nil
+  "Toolbar used by XEmacs."
+  :prefix "gnuplot-toolbar-"
+  :group 'gnuplot)
+
+(defcustom gnuplot-toolbar-display-flag gnuplot-xemacs-p
+  "*Non-nil means to display display a toolbar in XEmacs."
+  :group 'gnuplot-toolbar
+  :type 'boolean)
+
+(defcustom gnuplot-toolbar-use-toolbar (if (featurep 'toolbar) 'left-toolbar 
nil)
+  "*If nil, do not use a toolbar.
+If it is non-nil, it must be a toolbar.  The five legal values are
+`default-toolbar', `top-toolbar', `bottom-toolbar', `right-toolbar',
+and `left-toolbar', although choosing `default-toolbar' or
+`top-toolbar' may be a bad idea since either will make the GNUPLOT
+toolbar replace the standard toolbar.  Changing this will not change
+the toolbar in a currently existing buffer, but it will take effect
+the next time you use `gnuplot-mode' and emacs.
+
+This is only used if a toolbar can be displayed, thus this is used in
+XEmacs and ignored in FSF Emacs."
+  :type '(choice (const default-toolbar)
+                (const top-toolbar)
+                (const bottom-toolbar)
+                (const left-toolbar)
+                (const right-toolbar)
+                (const :tag "No toolbar" nil))
+  :group 'gnuplot-toolbar)
+
+(defvar gnuplot-toolbar-location "")
+
+(defun gnuplot-toolbar-setup-toolbar (toolbar)
+  "Setup function for the `gnuplot-mode' toolbar.
+TOOLBAR contains the toolbar specification.
+This is basically swiped from VM."
+  (let ((width 46) (height 46)
+       (buffer (current-buffer))
+       (frame (selected-frame))
+       (tag-set '(win)))
+    (cond
+     ((eq (symbol-value gnuplot-toolbar-use-toolbar) right-toolbar)
+      (setq gnuplot-toolbar-location       "right")
+      (set-specifier right-toolbar         toolbar buffer)
+      (set-specifier right-toolbar-width   width frame  tag-set))
+     ((eq (symbol-value gnuplot-toolbar-use-toolbar) left-toolbar)
+      (setq gnuplot-toolbar-location       "left")
+      (set-specifier left-toolbar          toolbar buffer)
+      (set-specifier left-toolbar-width    width frame  tag-set))
+     ((eq (symbol-value gnuplot-toolbar-use-toolbar) bottom-toolbar)
+      (setq gnuplot-toolbar-location       "bottom")
+      (set-specifier bottom-toolbar        toolbar buffer)
+      (set-specifier bottom-toolbar-height height frame tag-set))
+     ((eq (symbol-value gnuplot-toolbar-use-toolbar) top-toolbar)
+      (setq gnuplot-toolbar-location       "top")
+      (set-specifier top-toolbar           toolbar buffer)
+      (set-specifier top-toolbar-height    height frame tag-set))) ))
+
+(defvar gnuplot-line-xpm
+  (if (featurep 'xpm)
+      (toolbar-make-button-list
+       "/* XPM */
+static char *line[] = {
+/* width height num_colors chars_per_pixel */
+\"    40    40        5           1\",
+/* colors */
+\". c #000000\",
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #2f4f4f\",
+\"c c #ff6347\",
+\"d c #0000ff\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaa..a..aaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaa..a..a....aaa...aaaaaaaaaaaa\",
+\"aaaaaaaaaaaa..a..a..a..a..a..aaaaaaaaaaa\",
+\"aaaaaaaaaaaa..a..a.aa..a.....aaaaaaaaaaa\",
+\"aaaaaaaaaaa..a..a..a..a..aaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaa..a..a..a..a..a..aaaaaaaaaaaa\",
+\"aaaaaaaaaaa..a..a..a..aa...aaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaadaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaadaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaadaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaadaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaacaaaadaadaaaaaaaaaaaa\",
+\"aaaaaaaa.caaadaaaccaccadaddaaaaaccaaaaaa\",
+\"aaaaaaa..accdaddcaaaaaccaaaaaaccaaaaaaaa\",
+\"aaaaaaaa.aadcaccdaaaadaaccaaccaaaaaaaaaa\",
+\"aaaaaaaa.adaacaaaddadaaaaaccaaaaaaaaaaaa\",
+\"aaaaaaaa.daaaaaaaaadaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa............................aaaaaa\",
+\"aaaaaaaa.aaaa.aaaa.aaaa.aaaa.aaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+  "XPM format image used for the \"plot line\" button"))
+
+(defvar gnuplot-region-xpm
+  (if (featurep 'xpm)
+      (toolbar-make-button-list
+       "/* XPM */
+static char *region[] = {
+/* width height num_colors chars_per_pixel */
+\"    40    40        5           1\",
+/* colors */
+\". c #000000\",
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #2f4f4f\",
+\"c c #ff6347\",
+\"d c #0000ff\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa.a..a...aaa....a..aa...aa....aaaaa\",
+\"aaaaaa...a..a..a..a..a..a..a..a..a..aaaa\",
+\"aaaaaa..aa.....a.aa..a....aa..a.aa..aaaa\",
+\"aaaaa..a...aaaa..aa.a..a..aa....a..aaaaa\",
+\"aaaaa..a...a..a..a..a..a..a..a..a..aaaaa\",
+\"aaaa..aaaa...aaa....a..aa...aa..a..aaaaa\",
+\"aaaaaaaaaaaaaaaaa..aaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaadaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaadaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaadaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaadaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaacaaaadaadaaaaaaaaaaaa\",
+\"aaaaaaaa.caaadaaaccaccadaddaaaaaccaaaaaa\",
+\"aaaaaaa..accdaddcaaaaaccaaaaaaccaaaaaaaa\",
+\"aaaaaaaa.aadcaccdaaaadaaccaaccaaaaaaaaaa\",
+\"aaaaaaaa.adaacaaaddadaaaaaccaaaaaaaaaaaa\",
+\"aaaaaaaa.daaaaaaaaadaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa............................aaaaaa\",
+\"aaaaaaaa.aaaa.aaaa.aaaa.aaaa.aaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+  "XPM format image used for the \"plot region\" button"))
+
+(defvar gnuplot-buffer-xpm
+  (if (featurep 'xpm)
+      (toolbar-make-button-list
+       "/* XPM */
+static char *buffer[] = {
+/* width height num_colors chars_per_pixel */
+\"    40    40        5           1\",
+/* colors */
+\". c #000000\",
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #2f4f4f\",
+\"c c #ff6347\",
+\"d c #0000ff\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa..aaaaaaaaaa......aaaaaaaaaaaaaa\",
+\"aaaaaaaa..aaaaaaaaa..a..aaaaaaaaaaaaaaaa\",
+\"aaaaaaa....aa..a.........a...aa.a.aaaaaa\",
+\"aaaaaaa..a..a..a..a..a..a..a..a...aaaaaa\",
+\"aaaaaaa.aa....aa..a..a..a.....a..aaaaaaa\",
+\"aaaaaa...a.a..a..a..a..a..aaaa..aaaaaaaa\",
+\"aaaaaa.....a..a..a..a..a..a..a..aaaaaaaa\",
+\"aaaaaa....aaa..a.a..a..aa...aa..aaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaadaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaadaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaadaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaadaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaacaaaadaadaaaaaaaaaaaa\",
+\"aaaaaaaa.caaadaaaccaccadaddaaaaaccaaaaaa\",
+\"aaaaaaa..accdaddcaaaaaccaaaaaaccaaaaaaaa\",
+\"aaaaaaaa.aadcaccdaaaadaaccaaccaaaaaaaaaa\",
+\"aaaaaaaa.adaacaaaddadaaaaaccaaaaaaaaaaaa\",
+\"aaaaaaaa.daaaaaaaaadaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaa..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa............................aaaaaa\",
+\"aaaaaaaa.aaaa.aaaa.aaaa.aaaa.aaaaaaaaaaa\",
+\"aaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+  "XPM format image used for the \"plot buffer\" button"))
+
+(defvar gnuplot-doc-xpm
+  (if (featurep 'xpm)
+      (toolbar-make-button-list
+       "/* XPM */
+static char *book_index[] = {
+/* width height num_colors chars_per_pixel */
+\"    40    40        6            1\",
+/* colors */
+\". c #000000\",
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #2f4f4f\",
+\"c c #ff0000\",
+\"d c #ffffff\",
+\"e c #708090\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaa.........bbeaaaebb..........aaaaaa\",
+\"aaaaaa.ddddddddaaebebeaaddddddddd.aaaaaa\",
+\"aaaa...dab.bddeebadbdaeebedeeeeed...aaaa\",
+\"aaaa.c.dbaddddebeedbdeebeedebebed.c.aaaa\",
+\"aaaa.c.d.de.edeebeabdbbeeddebbbed.c.aaaa\",
+\"aaaa.c.dbad.ddebeadbdeeebeddeeeed.c.aaaa\",
+\"aaaa.c.dab..ddeeeedbdebeeedebebed.c.aaaa\",
+\"aaaa.c.dddddddeebeabdebebedeebedd.c.aaaa\",
+\"aaaa.c.debebedebeedbdbebeedbeeeeb.c.aaaa\",
+\"aaaa.c.debeeedeeeaabdaaddddebedbb.c.aaaa\",
+\"aaaa.c.deebeddbebedbdbaa.adeeedeb.c.aaaa\",
+\"aaaa.c.ddeebedeeebaba.dd.dddeeedd.c.aaaa\",
+\"aaaa.c.debeebdbeeedbd....ddeebeed.c.aaaa\",
+\"aaaa.c.deebeedeebadbd.dd.ddeeeedd.c.aaaa\",
+\"aaaa.c.dbbebddeeeeabd.aa.adebebbd.c.aaaa\",
+\"aaaa.c.deeeeedeebeabaedddddeeeedd.c.aaaa\",
+\"aaaa.c.dbebbbdebeadbdaeeeedebeeed.c.aaaa\",
+\"aaaa.c.deeebddeeebdbdeebeedeebeed.c.aaaa\",
+\"aaaa.c.debeeedebeeabdebebedebeebd.c.aaaa\",
+\"aaaa.c.deebbedeeeedbdeeeeddeeeeed.c.aaaa\",
+\"aaaa.c.dddddddddaadbdaddddddddddd.c.aaaa\",
+\"aaaa.c..........beabaeb...........c.aaaa\",
+\"aaaa.c.bbbbbbbbbb.bbbbbbbbbbbbbbb.c.aaaa\",
+\"aaaa.c.bbbbbbbbbb..e.bbbbbbbbbbbb.c.aaaa\",
+\"aaaa.c.bbbbbbbbbb.b.bbbbbbbbbbbbb.c.aaaa\",
+\"aaaa.c............e.e.............c.aaaa\",
+\"aaaa.cccccccccccc.a.a.ccccccccccccc.aaaa\",
+\"aaaa................................aaaa\",
+\"aaaaaaaaaaaaaaaaaa...aaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+  "XPM format image used for the \"document\" button"))
+
+(defvar gnuplot-help-xpm
+  (if (featurep 'xpm)
+      (toolbar-make-button-list
+       "/* XPM */
+static char *help_btn[] = {
+/* width height num_colors chars_per_pixel */
+\"    40    40        3            1\",
+/* colors */
+\"a c #bebebe s backgroundToolBarColor\",
+\"b c #000000\",
+\"c c #ff0000\",
+/* pixels */
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaabbbccccccccbbbaaaaaaaaaaaaa\",
+\"aaaaaaaaaaabbccccccccccccccbbaaaaaaaaaaa\",
+\"aaaaaaaaaabccccccccccccccccccbaaaaaaaaaa\",
+\"aaaaaaaaabccccccccccccccccccccbaaaaaaaaa\",
+\"aaaaaaaabcccccccbbbbbbbbcccccccbaaaaaaaa\",
+\"aaaaaaaabccccbbbaaaaaaaabbbccccbaaaaaaaa\",
+\"aaaaaaabccccbaaaaaaaaaaaaaabccccbaaaaaaa\",
+\"aaaaaaabcccbaaaaaaaaaaaaaaaabcccbaaaaaaa\",
+\"aaaaaaabcccbaaaaaaaaaaaaaaaabcccbaaaaaaa\",
+\"aaaaaaabcccbaaaaaaaaaaaaaaaabcccbaaaaaaa\",
+\"aaaaaaabbbbbaaaaaaaaaaaaaaabccccbaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaabbbccccbaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbbbcccccccbaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabcccccccccccccbaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccccccccccbaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccccccccbbaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbbbbbbaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabccccbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaabbbbbbaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",
+\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"};")
+  "XPM format image used for the \"help\" button"))
+
+(defvar gnuplot-toolbar
+  '([gnuplot-line-xpm
+     gnuplot-line-fn     t     "Plot the line under point"]
+    [gnuplot-region-xpm
+     gnuplot-region-fn   t     "Plot the selected region"]
+    [gnuplot-buffer-xpm
+     gnuplot-buffer-fn   t     "Plot the entire buffer"]
+    [:style 3d :size 8]
+    [gnuplot-help-xpm
+     gnuplot-help-fn     t     "Look at the gnuplot process buffer"]
+    [gnuplot-doc-xpm
+     gnuplot-doc-fn      t     "Look at the gnuplot document"])
+  "The gnuplot toolbar.")
+
+(fset 'gnuplot-line-fn   'gnuplot-send-line-and-forward)
+(fset 'gnuplot-region-fn 'gnuplot-send-region-to-gnuplot)
+(fset 'gnuplot-buffer-fn 'gnuplot-send-buffer-to-gnuplot)
+(fset 'gnuplot-help-fn   'gnuplot-show-gnuplot-buffer)
+(fset 'gnuplot-doc-fn    'gnuplot-info-lookup-symbol)
+
+(defvar gnuplot-all-buttons-defined
+  (and (listp gnuplot-line-xpm)   (listp gnuplot-region-xpm)
+       (listp gnuplot-buffer-xpm) (listp gnuplot-doc-xpm)
+       (listp gnuplot-help-xpm)))
+
+
+(defun gnuplot-make-toolbar-function ()
+  (if (and gnuplot-xemacs-p gnuplot-all-buttons-defined)
+      (progn
+       ;;(remove-specifier gnuplot-toolbar-use-toolbar (current-buffer))
+       (gnuplot-toolbar-setup-toolbar gnuplot-toolbar)
+       (add-spec-to-specifier (symbol-value gnuplot-toolbar-use-toolbar)
+                              gnuplot-toolbar
+                              (current-buffer) ))))
+
+;;(defalias 'gnuplot-make-toolbar 'gnuplot-make-toolbar-function)
+
+
+
+;;; --- syntax colorization, syntax table
+
+(defvar gnuplot-mode-syntax-table nil
+  "Syntax table in use in `gnuplot-mode' buffers.
+This is the same as the standard syntax table except that ' is a
+string quote character, ` and _ are word characters, and math
+operators are punctuation characters.")
+(if gnuplot-mode-syntax-table
+    ()
+  (setq gnuplot-mode-syntax-table (make-syntax-table))
+  (modify-syntax-entry ?* "."  gnuplot-mode-syntax-table)
+  (modify-syntax-entry ?+ "."  gnuplot-mode-syntax-table)
+  (modify-syntax-entry ?- "."  gnuplot-mode-syntax-table)
+  (modify-syntax-entry ?/ "."  gnuplot-mode-syntax-table)
+  (modify-syntax-entry ?% "."  gnuplot-mode-syntax-table)
+  ;;(modify-syntax-entry ?& "."  gnuplot-mode-syntax-table) ; rarely used
+  ;;(modify-syntax-entry ?^ "."  gnuplot-mode-syntax-table) ; operators
+  ;;(modify-syntax-entry ?| "."  gnuplot-mode-syntax-table) ; in gnuplot,
+  ;;(modify-syntax-entry ?& "."  gnuplot-mode-syntax-table) ; (by me,
+  ;;(modify-syntax-entry ?? "."  gnuplot-mode-syntax-table) ;  anyway...)
+  ;;(modify-syntax-entry ?~ "."  gnuplot-mode-syntax-table) ;
+  (modify-syntax-entry ?' "\"" gnuplot-mode-syntax-table)
+  (modify-syntax-entry ?` "w"  gnuplot-mode-syntax-table)
+  (modify-syntax-entry ?_ "w"  gnuplot-mode-syntax-table))
+
+
+(defvar gnuplot-font-lock-keywords nil)
+(defvar gnuplot-font-lock-keywords-1 nil)
+(defvar gnuplot-font-lock-keywords-2 nil)
+
+;; used make-regexp to generate the regular expression strings
+;; this is all pattern based
+;; (insert (format "%s"
+;;             (regexp-quote
+;;              (make-regexp
+;;               '("abs" "acos" "acosh" "arg" "asin" "asinh" "atan"
+;;                 "atan2" "atanh" "besj0" "besj1" "besy0" "besy1"
+;;                 "ceil" "cos" "cosh" "erf" "erfc" "exp" "floor"
+;;                 "gamma" "ibeta" "inverf" "igamma" "imag" "invnorm"
+;;                 "int" "lgamma" "log" "log10" "norm" "rand" "real"
+;;                 "sgn" "sin" "sinh" "sqrt" "tan" "tanh" "column"
+;;                 "tm_hour" "tm_mday" "tm_min" "tm_mon" "tm_sec"
+;;                 "tm_wday" "tm_yday" "tm_year" "valid")))))
+
+;; Set up colorization for gnuplot.
+;; This handles font-lock for emacs and xemacs.
+;; hilit19 is handled in `gnuplot-mode'.
+;; These regular expressions treat the gnuplot vocabulary as complete
+;; words.  Although gnuplot will recognise unique abbreviations, these
+;; regular expressions will not."
+(if (featurep 'font-lock)              ; <KL>
+    (setq gnuplot-font-lock-keywords
+         (list
+                                       ; comments
+          '("#.*$" . font-lock-comment-face)
+                                       ; quoted things
+          ;'("['\"]\\([^'\"\n]*\\)['\"]"
+          ;  1 font-lock-string-face)
+          '("'[^'\n]*'?" . font-lock-string-face)
+                                       ; stuff in brackets, sugg. by <LB>
+          '("\\[\\([^]]+\\)\\]"
+            1 font-lock-reference-face)
+                                       ; variable/function definitions
+          '("\\(\\<[a-z]+[a-z_0-9()]*\\)[ \t]*="
+            1 font-lock-variable-name-face)
+                                       ; built-in function names
+          (cons (concat
+                 "\\<\\("
+                 "a\\(bs\\|cosh\?\\|rg\\|sinh\?\\|"
+                 "tan\\(\\|\[2h\]\\)\\)\\|"
+                 "bes\\(j\[01\]\\|y\[01\]\\)\\|"
+                 "c\\(eil\\|o\\(lumn\\|sh\?\\)\\)\\|"
+                 "e\\(rfc\?\\|xp\\)\\|floor\\|gamma\\|"
+                 "i\\(beta\\|gamma\\|mag\\|"
+                 "n\\(t\\|v\\(erf\\|norm\\)\\)\\)\\|"
+                 "l\\(gamma\\|og\\(\\|10\\)\\)\\|"
+                 "norm\\|r\\(and\\|eal\\)\\|"
+                 "s\\(gn\\|inh\?\\|qrt\\)\\|"
+                 "t\\(anh\?\\|m_\\(hour\\|m\\(day\\|in\\|on\\)\\|"
+                 "sec\\|wday\\|y\\(day\\|ear\\)\\)\\)\\|"
+                 "valid"
+                 "\\)\\>")
+                font-lock-function-name-face)
+                                       ; reserved words associated with
+                                       ; plotting <AL>
+          
'("\\<\\(axes\\|every\\|index\\|l\\(\[stw\]\\|ine\\(style\\|type\\|width\\)\\)\\|notitle\\|p\\(\[st\]\\|oint\\(size\\|type\\)\\)\\|smooth\\|t\\(hru\\|itle\\)\\|using\\|with\\)\\>"
 . font-lock-type-face)
+          
'("\\<\\(box\\(e\\(rrorbars\\|s\\)\\|xyerrorbars\\)\\|candlesticks\\|dots\\|errorbars\\|f\\(inancebars\\|steps\\)\\|histeps\\|impulses\\|lines\\(\\|points\\)\\|points\\|steps\\|vector\\|x\\(errorbars\\|yerrorbars\\)\\|yerrorbars\\)\\>"
 . font-lock-function-name-face)
+                                       ; (s)plot -- also thing (s)plotted
+          '("\\<s?plot\\>" . font-lock-keyword-face)
+          '("\\<s?plot\\s-+\\([^'\" ]+\\)[) \n,\\\\]"
+            1 font-lock-variable-name-face)
+                                       ; other common commands
+                                       ; miscellaneous commands
+          (cons (concat "\\<\\("
+                        "bind\\|"
+                        
"c\\(d\\|lear\\)\\|exit\\|fit\\|h\\(elp\\|istory\\)\\|load\\|"
+                        "p\\(ause\\|rint\\|wd\\)\\|quit\\|replot\\|"
+                        "s\\(ave\\|et\\|how\\)\\|unset"
+                        "\\)\\>\\|!.*$")
+                font-lock-reference-face))
+         gnuplot-font-lock-keywords-1 gnuplot-font-lock-keywords
+         gnuplot-font-lock-keywords-2 gnuplot-font-lock-keywords) )
+
+(if (and gnuplot-xemacs-p (featurep 'font-lock))
+    (put 'gnuplot-mode 'font-lock-defaults
+        '((gnuplot-font-lock-keywords
+           gnuplot-font-lock-keywords-1
+           gnuplot-font-lock-keywords-2)
+          t t ((?_ . "w")) )))
+
+;; these two lines get rid of an annoying compile time error
+;; message.  that function gets non-trivially defalias-ed in
+;; gnuplot-toolbar.el
+;; (defun gnuplot-make-toolbar-dummy ())
+;; (defalias 'gnuplot-make-toolbar 'gnuplot-make-toolbar-dummy)
+
+
+;;; --- functions for sending commands to gnuplot
+
+(defun gnuplot-split-string (string)
+  "Break STRING at each carriage return, returning a list of lines."
+  (let ((list ()) (line "") (index 0))
+    (while (< index (length string))
+      (if (char-equal (elt string index) ?\n)
+         (setq list (append list (list line))
+               line "")
+       (setq line (concat line (char-to-string (elt string index)))))
+      (setq index (1+ index)) )
+    list))
+
+;; -- the calls to `sleep-for' are to allow enough time for gnuplot
+;;    to write to the buffer before the next line is inserted
+;; -- note that the input string is split into lines and each line is
+;;    sent to gnuplot individually.  this is a bit slow, but it puts
+;;    each line on the comint history.
+(defun gnuplot-send-string-to-gnuplot (string text)
+  "Sends STRING to the gnuplot program.
+If no gnuplot process exists, a new one is created.  TEXT indicates
+the type of text being sent to gnuplot and is typically one of
+nil, 'line, 'region, 'buffer, or 'file.  TEXT may be useful for
+functions in `gnuplot-after-plot-hook'.  `gnuplot-after-plot-hook' is
+called by this function after all of STRING is sent to gnuplot."
+  (gnuplot-make-gnuplot-buffer)        ; make sure a gnuplot buffer exists
+  (or gnuplot-program-version
+      (progn
+       (message "Determining gnuplot version number (sitting for 2 seconds)")
+       (gnuplot-fetch-version-number)
+       (sit-for 2)))
+  (setq gnuplot-comint-recent-buffer (current-buffer))
+  (if (equal gnuplot-display-process 'frame)
+      (or (and gnuplot-process-frame
+              (frame-live-p gnuplot-process-frame))
+         (let ((frame (selected-frame)))
+           (setq gnuplot-process-frame (make-frame))
+           (select-frame gnuplot-process-frame)
+           (switch-to-buffer gnuplot-buffer)
+           (delete-other-windows)
+           (select-frame frame))) )
+  (let ((buffer  (current-buffer))
+       (gbuffer (get-buffer gnuplot-buffer))
+       (list    (gnuplot-split-string string)))
+    (set-buffer gbuffer)
+    (goto-char (point-max))
+    ;; bruce asks: what is this next line for?
+    (set-marker (process-mark gnuplot-process) (point-marker))
+    (sleep-for (* 20 gnuplot-delay))
+    (while list
+      (insert (car list))
+      (comint-send-input)
+      (sleep-for gnuplot-delay)
+      (setq list (cdr list))
+      (goto-char (point-max)))
+    (set-buffer buffer)
+    (cond ((equal gnuplot-display-process 'window)
+          (select-window (display-buffer gbuffer))
+          (goto-char (point-max))
+          (or (pos-visible-in-window-p (point) (selected-window))
+              (recenter 5))
+          (other-window 1))
+         ((equal gnuplot-display-process 'frame)
+          ;;(raise-frame gnuplot-process-frame)
+          (select-frame gnuplot-process-frame)
+          (display-buffer gbuffer)
+          (goto-char (point-max))
+          (or (pos-visible-in-window-p (point) (selected-window))
+              (recenter 5))))
+    ;;(process-send-string gnuplot-program string)
+    (setq gnuplot-recently-sent text)
+    (run-hooks 'gnuplot-after-plot-hook)))
+
+(defun gnuplot-send-region-to-gnuplot (&optional begin end text)
+  "Sends a selected region to the gnuplot program.
+If BEGIN and END are not specified, point and mark are used.  TEXT
+indicates the type of text being sent to gnuplot.  This will be
+'region unless explicitly set by a function calling this one.  Other
+typical values are of nil, 'line, 'buffer, or 'file.  TEXT may be
+useful for function in `gnuplot-after-plot-hook'."
+  (interactive "r")
+  (let (string (txt (or text 'region)))
+    (cond ((equal major-mode 'gnuplot-mode)
+          (setq string (buffer-substring-no-properties begin end))
+          (if (string= (substring string -1) "\n") ()
+            (setq string (concat string "\n")))
+          (gnuplot-send-string-to-gnuplot string txt))
+         (t
+          (message (concat "You can only send regions from "
+                           "gnuplot-mode buffers to gnuplot."))))))
+
+(defun gnuplot-send-line-to-gnuplot ()
+  "Sends the current line to the gnuplot program.
+Respects continuation lines.
+This sets `gnuplot-recently-sent' to 'line."
+  (interactive)
+  (cond ((equal major-mode 'gnuplot-mode)
+        (let ((start (save-excursion (beginning-of-line)   (point-marker)))
+              end
+              ;(end   (save-excursion (beginning-of-line 2) (point-marker)))
+              )
+           (save-excursion
+            (goto-char start)
+            (end-of-line)
+            (backward-char 1)
+            (while (looking-at "\\\\") ; go to end of last continuation line
+              (end-of-line 2)
+              (backward-char 1))
+            (beginning-of-line 2)
+            (setq end (point-marker)))
+          (if (not (string-match "\\`\\s-*\\'"
+                                 (buffer-substring-no-properties start end)))
+              (gnuplot-send-region-to-gnuplot start end 'line))
+          end))
+       (t
+        (message "You can only send lines in gnuplot-mode buffers to gnuplot.")
+        nil)))
+
+;; I chose a very easy to type but slightly non-mnemonic key-binding
+;; for this (C-c C-v).  It seems like the kind of thing one would want
+;; to do repeatedly without incurring RSI. 8^)
+(defun gnuplot-send-line-and-forward (&optional num)
+  "Call `gnuplot-send-line-to-gnuplot' and move forward 1 line.
+You can use a numeric prefix to send more than one line.  Blank lines and
+lines with only comments are skipped when moving forward."
+  (interactive "p")
+  (let (end)
+    (while (> num 0)
+      (setq end (gnuplot-send-line-to-gnuplot))
+      (goto-char end)
+      (backward-char 1)                        ; <AR>
+      (gnuplot-forward-script-line 1)
+      (setq num (1- num)))))
+
+
+(defun gnuplot-forward-script-line (&optional num) ; <SE>
+  "Move forward my NUM script lines.
+Blank lines and commented lines are not included in the NUM count."
+  (interactive "p")
+  (while (> num 0)
+    (and (not (eobp)) (forward-line 1))
+    (while (and (not (eobp))
+               (or (looking-at "^\\s-*$")
+                   (looking-at "^\\s-*#")))
+      (forward-line 1))
+    (setq num (1- num))) )
+
+(defun gnuplot-send-buffer-to-gnuplot ()
+  "Sends the entire buffer to the gnuplot program.
+This sets `gnuplot-recently-sent' to 'buffer."
+  (interactive)
+  (if (equal major-mode 'gnuplot-mode)
+      (gnuplot-send-region-to-gnuplot (point-min) (point-max) 'buffer)
+    (message "You can only send gnuplot-mode buffers to gnuplot.")))
+
+(defun gnuplot-send-file-to-gnuplot ()
+  "Sends a selected file to the gnuplot program using the \"load\" command.
+This sets `gnuplot-recently-sent' to 'file."
+  (interactive)
+  (let ((string (read-file-name "Name of file to send to gnuplot > " nil nil 
t)))
+    (setq string (concat "load '" (expand-file-name string) "'\n"))
+    (message "%S" string)
+    (gnuplot-make-gnuplot-buffer)      ; make sure a gnuplot buffer exists
+    (gnuplot-send-string-to-gnuplot string 'file)))
+
+;; suggested by <JS>
+(defun gnuplot-plot-from-comint ()
+  "Send the contents of a script to gnuplot from the process buffer.
+This inserts the contents of the most recently used gnuplot script
+into the process buffer and sends those lines to gnuplot.  It does
+this by copying the script line by line."
+  (interactive)
+  (if (equal major-mode 'comint-mode)
+      (let (string list (buffer (current-buffer)))
+       (set-buffer gnuplot-comint-recent-buffer)
+       (setq string (buffer-substring-no-properties (point-min) (point-max))
+             string (concat string "\n")
+             list   (gnuplot-split-string string))
+       (set-buffer buffer)
+       (while list
+         (insert (car list))
+         (comint-send-input)
+         (sleep-for gnuplot-delay)
+         (setq list (cdr list)))
+       (comint-send-input))
+    (message
+     "`gnuplot-plot-from-comint' only works in the gnuplot process buffer")))
+
+(defun gnuplot-save-and-plot-from-comint ()
+  "Send a current script to gnuplot from the process buffer.
+This sends the most recently used gnuplot script to gnuplot using the
+\"load\" command.  This function first saves the script buffer to a
+file, prompting for a filename if one is not associated with the script
+buffer.  Then it sends a load command to gnuplot using the name of the
+file visited by the script buffer."
+  (interactive)
+  (if (equal major-mode 'comint-mode)
+      (let (fname (buffer (current-buffer)))
+       (set-buffer gnuplot-comint-recent-buffer)
+       (save-buffer)
+       (setq fname (buffer-file-name))
+       (set-buffer buffer)
+       (goto-char (point-max))
+       (insert (format "load '%s'" fname))
+       (comint-send-input))
+    (message (concat "`gnuplot-save-and-plot-from-comint' only works "
+                    "in the gnuplot process buffer"))))
+
+
+(defun gnuplot-trim-gnuplot-buffer ()
+  "Trim lines form the beginning of the *gnuplot* buffer.
+This keeps that buffer from growing excessively in size.  Normally,
+this function is attached to `gnuplot-after-plot-hook'"
+  (if (> gnuplot-buffer-max-size 0)
+      (save-excursion
+       (set-buffer gnuplot-buffer)
+       (let ((nlines (count-lines (point-min) (point-max)))
+             (kill-whole-line t))
+         (while (> nlines gnuplot-buffer-max-size)
+           (goto-char (point-min))
+           (kill-line)
+           (setq nlines (1- nlines)))
+         (goto-char (point-max)) ))))
+(add-hook 'gnuplot-after-plot-hook 'gnuplot-trim-gnuplot-buffer nil nil)
+
+
+;;; --- functions controlling the gnuplot process
+
+;; use of comint-setup-hook suggested by <DB>
+(defun gnuplot-comint-start-function ()
+  "Function run when comint/gnuplot started.
+This sets font-lock and keyword completion in the comint/gnuplot
+buffer.  Further customization is possible via
+`gnuplot-comint-setup-hook'."
+  ;;(if (not (fboundp 'hilit-set-mode-patterns))
+  (if (featurep 'font-lock)
+      (progn
+       (make-variable-buffer-local 'font-lock-defaults)
+       (setq font-lock-defaults '(gnuplot-font-lock-keywords t t))
+       (if gnuplot-xemacs-p (turn-on-font-lock))))
+  ;;(if (featurep 'kw-compl)
+  ;;    (progn
+  ;;   (setq kw-compl-list gnuplot-keywords
+  ;;         kw-compl-upper-case nil)
+  ;;   (define-key comint-mode-map "\M-\r" 'kw-compl-abbrev)))
+  (define-key comint-mode-map "\M-\C-p" 'gnuplot-plot-from-comint)
+  (define-key comint-mode-map "\M-\C-f" 'gnuplot-save-and-plot-from-comint)
+  (define-key comint-mode-map "\C-d"    'gnuplot-delchar-or-maybe-eof)
+  (define-key comint-mode-map "\M-\r"   'gnuplot-complete-keyword)
+  (define-key comint-mode-map "\M-\t"   'gnuplot-complete-keyword)
+  (run-hooks 'gnuplot-comint-setup-hook))
+
+(defun gnuplot-make-gnuplot-buffer ()
+  "Switch to the gnuplot program buffer or create one if none exists."
+  (or (and gnuplot-process (get-process gnuplot-process)
+          gnuplot-buffer (get-buffer gnuplot-buffer))
+      (progn
+       (message "Starting gnuplot plotting program...")
+       (setq gnuplot-buffer (make-comint gnuplot-process-name gnuplot-program)
+             gnuplot-process (get-process gnuplot-process-name))
+       (process-kill-without-query gnuplot-process nil)
+       (save-excursion
+         (set-buffer gnuplot-buffer)
+         (make-local-hook 'kill-buffer-hook)
+         (add-hook 'kill-buffer-hook 'gnuplot-close-down nil t)
+         (gnuplot-comint-start-function)
+          (make-local-variable 'comint-output-filter-functions)
+          (setq comint-output-filter-functions
+                (append comint-output-filter-functions
+                        '(comint-postoutput-scroll-to-bottom
+                          gnuplot-protect-prompt-fn)))
+         (message "Starting gnuplot plotting program...Done")))))
+
+
+(defun gnuplot-fetch-version-number ()
+  ;;(interactive)
+  (message "gnuplot-mode %s -- determining gnuplot version ......"
+          gnuplot-version)
+  (let* ((command (concat "echo \"show version\" | " gnuplot-program))
+        (process (start-process-shell-command "gnuplot-version"
+                                              "*gnuplot-version*"
+                                              command)))
+    (set-process-sentinel process 'gnuplot-determine-version-number)))
+
+(defun gnuplot-determine-version-number (process event)
+  (save-excursion
+    (let (version)
+      (if (string-match "SPEEDBAR" (format "%S" (current-buffer))) ;; <WZ>
+         (if (fboundp 'speedbar-switch-buffer-attached-frame)
+             (speedbar-switch-buffer-attached-frame "*gnuplot-version*")
+           (progn
+             (speedbar-select-attached-frame)
+             (switch-to-buffer "*gnuplot-version*")))
+       (switch-to-buffer "*gnuplot-version*"))
+      (goto-char (point-min))
+      (re-search-forward "[Vv]ersion\\s-+" (point-max) t)
+      (if (looking-at "[0-9]\\.[0-9]+")
+         (setq version (match-string 0))
+       (setq version "3.7"))
+      (kill-buffer (get-buffer "*gnuplot-version*"))
+      ;;(and (interactive-p) (message "You are using gnuplot version %s" 
version))
+      (setq gnuplot-program-version version
+           gnuplot-three-eight-p (>= (string-to-number 
gnuplot-program-version) 3.8))
+      (gnuplot-setup-menu-and-toolbar)
+      )))
+
+(defun gnuplot-setup-menu-and-toolbar ()
+  ;; set up the menubar (possibly dependent on version number)
+  (gnuplot-setup-menubar)
+  ;; set up the toolbar (possibly dependent on version number)
+  (if (and gnuplot-xemacs-p gnuplot-toolbar-display-flag)
+      (condition-case ()               ; deal with the toolbar
+         (and (require 'toolbar)
+              (require 'xpm)
+              (gnuplot-make-toolbar-function))
+       (error nil)))
+  (message "gnuplot-mode %s (gnuplot %s) -- report bugs with %S"
+          gnuplot-version gnuplot-program-version
+          (substitute-command-keys "\\[gnuplot-bug-report]"))
+  )
+
+
+
+;; (defun gnuplot-determine-gnuplot-version ()
+;;   "Figure out which version of gnuplot we are running."
+;;   (interactive)
+;;   (cond (gnuplot-gnuplot-version
+;;      (setq comint-process-echoes nil          ;; t
+;;            gnuplot-program-version gnuplot-gnuplot-version))
+;;     (t
+;;      (let ((counter 0))
+;;        (save-excursion
+;;          (set-buffer gnuplot-buffer)
+;;          (goto-char (point-min))
+;;          ;; it may take a while for emacs to display the gnuplot start-up
+;;          ;; message.  since we need this to determine the version number
+;;          ;; and hence the value of `comint-process-echoes', we must wait
+;;          ;; for this to happen.
+;;          (while (and (equal (point-max) (point-min)) (< 10 counter))
+;;            (1+ counter)
+;;            (sleep-for 0.1))
+;;          (if (re-search-forward "[Vv]ersion" (point-max) t)
+;;              (progn
+;;                (cond ((or (looking-at "\\s-*3.8") (looking-at "\\s-*4"))
+;;                       (setq comint-process-echoes nil          ;; t
+;;                             gnuplot-program-version "3.8"))
+;;                      ((looking-at "\\s-*3.7")
+;;                       (setq comint-process-echoes nil          ;; t
+;;                             gnuplot-program-version "3.7"))
+;;                      (t
+;;                       (setq comint-process-echoes nil
+;;                             gnuplot-program-version "3.5") )))
+;;            (setq comint-process-echoes gnuplot-echo-command-line-flag)))))))
+
+(defun gnuplot-protect-prompt-fn (string)
+  "Prevent the Gnuplot prompt from being deleted or overwritten.
+STRING is the text as originally inserted in the comint buffer."
+  (save-excursion
+    (let ((b (progn
+               (goto-char (point-max))
+               (beginning-of-line)
+               (point)))
+          e)
+      (if (re-search-forward "^gnuplot> " (point-max) t)
+          (progn
+            (setq e (point))
+            (put-text-property b e 'rear-nonsticky '(read-only intangible 
face))
+            (put-text-property b e 'intangible t)
+            (put-text-property b e 'face 'gnuplot-prompt-face)
+            ;;(put-text-property b e 'read-only t)
+           )) )))
+
+(defun gnuplot-close-down ()
+  "Tidy up when deleting the gnuplot buffer."
+  (if (eq (process-status gnuplot-process) 'run);; <SE>
+      (kill-process gnuplot-process))
+  (setq gnuplot-process nil
+        gnuplot-buffer nil))
+
+(defun gnuplot-delchar-or-maybe-eof (arg)
+  "Delete ARG characters forward, or (if at eob) send an EOF to subprocess.
+This is very similar to `comint-delchar-or-maybe-eof'."
+  (interactive "p")
+  (if (eobp)
+      (gnuplot-kill-gnuplot-buffer)
+    (delete-char arg)))
+
+(defun gnuplot-kill-gnuplot-buffer ()
+  "Kill the gnuplot process and its display buffers."
+  (interactive)
+  (if (and gnuplot-process
+          (eq (process-status gnuplot-process) 'run))  ;; <SE>
+      (kill-process gnuplot-process))
+  (if (and gnuplot-buffer (get-buffer gnuplot-buffer))
+      (progn
+       (if (one-window-p) ()
+         (delete-window (get-buffer-window gnuplot-buffer)))
+       (kill-buffer gnuplot-buffer)))
+  (setq gnuplot-process nil
+        gnuplot-buffer nil))
+
+
+(defun gnuplot-show-gnuplot-buffer ()
+  "Switch to the buffer containing the gnuplot process.
+When `gnuplot-display-process' is nil this will switch to
+the gnuplot process buffer.  When that variable is non-nil, the
+gnuplot process buffer will be displayed in a window."
+  (interactive)
+  (if (and gnuplot-buffer (get-buffer gnuplot-buffer))
+      (cond ((equal gnuplot-display-process 'window)
+            (switch-to-buffer-other-window gnuplot-buffer))
+           ((equal gnuplot-display-process 'frame)
+            (or (and gnuplot-process-frame
+                     (frame-live-p gnuplot-process-frame))
+                (setq gnuplot-process-frame (make-frame)))
+            (raise-frame gnuplot-process-frame)
+            (select-frame gnuplot-process-frame)
+            (switch-to-buffer gnuplot-buffer))
+           (t
+            (switch-to-buffer gnuplot-buffer)))
+    (message "There is not an active Gnuplot process.")))
+
+
+;;; --- miscellaneous functions: insert file name, indentation, negation
+
+(defun gnuplot-insert-filename ()
+  "Insert a filename at point, prompting for name in the minibuffer.
+This inserts a filename relative to the buffer's default directory.
+Uses completion and the value of `gnuplot-quote-character'.
+Bound to \\[gnuplot-insert-filename]"
+  (interactive)
+  (insert gnuplot-quote-character
+         (file-relative-name (read-file-name "Filename > " "")
+                             default-directory)
+         gnuplot-quote-character) )
+
+;; is this more complicated than it need be ...?
+;; this doesn't quite do plot lists correctly:
+;;   plot sin(x),\
+;;        cos(x)         # ok
+;;        set auto       # not ok, should be under "p" (but does it matter?)
+
+(defun gnuplot-indent-line ()
+  "Set indentation in gnuplot buffer.
+For most lines, set indentation to previous level of indentation.
+Attempt to add additional indentation for continued plot and splot
+lines."
+  (interactive)
+  (let ((indent 0))
+    (save-excursion
+      (save-excursion
+       (end-of-line 0)
+       (if (bobp) ()
+         (re-search-backward "^[ \t]*." (point-min) "to_limit")
+         (back-to-indentation)
+         (setq indent (current-column))
+         (if (looking-at "s?pl\\(o?\\|\\(ot\\)?\\)[ \t]+.?")
+             (let ((plus (1- (length (match-string 0)))))
+               (end-of-line)
+               (backward-char 1)
+               (if (looking-at (regexp-quote "\\"))
+                   (setq indent  (+ plus indent)))))))
+      (if (= (current-indentation) indent)
+         ()
+       (beginning-of-line)
+       (delete-horizontal-space)
+       (insert (make-string indent ? ))))
+    (if (looking-at "[ \t]+$")
+       (end-of-line))))
+
+;; FWIW, here are all the options which can be negated:
+;; (insert (format "%s"
+;;             (regexp-quote
+;;              (make-regexp
+;;               '("arrow" "autoscale" "border" "clabel" "clip"
+;;                 "contour" "dgrid3d" "grid" "hidden3d" "key" "label"
+;;                 "linestyle" "logscale" "multiplot" "mxtics"
+;;                 "mytics" "mztics" "mx2tics" "my2tics"
+;;                 "offsets" "polar" "surface" "timestamp" "title"
+;;                 "xdtics" "ydtics" "zdtics" "x2dtics" "y2dtics"
+;;                 "xmtics" "ymtics" "zmtics" "x2mtics" "y2mtics"
+;;                 "xtics" "ytics" "ztics" "x2tics" "y2tics"
+;;                 "xzeroaxis" "yzeroaxis" "zzeroaxis" "x2zeroaxis"
+;;                 "y2zeroaxis")))))
+
+(defun gnuplot-negate-option ()
+  "Append \"no\" to or remove \"no\" from the set option on the current line.
+This checks if the set option is one which has a negated form."
+  (interactive)
+  (let ((begin (save-excursion (beginning-of-line) (point-marker)))
+       (end   (save-excursion (end-of-line)       (point-marker)))
+       (regex 
"a\\(rrow\\|utoscale\\)\\|border\\|c\\(l\\(abel\\|ip\\)\\|ontour\\)\\|dgrid3d\\|grid\\|hi\\(dden3d\\|storysize\\)\\|key\\|l\\(abel\\|inestyle\\|ogscale\\)\\|m\\(ouse\\|ultiplot\\|x\\(2tics\\|tics\\)\\|y\\(2tics\\|tics\\)\\|ztics\\)\\|offsets\\|polar\\|surface\\|ti\\(mestamp\\|tle\\)\\|x\\(2\\(dtics\\|mtics\\|tics\\|zeroaxis\\)\\|dtics\\|mtics\\|tics\\|zeroaxis\\)\\|y\\(2\\(dtics\\|mtics\\|tics\\|zeroaxis\\)\\|dtics\\|mtics\\|tics\\|zeroaxis\\)\\|z\\(dtics\\|mtics\\|tics\\|zeroaxis\\)"))
+    (save-excursion
+      (if (search-backward ";" begin t)
+         (progn (forward-char  1) (setq begin (point-marker))))
+      (if (search-forward  ";" end   t)
+         (progn (forward-char -1) (setq end   (point-marker))))
+      (goto-char begin)
+      (skip-syntax-forward "-" end)
+      (if (looking-at "\\(un\\)?set\\s-+")
+         (cond ((and gnuplot-program-version
+                     (> (string-to-number gnuplot-program-version) 3.7))
+                (cond ((looking-at "unset")
+                       (delete-char 2))
+                      ((looking-at (concat "set\\s-+\\(" regex "\\)"))
+                       (insert "un"))
+                      (t
+                       (message "There is not a negatable set option on this 
line"))))
+               (t
+                (goto-char (match-end 0))
+                (if (> (point) end) (goto-char end))
+                (cond ((looking-at "no")
+                       (delete-char 2))
+                      ((looking-at regex)
+                       (insert "no"))
+                      (t
+                       (message "There is not a negatable set option on this 
line")))))
+       (message "There is not a set option on this line")) )))
+
+;; (defun gnuplot-set-binding ()
+;;   "Interactively select a key sequence for binding to a plot function.
+;; This is only useful in gnuplot 3.8 and for plot terminals which support
+;; key bindings (i.e. those covered by pm3d)."
+;;   (interactive)
+;;   (let ((keyseq (read-key-sequence "Choose a key sequence now"))
+;;     (command (read-string "Bind to this command > ")))
+;;     (setq keyseq (format "%S" keyseq))
+;;     (string-match "keypress-event\\s-+" keyseq)
+;;     (setq keyseq (substring keyseq (match-end 0) -2))
+;;     ;; need to convert from emacs nomenclature to gnuplot.  what a pain.
+;;     (let* ((alist '(("backspace" . "Backspace") ("tab" . "Tab") ("linefeed" 
. "Linefeed")
+;;                 ("clear" . "Clear") ("return" . "Return") ("pause" . 
"Pause")
+;;                 ("scroll-lock" . "Scroll_Lock") ("SysReq" . "sys-req")
+;;                 ("escape" . "Escape") ("delete" . "Delete") ("home" . 
"Home")
+;;                 ("left" . "Left") ("right" . "Right") ("up" . "Up") ("down" 
. "Down")
+;;                 ("prior" . "PageUp") ("next" . "PageDown") ("end" . "End")
+;;                 ("begin". "Begin")))
+;;        (match (assoc keyseq alist)))
+;;       (if match (setq keyseq (cdr match)))
+;;
+;;     (insert (format "bind \"%s\" \"%s\"" keyseq command)))))
+
+
+(defun gnuplot-customize ()
+  "Customize `gnuplot-mode'."
+  (interactive)
+  (if (fboundp 'customize-group)
+      (customize-group "gnuplot")
+    (message "The Custom library is not installed.")))
+
+
+
+;;; --- help from the info file, keyword list + completion, insert function
+
+
+;; set up stuff for info-look (as suggested by <SE>)
+;; modified with suggestion from <MS>
+(defun gnuplot-setup-info-look ()
+  "Setup info-look in the gnuplot buffer.
+Also set the variable `gnuplot-keywords' and do something sensible if
+info-look was not available.
+See the comments in `gnuplot-info-hook'."
+  (interactive)
+  (setq gnuplot-keywords-pending nil)
+  (if (featurep 'info-look)
+      (progn
+       (cond ((boundp 'info-lookup-symbol-alist) ; older version
+              (setq info-lookup-symbol-alist
+                    (append
+                     info-lookup-symbol-alist
+                     '((gnuplot-mode
+                        "[a-zA-Z][_a-zA-Z0-9]*" nil
+                        (("(gnuplot)Top"           nil "[_a-zA-Z0-9]+")
+                         ("(gnuplot)Commands"      nil "[_a-zA-Z0-9]+")
+                         ("(gnuplot)Functions"     nil "[_a-zA-Z0-9]+")
+                         ("(gnuplot)plot"          nil "[_a-zA-Z0-9]+")
+                         ("(gnuplot)set-show"      nil "[_a-zA-Z0-9]+")
+                         ("(gnuplot)data-file"     nil "[_a-zA-Z0-9]+")
+                         ("(gnuplot)smooth"        nil "[_a-zA-Z0-9]+")
+                         ("(gnuplot)style"         nil "[_a-zA-Z0-9]+")
+                         ("(gnuplot)terminal"      nil "[_a-zA-Z0-9]+")
+                         ;;("(gnuplot)General Index" nil "[_a-zA-Z0-9]+")
+                         ) "[_a-zA-Z0-9]+" ))) ))
+             (t                        ; newer version
+              (info-lookup-maybe-add-help
+               :mode 'gnuplot-mode :topic 'symbol
+               :regexp "[a-zA-Z][_a-zA-Z0-9]*"
+               :doc-spec '(("(gnuplot)Top"           nil "[_a-zA-Z0-9]+")
+                           ("(gnuplot)Commands"      nil "[_a-zA-Z0-9]+")
+                           ("(gnuplot)Functions"     nil "[_a-zA-Z0-9]+")
+                           ("(gnuplot)plot"          nil "[_a-zA-Z0-9]+")
+                           ("(gnuplot)set-show"      nil "[_a-zA-Z0-9]+")
+                           ("(gnuplot)data-file"     nil "[_a-zA-Z0-9]+")
+                           ("(gnuplot)smooth"        nil "[_a-zA-Z0-9]+")
+                           ("(gnuplot)style"         nil "[_a-zA-Z0-9]+")
+                           ("(gnuplot)terminal"      nil "[_a-zA-Z0-9]+")
+                           ) )))
+       ;; this hook is my best way of working with info-look and
+       ;; allowing multiple versions of the gnuplot-info file.
+       ;; yes, this is a hassle.
+       (run-hooks 'gnuplot-info-hook)
+       (let ((there (bufferp (get-buffer "*info*"))))
+         (info-lookup-setup-mode 'symbol 'gnuplot-mode)
+         (or there (and (get-buffer "*info*") (kill-buffer "*info*")))
+         ;; why are these buffers here?  I think that the general
+         ;; user will not want them lying around
+         (and (get-buffer "info dir")    (kill-buffer "info dir"))
+         (and (get-buffer "info dir<2>") (kill-buffer "info dir<2>")))
+       (setq gnuplot-keywords (gnuplot-set-keywords-list))
+       )
+
+    ;; or do something sensible if info-look is not installed
+    (defun info-lookup-interactive-arguments (symbol)
+      (message
+       "Help is not available.  The gnuplot info file could not be found.")
+      (list nil nil))) )
+
+
+(defun gnuplot-set-keywords-list ()
+  "Set `gnuplot-keywords' from `info-lookup-cache'.
+Return a list of keywords."
+  (let* ((list (cdr (assoc 'symbol info-lookup-cache)))
+        (list (cdr (cdr (assoc 'gnuplot-mode list))))
+        (list (car list))
+        (store ()) item)
+    (while list
+      (setq item (car (car list))
+           item (format "%s" item) ; keep this line for the sake of
+           store (append (list item) store) ; info-look.el w/o my patch
+           list  (cdr list)))
+    (delete "nil" store)
+    store ))
+
+
+(defun gnuplot-complete-keyword ()
+  "Perform completion on keyword preceding point.
+This is a pretty simple minded completion function.  It is loosely
+adapted from `lisp-complete-symbol'."
+  (interactive)
+  (if gnuplot-keywords-pending         ; <HW>
+      (gnuplot-setup-info-look))
+  (let* ((end (point))
+        (beg (unwind-protect (save-excursion (backward-sexp 1) (point))))
+        (patt (buffer-substring beg end))
+        (pattern (if (string-match "\\([^ \t]*\\)\\s-+$" patt)
+                     (match-string 1 patt) patt))
+        (alist (mapcar 'list gnuplot-keywords))
+        (completion (try-completion pattern alist)))
+    (cond ((eq completion t))
+         ((null completion)
+          (message "No gnuplot keywords complete \"%s\"" pattern))
+         (t
+          (when (not (string= pattern completion))
+            (delete-region beg end)
+            (insert completion))
+          (let* ((list (all-completions pattern alist))
+                 (mess (format "%S could be one of %S" pattern list))
+                 (orig (current-buffer))
+                 (buff (get-buffer-create " *gnuplot-completions*")))
+            (if (= (length list) 1) (insert " "))
+            (if (< (length mess) (frame-width))
+                (if (> (length list) 1) (message mess))
+              (switch-to-buffer-other-window buff)
+              (insert mess)
+              (fill-region (point-min) (point-max))
+              (goto-char (point-min))
+              (enlarge-window
+               (+ 2 (- (count-lines (point-min) (point-max))
+                       (window-height))))
+              (sit-for (max (length list) 15))
+              (switch-to-buffer orig)
+              (kill-buffer buff)
+              (delete-other-windows) ))) )))
+
+(defun gnuplot-info-lookup-symbol (symbol &optional mode)
+  "Wrapper for `info-lookup-symbol'.
+Takes SYMBOL and MODE as arguments exactly as `info-lookup-symbol'.
+After doing the info lookup, this displays the info file in a window
+frame as specified by the value of `gnuplot-info-display'.  If
+`gnuplot-info-display' is 'window, then the window will be shrunk to
+the size of the info entry if it is smaller than half the height of
+the frame."
+  (interactive
+   (cond (gnuplot-keywords
+         (info-lookup-interactive-arguments 'symbol))
+        (gnuplot-keywords-pending      ; <HW>
+         (gnuplot-setup-info-look)
+         (info-lookup-interactive-arguments 'symbol))
+        (t
+         (list nil (message
+       "Help is not available.  The gnuplot info file could not be found.")))))
+  (if (and (featurep 'info-look) gnuplot-keywords)
+      (let ((buff (current-buffer))
+           (info-lookup-other-window-flag
+            (if gnuplot-info-display t nil)))
+       (if symbol () (setq symbol "Commands"))
+       (info-lookup-symbol symbol mode)
+       (cond ((equal gnuplot-info-display 'window)
+              (let ((sw (selected-window))
+                    (window-min-height 2))
+                (other-window 1)
+                (enlarge-window
+                 (min (- (count-lines (point-min) (point-max)) (window-height))
+                      (- (/ (frame-height) 2) (window-height))))
+                (select-window sw)))
+             ((equal gnuplot-info-display 'frame)
+              (switch-to-buffer buff)
+              (delete-other-windows)
+              (or (and gnuplot-info-frame
+                       (frame-live-p gnuplot-info-frame))
+                  (setq gnuplot-info-frame (make-frame)))
+              (select-frame gnuplot-info-frame)
+              (raise-frame gnuplot-info-frame)
+              (if gnuplot-xemacs-p (setq toolbar-info-frame 
gnuplot-info-frame))
+              (switch-to-buffer "*info*") )) )))
+
+
+(defun gnuplot-insert (string)
+  "Insert STRING at point and display help for for STRING.
+Help is not shown if `gnuplot-insertions-show-help-flag' is nil.  The
+help shown is for STRING unless STRING begins with the word \"set\" or
+\"show\", in which case help is shown for the thing being set or
+shown."
+  (interactive)
+  (cond ((and (not gnuplot-three-eight-p)
+             (string-match "\\(emf\\|p\\(alette\\|m3d\\)\\|vgagl\\)" string))
+        (message "%S is an option introduced in gnuplot 3.8 (You are using %s)"
+                 string gnuplot-program-version) )
+       (t
+        (insert string)
+        (let ((topic string) term)
+          (if (string-match
+               "\\(set\\|show\\)[ \t]+\\([^ \t]+\\)\\(\\s-+\\([^ \t]+\\)\\)?"
+               string)
+              (progn
+                (setq topic (downcase (match-string 2 string))
+                      term            (match-string 4 string))
+                (if (string= topic "terminal") (setq topic (downcase term)))))
+          (cond ((and (fboundp 'gnuplot-gui-set-options-and-insert)
+                      gnuplot-gui-popup-flag)
+                 (gnuplot-gui-set-options-and-insert))
+                (gnuplot-insertions-show-help-flag
+                 (if gnuplot-keywords-pending          ; <HW>
+                     (gnuplot-setup-info-look))
+                 (gnuplot-info-lookup-symbol topic)) ) )) ) )
+
+(defun gnuplot-toggle-info-display ()
+  (interactive)
+  (setq gnuplot-insertions-show-help-flag (not 
gnuplot-insertions-show-help-flag))
+  (message (if gnuplot-insertions-show-help-flag
+              "Help will be displayed after insertions."
+            "Help no longer displayed after insertions.")))
+
+
+;;; --- bug reports
+;; grep '(defcustom' gnuplot.el gnuplot-gui.el | awk '{print $2}'
+(defun gnuplot-bug-report ()
+  "Submit a bug report about `gnuplot-mode' by email.
+Please do not send any bug reports about gnuplot itself to the
+maintainer of `gnuplot-mode'."
+  (interactive)
+  (let ((line (make-string 62 ?-)))
+    (require 'reporter)
+    (and (y-or-n-p
+         "Do you really want to submit an email report about gnuplot? ")
+        (y-or-n-p
+         (concat "Variable values will be written to the message.  "
+                 "Don't erase them.  OK? "))
+        (reporter-submit-bug-report
+         (format "%s <%s>" gnuplot-maintainer gnuplot-maintainer-email)
+         (format "gnuplot-mode (version %s)" gnuplot-version)
+         (append      ; variables to display values of in mail
+          '(gnuplot-mode-hook
+            gnuplot-load-hook
+            gnuplot-after-plot-hook
+            gnuplot-info-hook
+            gnuplot-comint-setup-hook
+            gnuplot-program
+            gnuplot-program-version
+            gnuplot-process-name
+            gnuplot-gnuplot-buffer
+            gnuplot-display-process
+            gnuplot-info-display
+            gnuplot-echo-command-line-flag
+            gnuplot-insertions-show-help-flag
+            gnuplot-delay
+            gnuplot-quote-character
+            gnuplot-keywords-when
+            ;;gnuplot-insertions-menu-flag
+            ;;gnuplot-insertions-adornments
+            ;;gnuplot-insertions-plot-options
+            ;;gnuplot-insertions-terminal
+            ;;gnuplot-insertions-x-axis
+            ;;gnuplot-insertions-x2-axis
+            ;;gnuplot-insertions-y-axis
+            ;;gnuplot-insertions-y2-axis
+            ;;gnuplot-insertions-z-axis
+            ;;gnuplot-insertions-parametric-plots
+            ;;gnuplot-insertions-polar-plots
+            ;;gnuplot-insertions-surface-plots
+            gnuplot-toolbar-display-flag
+            gnuplot-toolbar-use-toolbar
+            gnuplot-gui-popup-flag
+            gnuplot-gui-frame-plist
+            gnuplot-gui-frame-parameters
+            gnuplot-gui-fontname-list
+            gnuplot-gui-plot-splot-fit-style
+            ;; plus a few more...
+            gnuplot-comint-recent-buffer
+            gnuplot-version
+            Info-directory-list
+            exec-path
+            features ))
+         nil                           ; pre-hooks
+         nil                           ; post-hooks
+         (concat line                  ; salutation
+          "\nInsert your description of the gnuplot-mode bug here.\n"
+          "Please be as specific as possible.\n\n"
+          "There are several known shortcomings of gnuplot-mode.\n"
+          "Many of these have to do with the complicated and inconsistent\n"
+          "syntax of gnuplot itself.  See the document string for the\n"
+          "function `gnuplot-mode' (use `"
+          (substitute-command-keys "\\[describe-function]")
+          "') for details.\n\n"
+          "Note that this bug report form should be used for problems\n"
+          "with gnuplot-mode only.  Problems with gnuplot itself should\n"
+          "be addressed directly to the developers of gnuplot.\n"
+          "The maintainer of gnuplot-mode will not field questions about\n"
+          "gnuplot itself.  Thank you.\n"
+          line)
+         ))))
+
+
+
+;;; --- autoloaded functions: gnuplot-mode and gnuplot-make-buffer
+
+;;;###autoload
+(defun gnuplot-mode ()
+  "Major mode for editing and executing GNUPLOT scripts.
+This was written with version 3.7 of gnuplot in mind but it should
+work fine with version 3.5 and the various 3.6 beta versions.
+
+Report bugs in `gnuplot-mode' using \\[gnuplot-bug-report].
+
+                           ------O------
+
+The help functions, keyword completion, and several other features
+depend upon having the info file properly installed.  The info file
+can be made in the document directory of the gnuplot distribution or
+is available at the `gnuplot-mode' web page:
+    http://feff.phys.washington.edu/~ravel/software/gnuplot-mode/
+
+If the help function does not work properly, you may have an older
+version of the gnuplot info file.  Try the suggestion in the document
+string for the variable `gnuplot-info-hook'.  See the `gnuplot-mode'
+web page for more details.
+
+                           ------O------
+
+There are several known shortcomings of `gnuplot-mode', version 0.5g
+and up.  Many of the shortcomings involve the graphical interface
+(refered to as the GUI) to setting arguments to plot options.  Here is
+a list:
+
+ 1.  Currently there is no way for `gnuplot-mode' to know if information
+     sent to gnuplot was correctly plotted.
+ 2.  Indentation is sometimes a bit flaky.
+ 3.  \"plot\", \"splot\", and \"fit\" are handled in the GUI, but are
+     a bit flaky.  Their arguments may not be read correctly from
+     existing text, and continuation lines (common for plot and splot)
+     are not supported.
+ 4.  The GUI does not know how to read from continuation lines.
+ 5.  Comma separated position arguments to plot options are
+     unsupported in the GUI.  Colon separated datafile modifiers (used
+     for plot, splot, and fit) are not supported either.  Arguments
+     not yet supported by the GUI generate messages printed in grey
+     text.
+ 6.  The GUI handling of \"hidden3d\" is flaky and \"cntrparam\" is
+     unsupported.
+
+                           ------O------
+
+ Key bindings:
+ \\{gnuplot-mode-map}"
+  (interactive)
+  (kill-all-local-variables)
+  (use-local-map gnuplot-mode-map)
+  (setq major-mode 'gnuplot-mode
+       mode-name "Gnuplot")
+  (set (make-local-variable 'comment-start) "# ")
+  (set (make-local-variable 'comment-end) "")
+  (set (make-local-variable 'comment-column) 32)
+  (set (make-local-variable 'comment-start-skip) "#[ \t]*")
+  (set (make-local-variable 'indent-line-function) 'gnuplot-indent-line)
+  (set-syntax-table gnuplot-mode-syntax-table)
+  (if (or (fboundp 'hilit-set-mode-patterns)
+         (equal gnuplot-keywords-when 'immediately)) ; <HW>
+      (gnuplot-setup-info-look)) ;; <SE>
+  (if (fboundp 'hilit-set-mode-patterns) ; deal with hilit19 (ho hum!)
+      (let ((keywords (concat "\\b\\(" (mapconcat 'identity
+                                                 gnuplot-keywords "\\|")
+                             "\\)\\b")))
+       (hilit-set-mode-patterns
+        'gnuplot-mode
+        `(("#.*$" nil comment)
+          ("\\([a-zA-Z0-9_-]+\\)\\(([^)]*)\\)?\\s *=" nil define)
+          ,(list keywords 'nil 'keyword)
+          (hilit-string-find ?\\ string)
+          ))) )
+  ;;(if (featurep 'kw-compl)           ; old-style keyword completion
+  ;;    (setq kw-compl-list gnuplot-keywords
+  ;;       kw-compl-upper-case nil)) ; gnuplot keywords must be lower case
+  (if gnuplot-xemacs-p                 ; deal with font-lock
+      (if (fboundp 'turn-on-font-lock) (turn-on-font-lock))
+    (progn
+      (make-variable-buffer-local 'font-lock-defaults)
+      (setq font-lock-defaults '(gnuplot-font-lock-keywords t t))))
+;;   (if (and gnuplot-xemacs-p gnuplot-toolbar-display-flag)
+;;       (condition-case ()            ; deal with the toolbar
+;;       (and (require 'toolbar)
+;;            (require 'xpm)
+;;            (gnuplot-make-toolbar-function))
+;;     (error nil)))
+  (if (fboundp 'widget-create)         ; gunplot-gui
+      (condition-case ()
+         (require 'gnuplot-gui)
+       (error nil)))
+  (setq gnuplot-first-call nil         ; a few more details ...
+       gnuplot-comint-recent-buffer (current-buffer)
+        comint-process-echoes        gnuplot-echo-command-line-flag)
+  (run-hooks 'gnuplot-mode-hook)
+  ;; the first time we need to figure out which gnuplot we are running
+  (if gnuplot-program-version
+      (gnuplot-setup-menu-and-toolbar)
+    (gnuplot-fetch-version-number)))
+
+;;;###autoload
+(defun gnuplot-make-buffer ()
+  "Open a new buffer in `gnuplot-mode'.
+When invoked, it switches to a new, empty buffer visiting no file
+and then starts `gnuplot-mode'.
+
+It is convenient to bind this function to a global key sequence.  For
+example, to make the F10 key open a gnuplot script buffer, put the
+following in your .emacs file:
+     (autoload 'gnuplot-make-buffer \"gnuplot\"
+               \"open a buffer in gnuplot mode\" t)
+     (global-set-key [(f10)] 'gnuplot-make-buffer)"
+  (interactive)
+  (switch-to-buffer gnuplot-gnuplot-buffer)
+  (gnuplot-mode))
+
+(defun gnuplot-show-version ()
+  "Show version number in echo area"
+  (interactive)
+  (message "gnuplot-mode %s -- URL: %s" gnuplot-version 
gnuplot-maintainer-url))
+
+(defun gnuplot-show-gnuplot-version ()
+  "Show gnuplot program and version number in echo area"
+  (interactive)
+  (message "You are calling gnuplot %s as %s" gnuplot-program-version 
gnuplot-program))
+
+
+;;; That's it! ----------------------------------------------------------------
+
+
+;;; --- final chores: provide 'gnuplot and run load-hook
+;; provide before run-hooks suggested by <DB>
+(provide 'gnuplot)
+(run-hooks 'gnuplot-load-hook)
+
+;;;============================================================================
+;;;
+;;; gnuplot.el ends here
diff --git a/gnuplot.info b/gnuplot.info
new file mode 100644
index 0000000..89168dc
--- /dev/null
+++ b/gnuplot.info
@@ -0,0 +1,7710 @@
+This file is gnuplot.info created by doc2info from ./gnuplot.doc.
+
+
+File: gnuplot.info, Node: Top, Prev: (dir), Next: gnuplot, Up: (dir)
+
+gnuplot
+*******
+
+
+* Menu:
+
+* gnuplot::
+* Commands::
+* Graphical User Interfaces::
+* Bugs::
+
+
+File: gnuplot.info, Node: gnuplot, Prev: Top, Up: Top, Next: Copyright
+
+
+* Menu:
+
+* Copyright::
+* Introduction::
+* Seeking-assistance::
+* What's New in version 3.7::
+* Batch/Interactive Operation::
+* Command-line-editing::
+* Comments::
+* Coordinates::
+* Environment::
+* Expressions::
+* Glossary::
+* Plotting::
+* Start-up::
+* Substitution::
+* Syntax::
+* Time/Date data::
+
+
+File: gnuplot.info, Node: Copyright, Prev: gnuplot, Up: gnuplot, Next: 
Introduction
+
+       Copyright (C) 1986 - 1993, 1998   Thomas Williams, Colin Kelley
+
+ Permission to use, copy, and distribute this software and its
+ documentation for any purpose with or without fee is hereby granted,
+ provided that the above copyright notice appear in all copies and
+ that both that copyright notice and this permission notice appear
+ in supporting documentation.
+
+ Permission to modify the software is granted, but not the right to
+ distribute the complete modified source code.  Modifications are to
+ be distributed as patches to the released version.  Permission to
+ distribute binaries produced by compiling modified sources is granted,
+ provided you
+   1. distribute the corresponding source modifications from the
+    released version in the form of a patch file along with the binaries,
+   2. add special version identification to distinguish your version
+    in addition to the base release version number,
+   3. provide your name and address as the primary contact for the
+    support of your modified version, and
+   4. retain our contact information in regard to use of the base
+    software.
+ Permission to distribute the released version of the source code along
+ with corresponding source modifications in the form of a patch file is
+ granted with same provisions 2 through 4 for binary distributions.
+
+ This software is provided "as is" without express or implied warranty
+ to the extent permitted by applicable law.
+
+
+       AUTHORS
+
+       Original Software:
+          Thomas Williams,  Colin Kelley.
+
+       Gnuplot 2.0 additions:
+          Russell Lang, Dave Kotz, John Campbell.
+
+       Gnuplot 3.0 additions:
+          Gershon Elber and many others.
+
+
+File: gnuplot.info, Node: Introduction, Prev: Copyright, Up: gnuplot, Next: 
Seeking-assistance
+
+ `gnuplot` (*note gnuplot:: ) is a command-driven interactive function and data
+ plotting program. It is case sensitive (commands and function names written in
+ lowercase are not the same as those written in CAPS).  All command names may
+ be abbreviated as long as the abbreviation is not ambiguous.  Any number of
+ commands may appear on a line (with the exception that `load` (*note load:: )
+ or  `call` (*note call:: ) must be the final command), separated by semicolons
+ (;).  Strings are indicated with quotes. They may be either single or double
+ quotation marks, e.g.,
+
+       load "filename"
+       cd 'dir'
+
+ although there are some subtle differences (see `syntax` (*note Syntax:: ) for
+ more details).
+
+ Any command-line arguments are assumed to be names of files containing
+ `gnuplot` commands, with the exception of standard X11 arguments, which are
+ processed first.  Each file is loaded with the `load` command, in the order
+ specified.  `gnuplot` exits after the last file is processed.  When no load
+ files are named, `gnuplot` enters into an interactive mode.  The special
+ filename "-" is used to denote standard input.  See "help batch/interactive"
+ for more details.
+
+ Many `gnuplot` commands have multiple options.  These options must appear in
+ the proper order, although unwanted ones may be omitted in most cases.  Thus
+ if the entire command is "command a b c", then "command a c" will probably
+ work, but "command c a" will fail.
+
+ Commands may extend over several input lines by ending each line but the last
+ with a backslash (\).  The backslash must be the _last_ character on each
+ line.  The effect is as if the backslash and newline were not there.  That
+ is, no white space is implied, nor is a comment terminated.  Therefore,
+ commenting out a continued line comments out the entire command (see
+ `comment`).  But note that if an error occurs somewhere on a multi-line
+ command, the parser may not be able to locate precisely where the error is
+ and in that case will not necessarily point to the correct line.
+
+ In this document, curly braces ({}) denote optional arguments and a vertical
+ bar (|) separates mutually exclusive choices.  `gnuplot` keywords or `help`
+ (*note help:: ) topics are indicated by backquotes or `boldface` (where
+ available).  Angle brackets (<>) are used to mark replaceable tokens.  In many
+ cases, a default value of the token will be taken for optional arguments if
+ the token is omitted, but these cases are not always denoted with braces
+ around the angle brackets.
+
+ For on-line help on any topic, type `help` followed by the name of the topic
+ or just `help` or `?` to get a menu of available topics.
+
+ The new `gnuplot` user should begin by reading about `plotting`
+ (*note Plotting:: ) (if on-line, type `help plotting`).
+
+
+
+File: gnuplot.info, Node: Seeking-assistance, Prev: Introduction, Up: gnuplot, 
Next: What's New in version 3.7
+
+ There is a mailing list for `gnuplot` (*note gnuplot:: ) users.  Note,
+ however, that the newsgroup       comp.graphics.apps.gnuplot is identical to
+ the mailing list (they both carry the same set of messages). We prefer that
+ you read the messages through the newsgroup rather than subscribing to the
+ mailing list.  Administrative requests should be sent to
+       majordomo@dartmouth.edu Send a message with the body (not the subject)
+ consisting of the single word "help" (without the quotes) for more details.
+
+ The address for mailing to list members is:
+       info-gnuplot@dartmouth.edu
+
+ Bug reports and code contributions should be mailed to:
+       bug-gnuplot@dartmouth.edu
+
+ The list of those interested in beta-test versions is:
+       info-gnuplot-beta@dartmouth.edu
+
+ There is also a World Wide Web page with up-to-date information, including
+ known bugs:
+       http://www.cs.dartmouth.edu/gnuplot_info.html
+
+ Before seeking help, please check the
+ FAQ (Frequently Asked Questions) list.
+ If you do not have a copy of the FAQ, you may request a copy by email from
+ the Majordomo address above, ftp a copy from
+       ftp://ftp.dartmouth.edu/pub/gnuplot
+ or see the WWW `gnuplot` page.
+
+ When posting a question, please include full details of the version of
+ `gnuplot`, the machine, and operating system you are using.  A _small_ script
+ demonstrating the problem may be useful.  Function plots are preferable to
+ datafile plots.  If email-ing to info-gnuplot, please state whether or not
+ you are subscribed to the list, so that users who use news will know to email
+ a reply to you.  There is a form for such postings on the WWW site.
+
+
+File: gnuplot.info, Node: What's New in version 3.7, Prev: Seeking-assistance, 
Up: gnuplot, Next: Batch/Interactive Operation
+
+ Gnuplot version 3.7 contains many new features.  This section gives a partial
+ list and links to the new items in no particular order.
+
+ 1. `fit f(x) 'file' via` uses the Marquardt-Levenberg method to fit data.
+ (This is only slightly different from the `gnufit` patch available for 3.5.)
+
+ 2. Greatly expanded `using` (*note using:: ) command.  See plot using.
+
+ 3. `set timefmt` (*note timefmt:: ) allows for the use of dates as input and
+ output for time series plots.  See `Time/Date data` and timedat.dem.
+
+ 4. Multiline labels and font selection in some drivers.
+
+ 5. Minor (unlabeled) tics.  See `set mxtics` (*note mxtics:: ).
+
+ 6. `key` (*note key:: ) options for moving the key box in the page (and even
+ outside of the plot), putting a title on it and a box around it, and
+ more.  See `set key`.
+
+ 7. Multiplots on a single logical page with `set multiplot`
+ (*note multiplot:: ).
+
+ 8. Enhanced `postscript` (*note postscript:: ) driver with super/subscripts
+ and font changes. (This was a separate driver (`enhpost`) that was available
+ as a patch for 3.5.)
+
+ 9. Second axes:  use the top and right axes independently of the bottom and
+ left, both for plotting and labels.  See `plot` (*note plot:: ).
+
+ 10. Special datafile names `'-'` and `""`.  See `plot special-filenames`
+ (*note special-filenames:: ).
+
+ 11. Additional coordinate systems for labels and arrows.  See `coordinates`
+ (*note Coordinates:: ).
+
+ 12. `set size` (*note size:: ) can try to plot with a specified aspect ratio.
+
+ 13. `set missing` (*note missing:: ) now treats missing data correctly.
+
+ 14. The `call` (*note call:: ) command:  `load` (*note load:: ) with
+ arguments.
+
+ 15. More flexible `range` commands with `reverse` and `writeback` keywords.
+
+ 16. `set encoding` (*note encoding:: ) for multi-lingual encoding.
+
+ 17. New `x11` (*note x11:: ) driver with persistent and multiple windows.
+
+ 18. New plotting styles: `xerrorbars` (*note xerrorbars:: ),  `histeps`
+ (*note histeps:: ),  `financebars` (*note financebars:: ) and more. See `set
+ style` (*note style:: ).
+
+ 19. New tic label formats, including `"%l %L"` which uses the mantissa and
+ exponents to a given base for labels.  See `set format` (*note format:: ).
+
+ 20. New drivers, including `cgm` (*note cgm:: ) for inclusion into MS-Office
+ applications and `gif` for serving plots to the WEB.
+
+ 21. Smoothing and spline-fitting options for `plot`.  See `plot smooth`
+ (*note smooth:: ).
+
+ 22. `set margin` (*note margin:: ) and  `set origin` (*note origin:: ) give
+ much better control over where a graph appears on the page.
+
+ 23. `set border` (*note border:: ) now controls each border individually.
+
+ 24. The new commands `if` (*note if:: ) and  `reread` (*note reread:: ) allow
+ command loops.
+
+ 25. Point styles and sizes, line types and widths can be specified on the
+ `plot` command.  Line types and widths can also be specified for grids,
+ borders, tics and arrows.  See `plot with` (*note with:: ).  Furthermore these
+ types may be combined and stored for further use.  See `set linestyle`
+ (*note linestyle:: ).
+
+ 26. Text (labels, tic labels, and the time stamp) can be written vertically
+ by those terminals capable of doing so.
+
+
+File: gnuplot.info, Node: Batch/Interactive Operation, Prev: What's New in 
version 3.7, Up: gnuplot, Next: Command-line-editing
+
+ `gnuplot` (*note gnuplot:: ) may be executed in either batch or interactive
+ modes, and the two may even be mixed together on many systems.
+
+ Any command-line arguments are assumed to be names of files containing
+ `gnuplot` commands (with the exception of standard X11 arguments, which are
+ processed first).  Each file is loaded with the `load` (*note load:: )
+ command, in the order specified.  `gnuplot` exits after the last file is
+ processed.  When no load files are named, `gnuplot` enters into an interactive
+ mode.  The special filename "-" is used to denote standard input.
+
+ Both the `exit` (*note exit:: ) and  `quit` (*note quit:: ) commands terminate
+ the current command file and `load` the next one, until all have been
+ processed.
+
+ Examples:
+
+ To launch an interactive session:
+       gnuplot
+
+ To launch a batch session using two command files "input1" and "input2":
+       gnuplot input1 input2
+
+ To launch an interactive session after an initialization file "header" and
+ followed by another command file "trailer":
+       gnuplot header - trailer
+
+
+File: gnuplot.info, Node: Command-line-editing, Prev: Batch/Interactive 
Operation, Up: gnuplot, Next: Comments
+
+ Command-line editing is supported by the Unix, Atari, VMS, MS-DOS and OS/2
+ versions of `gnuplot` (*note gnuplot:: ).  Also, a history mechanism allows
+ previous commands to be edited and re-executed.  After the command line has
+ been edited, a newline or carriage return will enter the entire line without
+ regard to where the cursor is positioned.
+
+ (The readline function in `gnuplot` is not the same as the readline used in
+ GNU Bash and GNU Emacs.  If the GNU version is desired, it may be selected
+ instead of the `gnuplot` version at compile time.)
+
+
+ The editing commands are as follows:
+
+       `Line-editing`:
+
+       ^B    moves back a single character.
+       ^F    moves forward a single character.
+       ^A    moves to the beginning of the line.
+       ^E    moves to the end of the line.
+       ^H    and DEL delete the previous character.
+       ^D    deletes the current character.
+       ^K    deletes from current position to the end of line.
+       ^L,^R redraws line in case it gets trashed.
+       ^U    deletes the entire line.
+       ^W    deletes the last word.
+
+       `History`:
+
+       ^P    moves back through history.
+       ^N    moves forward through history.
+
+ On the IBM PC, the use of a TSR program such as DOSEDIT or CED may be desired
+ for line editing.  The default makefile assumes that this is the case;  by
+ default `gnuplot` will be compiled with no line-editing capability.  If you
+ want to use `gnuplot`'s line editing, set READLINE in the makefile and add
+ readline.obj to the link file.  The following arrow keys may be used on the
+ IBM PC and Atari versions if readline is used:
+
+       Left  Arrow      - same as ^B.
+       Right Arrow      - same as ^F.
+       Ctrl Left  Arrow - same as ^A.
+       Ctrl Right Arrow - same as ^E.
+       Up    Arrow      - same as ^P.
+       Down  Arrow      - same as ^N.
+
+ The Atari version of readline defines some additional key aliases:
+
+       Undo            - same as ^L.
+       Home            - same as ^A.
+       Ctrl Home       - same as ^E.
+       Esc             - same as ^U.
+       Help            - `help` (*note help:: ) plus return.       Ctrl Help
+       - `help `.
+
+
+
+File: gnuplot.info, Node: Comments, Prev: Command-line-editing, Up: gnuplot, 
Next: Coordinates
+
+ Comments are supported as follows: a `#` may appear in most places in a line
+ and `gnuplot` (*note gnuplot:: ) will ignore the rest of the line.  It will
+ not have this effect inside quotes, inside numbers (including complex
+ numbers), inside command substitutions, etc.  In short, it works anywhere it
+ makes sense to work.
+
+
+
+File: gnuplot.info, Node: Coordinates, Prev: Comments, Up: gnuplot, Next: 
Environment
+
+ The commands `set arrow` (*note arrow:: ),  `set key` (*note key:: ), and
+  `set label` (*note label:: ) allow you to draw something at an arbitrary
+ position on the graph.  This position is specified by the syntax:
+
+       {<system>} <x>, {<system>} <y> {,{<system>} <z>}
+
+ Each <system> can either be `first`, `second`, `graph` or `screen`.
+
+ `first` places the x, y, or z coordinate in the system defined by the left
+ and bottom axes; `second` places it in the system defined by the second axes
+ (top and right); `graph` specifies the area within the axes---0,0 is bottom
+ left and 1,1 is top right (for splot, 0,0,0 is bottom left of plotting area;
+ use negative z to get to the base---see `set ticslevel` (*note ticslevel:: ));
+ and screen specifies the screen area (the entire area---not just the portion
+ selected by `set size` (*note size:: )), with 0,0 at bottom left and 1,1 at
+ top right.
+
+ If the coordinate system for x is not specified, `first` is used.  If the
+ system for y is not specified, the one used for x is adopted.
+
+ If one (or more) axis is timeseries, the appropriate coordinate should
+ be given as a quoted time string according to the `timefmt` (*note timefmt:: )
+ format string. See `set xdata` (*note xdata:: ) and set timefmt.  .  `gnuplot`
+ (*note gnuplot:: ) will also accept an integer expression, which will be
+ interpreted as seconds from 1 January 2000.
+
+
+
+File: gnuplot.info, Node: Environment, Prev: Coordinates, Up: gnuplot, Next: 
Expressions
+
+ A number of shell environment variables are understood by `gnuplot`
+ (*note gnuplot:: ).  None of these are required, but may be useful.
+
+ If GNUTERM is defined, it is used as the name of the terminal type to be
+ used.  This overrides any terminal type sensed by `gnuplot` on start-up, but
+ is itself overridden by the .gnuplot (or equivalent) start-up file (see
+ `start-up`) and, of course, by later explicit changes.
+
+ On Unix, AmigaOS, AtariTOS, MS-DOS and OS/2, GNUHELP may be defined to be the
+ pathname of the HELP file (gnuplot.gih).
+
+ On VMS, the logical name GNUPLOT$HELP should be defined as the name of the
+ help library for `gnuplot`.  The `gnuplot` help can be put inside any system
+ help library, allowing access to help from both within and outside `gnuplot`
+ if desired.
+
+ On Unix, HOME is used as the name of a directory to search for a .gnuplot
+ file if none is found in the current directory.  On AmigaOS, AtariTOS,
+ MS-DOS and OS/2, gnuplot is used.  On VMS, SYS$LOGIN: is used. See `help
+ (*note help:: ) start-up`.
+
+ On Unix, PAGER is used as an output filter for help messages.
+
+ On Unix, AtariTOS and AmigaOS, SHELL is used for the `shell` (*note shell:: )
+ command.  On MS-DOS and OS/2, COMSPEC is used for the `shell` command.
+
+ On MS-DOS, if the BGI or Watcom interface is used, PCTRM is used to tell
+ the maximum resolution supported by your monitor by setting it to
+ S<max. horizontal resolution>. E.g. if your monitor's maximum resolution is
+ 800x600, then use:
+       set PCTRM=S800
+ If PCTRM is not set, standard VGA is used.
+
+ FIT_SCRIPT may be used to specify a `gnuplot` command to be executed when a
+ fit is interrupted---see `fit` (*note fit:: ).  FIT_LOG specifies the filename
+ of the logfile maintained by fit.
+
+
+
+File: gnuplot.info, Node: Expressions, Prev: Environment, Up: gnuplot, Next: 
Functions
+
+ In general, any mathematical expression accepted by C, FORTRAN, Pascal, or
+ BASIC is valid.  The precedence of these operators is determined by the
+ specifications of the C programming language.  White space (spaces and tabs)
+ is ignored inside expressions.
+
+ Complex constants are expressed as {<real>,<imag>}, where <real> and <imag>
+ must be numerical constants.  For example, {3,2} represents 3 + 2i; {0,1}
+ represents 'i' itself.  The curly braces are explicitly required here.
+
+ Note that gnuplot uses both "real" and "integer" arithmetic, like FORTRAN and
+ C.  Integers are entered as "1", "-10", etc; reals as "1.0", "-10.0", "1e1",
+ 3.5e-1, etc.  The most important difference between the two forms is in
+ division: division of integers truncates: 5/2 = 2; division of reals does
+ not: 5.0/2.0 = 2.5.  In mixed expressions, integers are "promoted" to reals
+ before evaluation: 5/2e0 = 2.5.  The result of division of a negative integer
+ by a positive one may vary among compilers.  Try a test like "print -5/2" to
+ determine if your system chooses -2 or -3 as the answer.
+
+ The integer expression "1/0" may be used to generate an "undefined" flag,
+ which causes a point to ignored; the `ternary` (*note Ternary:: ) operator
+ gives an example.
+
+ The real and imaginary parts of complex expressions are always real, whatever
+ the form in which they are entered: in {3,2} the "3" and "2" are reals, not
+ integers.
+
+* Menu:
+
+* Functions::
+* Operators::
+* User-defined::
+
+
+File: gnuplot.info, Node: Functions, Prev: Expressions, Up: Expressions, Next: 
abs
+
+ The functions in `gnuplot` (*note gnuplot:: ) are the same as the
+ corresponding functions in the Unix math library, except that all functions
+ accept integer, real, and complex arguments, unless otherwise noted.
+
+ For those functions that accept or return angles that may be given in either
+ degrees or radians (sin(x), cos(x), tan(x), asin(x), acos(x), atan(x),
+ atan2(x) and arg(z)), the unit may be selected by `set angles`
+ (*note angles:: ), which defaults to radians.
+
+
+* Menu:
+
+* abs::
+* acos::
+* acosh::
+* arg::
+* asin::
+* asinh::
+* atan::
+* atan2::
+* atanh::
+* besj0::
+* besj1::
+* besy0::
+* besy1::
+* ceil::
+* cos::
+* cosh::
+* erf::
+* erfc::
+* exp::
+* floor::
+* gamma::
+* ibeta::
+* inverf::
+* igamma::
+* imag::
+* invnorm::
+* int::
+* lgamma::
+* log::
+* log10::
+* norm::
+* rand::
+* real::
+* sgn::
+* sin::
+* sinh::
+* sqrt::
+* tan::
+* tanh::
+* column::
+* tm_hour::
+* tm_mday::
+* tm_min::
+* tm_mon::
+* tm_sec::
+* tm_wday::
+* tm_yday::
+* tm_year::
+* valid::
+
+
+File: gnuplot.info, Node: abs, Prev: Functions, Up: Functions, Next: acos
+
+ The `abs` function returns the absolute value of its argument.  The returned
+ value is of the same type as the argument.
+
+ For complex arguments, abs(x) is defined as the length of x in the complex
+ plane [i.e.,  sqrt(real(x)**2 + imag(x)**2) ].
+
+
+File: gnuplot.info, Node: acos, Prev: abs, Up: Functions, Next: acosh
+
+ The `acos` function returns the arc cosine (inverse cosine) of its argument.
+ `acos` returns its argument in radians or degrees, as selected by `set
+ angles`.
+
+
+File: gnuplot.info, Node: acosh, Prev: acos, Up: Functions, Next: arg
+
+ The `acosh` function returns the inverse hyperbolic cosine of its argument in
+ radians.
+
+
+File: gnuplot.info, Node: arg, Prev: acosh, Up: Functions, Next: asin
+
+ The `arg` function returns the phase of a complex number in radians or
+ degrees, as selected by `set angles` (*note angles:: ).
+
+
+
+File: gnuplot.info, Node: asin, Prev: arg, Up: Functions, Next: asinh
+
+ The `asin` function returns the arc sin (inverse sin) of its argument.
+ `asin` returns its argument in radians or degrees, as selected by `set
+ angles`.
+
+
+File: gnuplot.info, Node: asinh, Prev: asin, Up: Functions, Next: atan
+
+ The `asinh` function returns the inverse hyperbolic sin of its argument in
+ radians.
+
+
+File: gnuplot.info, Node: atan, Prev: asinh, Up: Functions, Next: atan2
+
+ The `atan` function returns the arc tangent (inverse tangent) of its
+ argument.  `atan` returns its argument in radians or degrees, as selected by
+ `set angles` (*note angles:: ).
+
+
+
+File: gnuplot.info, Node: atan2, Prev: atan, Up: Functions, Next: atanh
+
+ The `atan2` function returns the arc tangent (inverse tangent) of the ratio
+ of the real parts of its arguments.  `atan2` returns its argument in radians
+ or degrees, as selected by `set angles` (*note angles:: ), in the correct
+ quadrant.
+
+
+
+File: gnuplot.info, Node: atanh, Prev: atan2, Up: Functions, Next: besj0
+
+ The `atanh` function returns the inverse hyperbolic tangent of its argument
+ in radians.
+
+
+File: gnuplot.info, Node: besj0, Prev: atanh, Up: Functions, Next: besj1
+
+ The `besj0` function returns the j0th Bessel function of its argument.
+ `besj0` expects its argument to be in radians.
+
+
+File: gnuplot.info, Node: besj1, Prev: besj0, Up: Functions, Next: besy0
+
+ The `besj1` function returns the j1st Bessel function of its argument.
+ `besj1` expects its argument to be in radians.
+
+
+File: gnuplot.info, Node: besy0, Prev: besj1, Up: Functions, Next: besy1
+
+ The `besy0` function returns the y0th Bessel function of its argument.
+ `besy0` expects its argument to be in radians.
+
+
+File: gnuplot.info, Node: besy1, Prev: besy0, Up: Functions, Next: ceil
+
+ The `besy1` function returns the y1st Bessel function of its argument.
+ `besy1` expects its argument to be in radians.
+
+
+File: gnuplot.info, Node: ceil, Prev: besy1, Up: Functions, Next: cos
+
+ The `ceil` function returns the smallest integer that is not less than its
+ argument.  For complex numbers, `ceil` returns the smallest integer not less
+ than the real part of its argument.
+
+
+File: gnuplot.info, Node: cos, Prev: ceil, Up: Functions, Next: cosh
+
+ The `cos` function returns the cosine of its argument.  `cos` accepts its
+ argument in radians or degrees, as selected by `set angles`
+ (*note angles:: ).
+
+
+
+File: gnuplot.info, Node: cosh, Prev: cos, Up: Functions, Next: erf
+
+ The `cosh` function returns the hyperbolic cosine of its argument.  `cosh`
+ expects its argument to be in radians.
+
+
+File: gnuplot.info, Node: erf, Prev: cosh, Up: Functions, Next: erfc
+
+ The `erf` function returns the error function of the real part of its
+ argument.  If the argument is a complex value, the imaginary component is
+ ignored.
+
+
+File: gnuplot.info, Node: erfc, Prev: erf, Up: Functions, Next: exp
+
+ The `erfc` function returns 1.0 - the error function of the real part of its
+ argument.  If the argument is a complex value, the imaginary component is
+ ignored.
+
+
+File: gnuplot.info, Node: exp, Prev: erfc, Up: Functions, Next: floor
+
+ The `exp` function returns the exponential function of its argument (`e`
+ raised to the power of its argument).  On some implementations (notably
+ suns), exp(-x) returns undefined for very large x.  A user-defined function
+ like safe(x) = x<-100 ? 0 : exp(x) might prove useful in these cases.
+
+
+File: gnuplot.info, Node: floor, Prev: exp, Up: Functions, Next: gamma
+
+ The `floor` function returns the largest integer not greater than its
+ argument.  For complex numbers, `floor` returns the largest integer not
+ greater than the real part of its argument.
+
+
+File: gnuplot.info, Node: gamma, Prev: floor, Up: Functions, Next: ibeta
+
+ The `gamma` function returns the gamma function of the real part of its
+ argument.  For integer n, gamma(n+1) = n!.  If the argument is a complex
+ value, the imaginary component is ignored.
+
+
+File: gnuplot.info, Node: ibeta, Prev: gamma, Up: Functions, Next: inverf
+
+ The `ibeta` function returns the incomplete beta function of the real parts
+ of its arguments. p, q > 0 and x in [0:1].  If the arguments are complex,
+ the imaginary components are ignored.
+
+
+File: gnuplot.info, Node: inverf, Prev: ibeta, Up: Functions, Next: igamma
+
+ The `inverf` function returns the inverse error function of the real part
+ of its argument.
+
+
+File: gnuplot.info, Node: igamma, Prev: inverf, Up: Functions, Next: imag
+
+ The `igamma` function returns the incomplete gamma function of the real
+ parts of its arguments.  a > 0 and x >= 0.  If the arguments are complex,
+ the imaginary components are ignored.
+
+
+File: gnuplot.info, Node: imag, Prev: igamma, Up: Functions, Next: invnorm
+
+ The `imag` function returns the imaginary part of its argument as a real
+ number.
+
+
+File: gnuplot.info, Node: invnorm, Prev: imag, Up: Functions, Next: int
+
+ The `invnorm` function returns the inverse normal distribution function of
+ the real part of its argument.
+
+
+File: gnuplot.info, Node: int, Prev: invnorm, Up: Functions, Next: lgamma
+
+ The `int` function returns the integer part of its argument, truncated
+ toward zero.
+
+
+File: gnuplot.info, Node: lgamma, Prev: int, Up: Functions, Next: log
+
+ The `lgamma` function returns the natural logarithm of the gamma function
+ of the real part of its argument.  If the argument is a complex value, the
+ imaginary component is ignored.
+
+
+File: gnuplot.info, Node: log, Prev: lgamma, Up: Functions, Next: log10
+
+ The `log` function returns the natural logarithm (base `e`) of its argument.
+
+
+File: gnuplot.info, Node: log10, Prev: log, Up: Functions, Next: norm
+
+ The `log10` function returns the logarithm (base 10) of its argument.
+
+
+File: gnuplot.info, Node: norm, Prev: log10, Up: Functions, Next: rand
+
+ The `norm` function returns the normal distribution function (or Gaussian)
+ of the real part of its argument.
+
+
+File: gnuplot.info, Node: rand, Prev: norm, Up: Functions, Next: real
+
+ The `rand` function returns a pseudo random number in the interval [0:1]
+ using the real part of its argument as a seed.  If seed < 0, the sequence
+ is (re)initialized.  If the argument is a complex value, the imaginary
+ component is ignored.
+
+
+File: gnuplot.info, Node: real, Prev: rand, Up: Functions, Next: sgn
+
+ The `real` function returns the real part of its argument.
+
+
+File: gnuplot.info, Node: sgn, Prev: real, Up: Functions, Next: sin
+
+ The `sgn` function returns 1 if its argument is positive, -1 if its argument
+ is negative, and 0 if its argument is 0.  If the argument is a complex value,
+ the imaginary component is ignored.
+
+
+File: gnuplot.info, Node: sin, Prev: sgn, Up: Functions, Next: sinh
+
+ The `sin` function returns the sine of its argument.  `sin` expects its
+ argument to be in radians or degrees, as selected by `set angles`
+ (*note angles:: ).
+
+
+
+File: gnuplot.info, Node: sinh, Prev: sin, Up: Functions, Next: sqrt
+
+ The `sinh` function returns the hyperbolic sine of its argument.  `sinh`
+ expects its argument to be in radians.
+
+
+File: gnuplot.info, Node: sqrt, Prev: sinh, Up: Functions, Next: tan
+
+ The `sqrt` function returns the square root of its argument.
+
+
+File: gnuplot.info, Node: tan, Prev: sqrt, Up: Functions, Next: tanh
+
+ The `tan` function returns the tangent of its argument.  `tan` expects
+ its argument to be in radians or degrees, as selected by `set angles`
+ (*note angles:: ).
+
+
+
+File: gnuplot.info, Node: tanh, Prev: tan, Up: Functions, Next: column
+
+ The `tanh` function returns the hyperbolic tangent of its argument.  `tanh`
+ expects its argument to be in radians.
+
+ A few additional functions are also available.
+
+
+
+File: gnuplot.info, Node: column, Prev: tanh, Up: Functions, Next: tm_hour
+
+ `column(x)` may be used only in expressions as part of `using`
+ (*note using:: ) manipulations to fits or datafile plots.  See `plot datafile
+ using`.
+
+
+
+File: gnuplot.info, Node: tm_hour, Prev: column, Up: Functions, Next: tm_mday
+
+ The `tm_hour` function interprets its argument as a time, in seconds from
+ 1 Jan 2000.  It returns the hour (an integer in the range 0--23) as a real.
+
+
+File: gnuplot.info, Node: tm_mday, Prev: tm_hour, Up: Functions, Next: tm_min
+
+ The `tm_mday` function interprets its argument as a time, in seconds from
+ 1 Jan 2000.  It returns the day of the month (an integer in the range 1--31)
+ as a real.
+
+
+File: gnuplot.info, Node: tm_min, Prev: tm_mday, Up: Functions, Next: tm_mon
+
+ The `tm_min` function interprets its argument as a time, in seconds from
+ 1 Jan 2000.  It returns the minute (an integer in the range 0--59) as a real.
+
+
+File: gnuplot.info, Node: tm_mon, Prev: tm_min, Up: Functions, Next: tm_sec
+
+ The `tm_mon` function interprets its argument as a time, in seconds from
+ 1 Jan 2000.  It returns the month (an integer in the range 1--12) as a real.
+
+
+File: gnuplot.info, Node: tm_sec, Prev: tm_mon, Up: Functions, Next: tm_wday
+
+ The `tm_sec` function interprets its argument as a time, in seconds from
+ 1 Jan 2000.  It returns the second (an integer in the range 0--59) as a real.
+
+
+File: gnuplot.info, Node: tm_wday, Prev: tm_sec, Up: Functions, Next: tm_yday
+
+ The `tm_wday` function interprets its argument as a time, in seconds from
+ 1 Jan 2000.  It returns the day of the week (an integer in the range 1--7) as
+ a real.
+
+
+File: gnuplot.info, Node: tm_yday, Prev: tm_wday, Up: Functions, Next: tm_year
+
+ The `tm_yday` function interprets its argument as a time, in seconds from
+ 1 Jan 2000.  It returns the day of the year (an integer in the range 1--366)
+ as a real.
+
+
+File: gnuplot.info, Node: tm_year, Prev: tm_yday, Up: Functions, Next: valid
+
+ The `tm_year` function interprets its argument as a time, in seconds from
+ 1 Jan 2000.  It returns the year (an integer) as a real.
+
+
+File: gnuplot.info, Node: valid, Prev: tm_year, Up: Functions
+
+ `valid(x)` may be used only in expressions as part of `using` (*note using:: )
+ manipulations to fits or datafile plots.  See `plot datafile using`.
+
+
+
+File: gnuplot.info, Node: Operators, Prev: Functions, Up: Expressions, Next: 
Unary
+
+ The operators in `gnuplot` (*note gnuplot:: ) are the same as the
+ corresponding operators in the C programming language, except that all
+ operators accept integer, real, and complex arguments, unless otherwise
+ noted.  The ** operator (exponentiation) is supported, as in FORTRAN.
+
+ Parentheses may be used to change order of evaluation.
+
+* Menu:
+
+* Unary::
+* Binary::
+* Ternary::
+
+
+File: gnuplot.info, Node: Unary, Prev: Operators, Up: Operators, Next: Binary
+
+ The following is a list of all the unary operators and their usages:
+
+     Symbol      Example    Explanation
+       -           -a          unary minus
+       +           +a          unary plus (no-operation)
+       ~           ~a        * one's complement
+       !           !a        * logical negation
+       !           a!        * factorial
+       $           $3        * call arg/column during `using` (*note using:: )
+ manipulation (*) Starred explanations indicate that the operator requires an
+ integer argument.
+
+ Operator precedence is the same as in Fortran and C.  As in those languages,
+ parentheses may be used to change the order of operation.  Thus -2**2 = -4,
+ but (-2)**2 = 4.
+
+ The factorial operator returns a real number to allow a greater range.
+
+
+File: gnuplot.info, Node: Binary, Prev: Unary, Up: Operators, Next: Ternary
+
+ The following is a list of all the binary operators and their usages:
+
+     Symbol       Example      Explanation
+       **          a**b          exponentiation
+       *           a*b           multiplication
+       /           a/b           division
+       %           a%b         * modulo
+       +           a+b           addition
+       -           a-b           subtraction
+       ==          a==b          equality
+       !=          a!=b          inequality
+       <           a<b           less than
+       <=          a<=b          less than or equal to
+       >           a>b           greater than
+       >=          a>=b          greater than or equal to
+       &           a&b         * bitwise AND
+       ^           a^b         * bitwise exclusive OR
+       |           a|b         * bitwise inclusive OR
+       &&          a&&b        * logical AND
+       ||          a||b        * logical OR
+
+ (*) Starred explanations indicate that the operator requires integer
+ arguments.
+
+ Logical AND (&&) and OR (||) short-circuit the way they do in C.  That is,
+ the second `&&` operand is not evaluated if the first is false; the second
+ `||` operand is not evaluated if the first is true.
+
+
+File: gnuplot.info, Node: Ternary, Prev: Binary, Up: Operators
+
+ There is a single ternary operator:
+
+     Symbol       Example      Explanation
+       ?:          a?b:c     ternary operation
+
+ The ternary operator behaves as it does in C.  The first argument (a), which
+ must be an integer, is evaluated.  If it is true (non-zero), the second
+ argument (b) is evaluated and returned; otherwise the third argument (c) is
+ evaluated and returned.
+
+ The ternary operator is very useful both in constructing piecewise functions
+ and in plotting points only when certain conditions are met.
+
+ Examples:
+
+ Plot a function that is to equal sin(x) for 0 <= x < 1, 1/x for 1 <= x < 2,
+ and undefined elsewhere:
+       f(x) = 0<=x && x<1 ? sin(x) : 1<=x && x<2 ? 1/x : 1/0
+       plot f(x)
+ Note that `gnuplot` (*note gnuplot:: ) quietly ignores undefined values, so
+ the final branch of the function (1/0) will produce no plottable points.  Note
+ also that f(x) will be plotted as a continuous function across the
+ discontinuity if a line style is used.  To plot it discontinuously, create
+ separate functions for the two pieces.  (Parametric functions are also useful
+ for this purpose.)
+
+ For data in a file, plot the average of the data in columns 2 and 3 against
+ the datum in column 1, but only if the datum in column 4 is non-negative:
+
+       plot 'file' using 1:( $4<0 ? 1/0 : ($2+$3)/2 )
+
+ Please see `plot data-file using` (*note using:: ) for an explanation of the
+ using syntax.
+
+
+
+File: gnuplot.info, Node: User-defined, Prev: Operators, Up: Expressions
+
+ New user-defined variables and functions of one through five variables may
+ be declared and used anywhere, including on the `plot` (*note plot:: ) command
+ itself.
+
+ User-defined function syntax:
+       <func-name>( <dummy1> {,<dummy2>} ... {,<dummy5>} ) = <expression>
+
+ where <expression> is defined in terms of <dummy1> through <dummy5>.
+
+ User-defined variable syntax:
+       <variable-name> = <constant-expression>
+
+ Examples:
+       w = 2
+       q = floor(tan(pi/2 - 0.1))
+       f(x) = sin(w*x)
+       sinc(x) = sin(pi*x)/(pi*x)
+       delta(t) = (t == 0)
+       ramp(t) = (t > 0) ? t : 0
+       min(a,b) = (a < b) ? a : b
+       comb(n,k) = n!/(k!*(n-k)!)
+       len3d(x,y,z) = sqrt(x*x+y*y+z*z)
+       plot f(x) = sin(x*a), a = 0.2, f(x), a = 0.4, f(x)
+
+ Note that the variable `pi` is already defined.  But it is in no way magic;
+ you may redefine it to be whatever you like.
+
+ Valid names are the same as in most programming languages: they must begin
+ with a letter, but subsequent characters may be letters, digits, "$", or "_".
+ Note, however, that the `fit` (*note fit:: ) mechanism uses several variables
+ with names that begin "FIT_".  It is safest to avoid using such
+ names.  "FIT_LIMIT", however, is one that you may wish to redefine. See the
+ documentation on `fit` for details.
+
+
+ See `show functions` (*note functions:: ),  `show variables`
+ (*note variables:: ), and fit.
+
+
+
+File: gnuplot.info, Node: Glossary, Prev: Expressions, Up: gnuplot, Next: 
Plotting
+
+ Throughout this document an attempt has been made to maintain consistency of
+ nomenclature.  This cannot be wholly successful because as `gnuplot`
+ (*note gnuplot:: ) has evolved over time, certain command and keyword names
+ have been adopted that preclude such perfection.  This section contains
+ explanations of the way some of these terms are used.
+
+ A "page" or "screen" is the entire area addressable by `gnuplot`.  On a
+ monitor, it is the full screen; on a plotter, it is a single sheet of paper.
+
+ A screen may contain one or more "plots".  A plot is defined by an abscissa
+ and an ordinate, although these need not actually appear on it, as well as
+ the margins and any text written therein.
+
+ A plot contains one "graph".  A graph is defined by an abscissa and an
+ ordinate, although these need not actually appear on it.
+
+ A graph may contain one or more "lines".  A line is a single function or
+ data set.  "Line" is also a plotting style.  The word will also be used in
+ sense "a line of text".  Presumably the context will remove any ambiguity.
+
+ The lines on a graph may have individual names.  These may be listed
+ together with a sample of the plotting style used to represent them in
+ the "key", sometimes also called the "legend".
+
+ The word "title" occurs with multiple meanings in `gnuplot`.  In this
+ document, it will always be preceded by the adjective "plot", "line", or
+ "key" to differentiate among them.
+
+ A graph may have up to four labelled axes.  Various commands have the name of
+ an axis built into their names, such as `set xlabel` (*note xlabel:: ).  Other
+ commands have one or more axis names as options, such as `set logscale
+ xy`.  The names of the four axes for these usages are "x" for the axis along
+ the bottom border of the plot, "y" for the left border, "x2" for the top
+ border, and "y2" for the right border.  "z" also occurs in commands used with
+ 3-d plotting.
+
+ When discussing data files, the term "record" will be resurrected and used
+ to denote a single line of text in the file, that is, the characters between
+ newline or end-of-record characters.  A "point" is the datum extracted from
+ a single record.  A "datablock" is a set of points from consecutive records,
+ delimited by blank records.  A line, when referred to in the context of a
+ data file, is a subset of a datablock.
+
+
+File: gnuplot.info, Node: Plotting, Prev: Glossary, Up: gnuplot, Next: Start-up
+
+ There are three `gnuplot` (*note gnuplot:: ) commands which actually create a
+ plot:  `plot` (*note plot:: ), `splot` (*note splot:: ) and  `replot`
+ (*note replot:: ).  plot generates 2-d plots, splot generates 3-d plots
+ (actually 2-d projections, of course), and `replot` appends its arguments to
+ the previous `plot` or `splot` and executes the modified command.
+
+ Much of the general information about plotting can be found in the discussion
+ of `plot`; information specific to 3-d can be found in the `splot` section.
+
+ `plot` operates in either rectangular or polar coordinates -- see `set polar`
+ (*note polar:: ) for details of the latter.  `splot` operates only in
+ rectangular coordinates, but the `set mapping` (*note mapping:: ) command
+ allows for a few other coordinate systems to be treated.  In addition, the
+ `using` (*note using:: ) option allows both plot and splot to treat almost any
+ coordinate system you'd care to define.
+
+ `splot` can plot surfaces and contours in addition to points and/or lines.
+ In addition to `splot`, see `set isosamples` (*note isosamples:: ) for
+ information about defining the grid for a 3-d function;  `splot datafile`
+ (*note data-file:: ) for information about the requisite file structure for
+ 3-d data values; and `set contour` (*note contour:: ) and set cntrparam` for
+ information about contours.
+
+
+
+File: gnuplot.info, Node: Start-up, Prev: Plotting, Up: gnuplot, Next: 
Substitution
+
+ When `gnuplot` (*note gnuplot:: ) is run, it looks for an initialization file
+ to load.  This file is called `.gnuplot` on Unix and AmigaOS systems, and
+ `GNUPLOT.INI` on other systems.  If this file is not found in the current
+ directory, the program will look for it in the home directory (under AmigaOS,
+ Atari(single)TOS, MS-DOS and OS/2, the environment variable `gnuplot` should
+ contain the name of this directory).  Note: if NOCWDRC is defined during the
+ installation, `gnuplot` will not read from the current directory.
+
+ If the initialization file is found, `gnuplot` executes the commands in it.
+ These may be any legal `gnuplot` commands, but typically they are limited to
+ setting the terminal and defining frequently-used functions or variables.
+
+
+File: gnuplot.info, Node: Substitution, Prev: Start-up, Up: gnuplot, Next: 
Syntax
+
+ Command-line substitution is specified by a system command enclosed in
+ backquotes.  This command is spawned and the output it produces replaces
+ the name of the command (and backquotes) on the command line.  Some
+ implementations also support pipes;  see `plot data-file special-filenames`
+ (*note special-filenames:: ).
+
+ Newlines in the output produced by the spawned command are replaced with
+ blanks.
+
+ Command-line substitution can be used anywhere on the `gnuplot`
+ (*note gnuplot:: ) command line.
+
+ Example:
+
+ This will run the program `leastsq` and replace `leastsq` (including
+ backquotes) on the command line with its output:
+       f(x) = `leastsq`
+
+ or, in VMS
+       f(x) = `run leastsq`
+
+
+File: gnuplot.info, Node: Syntax, Prev: Substitution, Up: gnuplot, Next: 
Time/Date data
+
+ The general rules of syntax and punctuation in `gnuplot` (*note gnuplot:: )
+ are that keywords and options are order-dependent.  Options and any
+ accompanying parameters are separated by spaces whereas lists and coordinates
+ are separated by commas. Ranges are separated by colons and enclosed in
+ brackets [], text and file names are enclosed in quotes, and a few
+ miscellaneous things are enclosed in parentheses.  Braces {} are used for a
+ few special purposes.
+
+ Commas are used to separate coordinates on the `set` (*note set-show:: )
+ commands  `arrow` (*note arrow:: ), `key` (*note key:: ), and  `label`
+ (*note label:: ); the list of variables being fitted (the list after the `via`
+ keyword on the `fit` (*note fit:: ) command); lists of discrete contours or
+ the loop parameters which specify them on the `set cntrparam`
+ (*note cntrparam:: ) command; the arguments of the `set` commands `dgrid3d`
+ (*note dgrid3d:: ),  `dummy` (*note dummy:: ),  `isosamples`
+ (*note isosamples:: ),  `offsets` (*note offsets:: ),  `origin`
+ (*note origin:: ), `samples` (*note samples:: ),  `size` (*note size:: ),
+ time, and nd `view` (*note view:: ); lists of tics or the loop parameters
+ which specify them; the offsets for titles and axis labels; parametric
+ functions to be used to calculate the x, y, and z coordinates on the `plot`
+ (*note plot:: ), `replot` (*note replot:: ) and  `splot` (*note splot:: )
+ commands; and the complete sets of keywords specifying individual plots (data
+ sets or functions) on the `plot`, `replot` and `splot` commands.
+
+ Parentheses are used to delimit sets of explicit tics (as opposed to loop
+ parameters) and to indicate computations in the `using` (*note using:: )
+ filter of the fit, `plot`, `replot` and `splot` commands.
+
+ (Parentheses and commas are also used as usual in function notation.)
+
+ Brackets are used to delimit ranges, whether they are given on `set`, `plot`
+ or `splot` commands.
+
+ Colons are used to separate extrema in `range` specifications (whether they
+ are given on `set`, `plot` or `splot` commands) and to separate entries in
+ the `using` filter of the `plot`, `replot`, `splot` and `fit` commands.
+
+ Semicolons are used to separate commands given on a single command line.
+
+ Braces are used in text to be specially processed by some terminals, like
+ `postscript` (*note postscript:: ).  They are also used to denote complex
+ numbers: {3,2} = 3 + 2i.
+
+ Text may be enclosed in single- or double-quotes.  Backslash processing of
+ sequences like \n (newline) and \345 (octal character code) is performed for
+ double-quoted strings, but not for single-quoted strings.
+
+ The justification is the same for each line of a multi-line string.  Thus the
+ center-justified string
+       "This is the first line of text.\nThis is the second line."
+ will produce
+                        This is the first line of text.
+                           This is the second line.
+ but
+       'This is the first line of text.\nThis is the second line.'
+ will produce
+           This is the first line of text.\nThis is the second line.
+
+ Filenames may be entered with either single- or double-quotes.  In this
+ manual the command examples generally single-quote filenames and double-quote
+ other string tokens for clarity.
+
+ At present you should not embed \n inside {} when using the enhanced option
+ of the postscript terminal.
+
+ The EEPIC, Imagen, Uniplex, LaTeX, and TPIC drivers allow a newline to be
+ specified by \\ in a single-quoted string or \\\\ in a double-quoted string.
+
+ Back-quotes are used to enclose system commands for substitution.
+
+
+File: gnuplot.info, Node: Time/Date data, Prev: Syntax, Up: gnuplot
+
+ `gnuplot` (*note gnuplot:: ) supports the use of time and/or date information
+ as input data. This feature is activated by the commands `set xdata time`,
+ `set ydata time`, etc.
+
+ Internally all times and dates are converted to the number of seconds from
+ the year 2000.  The command `set timefmt` (*note timefmt:: ) defines the
+ format for all inputs: data files, ranges, tics, label positions---in short,
+ anything that accepts a data value must receive it in this format.  Since only
+ one input format can be in force at a given time, all time/date quantities
+ being input at the same time must be presented in the same format.  Thus if
+ both x and y data in a file are time/date, they must be in the same format.
+
+ The conversion to and from seconds assumes Universal Time (which is the same
+ as Greenwich Standard Time).  There is no provision for changing the time
+ zone or for daylight savings.  If all your data refer to the same time zone
+ (and are all either daylight or standard) you don't need to worry about these
+ things.  But if the absolute time is crucial for your application, you'll
+ need to convert to UT yourself.
+
+ Commands like `show xrange` (*note xrange:: ) will re-interpret the integer
+ according to `timefmt`.  If you change `timefmt`, and then `show`
+ (*note set-show:: ) the quantity again, it will be displayed in the new
+ `timefmt`.  For that matter, if you give the deactivation command (like `set
+ xdata` (*note xdata:: )), the quantity will be shown in its numerical form.
+
+ The command `set format` (*note format:: ) defines the format that will be
+ used for tic labels, whether or not the specified axis is time/date.
+
+ If time/date information is to be plotted from a file, the `using`
+ (*note using:: ) option _must_ be used on the `plot` (*note plot:: ) or
+  `splot` (*note splot:: ) command.  These commands simply use white space to
+ separate columns, but white space may be embedded within the time/date
+ string.  If you use tabs as a separator, some trial-and-error may be necessary
+ to discover how your system treats them.
+
+ The following example demonstrates time/date plotting.
+
+ Suppose the file "data" contains records like
+
+       03/21/95 10:00  6.02e23
+
+ This file can be plotted by
+
+       set xdata time
+       set timefmt "%m/%d/%y"
+       set xrange ["03/21/95":"03/22/95"]
+       set format x "%m/%d"
+       set timefmt "%m/%d/%y %H:%M"
+       plot "data" using 1:3
+
+ which will produce xtic labels that look like "03/21".
+
+ See the descriptions of each command for more details.
+
+
+File: gnuplot.info, Node: Commands, Prev: gnuplot, Up: Top, Next: cd
+
+ This section lists the commands acceptable to `gnuplot` (*note gnuplot:: ) in
+ alphabetical order.  Printed versions of this document contain all commands;
+ on-line versions may not be complete.  Indeed, on some systems there may be
+ no commands at all listed under this heading.
+
+ Note that in most cases unambiguous abbreviations for command names and their
+ options are permissible, i.e., "`p f(x) w l`" instead of "`plot f(x) with
+ lines`".
+
+ In the syntax descriptions, braces ({}) denote optional arguments and a
+ vertical bar (|) separates mutually exclusive choices.
+
+* Menu:
+
+* cd::
+* call::
+* clear::
+* exit::
+* fit::
+* help::
+* if::
+* load::
+* pause::
+* plot::
+* print::
+* pwd::
+* quit::
+* replot::
+* reread::
+* reset::
+* save::
+* set-show::
+* shell::
+* splot::
+* test::
+* update::
+
+
+File: gnuplot.info, Node: cd, Prev: Commands, Up: Commands, Next: call
+
+ The `cd` command changes the working directory.
+
+ Syntax:
+       cd '<directory-name>'
+
+ The directory name must be enclosed in quotes.
+
+ Examples:
+       cd 'subdir'
+       cd ".."
+
+ DOS users _must_ use single-quotes---backslash [\] has special significance
+ inside double-quotes.  For example,
+       cd "c:\newdata"
+ fails, but
+       cd 'c:\newdata'
+ works as expected.
+
+
+File: gnuplot.info, Node: call, Prev: cd, Up: Commands, Next: clear
+
+ The `call` command is identical to the load command with one exception: you
+ can have up to ten additional parameters to the command (delimited according
+ to the standard parser rules) which can be substituted into the lines read
+ from the file.  As each line is read from the `call`ed input file, it is
+ scanned for the sequence `$` (dollar-sign) followed by a digit (0--9).  If
+ found, the sequence is replaced by the corresponding parameter from the
+ `call` command line.  If the parameter was specified as a string in the
+ `call` line, it is substituted without its enclosing quotes.  `$` followed by
+ any character other than a digit will be that character.  E.g. use `$$` to
+ get a single `$`.  Providing more than ten parameters on the `call` command
+ line will cause an error.  A parameter that was not provided substitutes as
+ nothing.  Files being `call`ed may themselves contain `call` or `load`
+ (*note load:: ) commands.
+
+ The `call` command _must_ be the last command on a multi-command line.
+
+ Syntax:
+       call "<input-file>" <parameter-0> <parm-1> ... <parm-9>
+
+ The name of the input file must be enclosed in quotes, and it is recommended
+ that parameters are similarly enclosed in quotes (future versions of gnuplot
+ may treat quoted and unquoted arguments differently).
+
+ Example:
+
+ If the file 'calltest.gp' contains the line:
+       print "p0=$0 p1=$1 p2=$2 p3=$3 p4=$4 p5=$5 p6=$6 p7=x$7x"
+
+ entering the command:
+       call 'calltest.gp' "abcd" 1.2 + "'quoted'" -- "$2"
+
+ will display:
+       p0=abcd p1=1.2 p2=+ p3='quoted' p4=- p5=- p6=$2 p7=xx
+
+ NOTE: there is a clash in syntax with the datafile `using` (*note using:: )
+ callback operator.  Use `$$n` or `column(n)` to access column n from a
+ datafile inside a `call`ed datafile plot.
+
+
+
+File: gnuplot.info, Node: clear, Prev: call, Up: Commands, Next: exit
+
+ The `clear` command erases the current screen or output device as specified
+ by `set output` (*note output:: ).  This usually generates a formfeed on
+ hardcopy devices.  Use `set terminal` (*note terminal:: ) to set the device
+ type.
+
+ For some terminals `clear` erases only the portion of the plotting surface
+ defined by `set size` (*note size:: ), so for these it can be used in
+ conjunction with set multiplot` to create an inset.
+
+ Example:
+       set multiplot
+       plot sin(x)
+       set origin 0.5,0.5
+       set size 0.4,0.4
+       clear
+       plot cos(x)
+       set nomultiplot
+
+ Please see `set multiplot` (*note multiplot:: ), set size, and nd `set origin`
+ (*note origin:: ) for details of these commands.
+
+
+
+File: gnuplot.info, Node: exit, Prev: clear, Up: Commands, Next: fit
+
+ The commands `exit` and `quit` (*note quit:: ) and the END-OF-FILE character
+ will exit the current `gnuplot` (*note gnuplot:: ) command file and  `load`
+ (*note load:: ) the next one.  See "help batch/interactive" for more details.
+
+ Each of these commands will clear the output device (as does the `clear`
+ (*note clear:: ) command) before exiting.
+
+
+
+File: gnuplot.info, Node: fit, Prev: exit, Up: Commands, Next: adjustable 
parameters
+
+ The `fit` command can fit a user-defined function to a set of data points
+ (x,y) or (x,y,z), using an implementation of the nonlinear least-squares
+ (NLLS) Marquardt-Levenberg algorithm.  Any user-defined variable occurring in
+ the function body may serve as a fit parameter, but the return type of the
+ function must be real.
+
+ Syntax:
+       fit {[xrange] {[yrange]}} <function> '<datafile>'
+           {datafile-modifiers}
+           via '<parameter file>' | <var1>{,<var2>,...}
+
+ Ranges may be specified to temporarily limit the data which is to be fitted;
+ any out-of-range data points are ignored. The syntax is
+       [{dummy_variable=}{<min>}{:<max>}],
+ analogous to `plot` (*note plot:: ); see  `plot ranges` (*note ranges:: ).
+
+ <function> is any valid `gnuplot` (*note gnuplot:: ) expression, although it
+ is usual to use a previously user-defined function of the form f(x) or
+ f(x,y).
+
+ <datafile> is treated as in the `plot` command.  All the `plot datafile`
+ (*note data-file:: ) modifiers (`using` (*note using:: ),  `every`
+ (*note every:: ),...) except  `smooth` (*note smooth:: ) are applicable to
+ fit. See `plot datafile`.
+
+ The default data formats for fitting functions with a single independent
+ variable, y=f(x), are {x:}y or x:y:s; those formats can be changed with
+ the datafile `using` qualifier.  The third item, (a column number or an
+ expression), if present, is interpreted as the standard deviation of the
+ corresponding y value and is used to compute a weight for the datum, 1/s**2.
+ Otherwise, all data points are weighted equally, with a weight of one.
+
+ To fit a function with two independent variables, z=f(x,y), the required
+ format is `using` with four items, x:y:z:s.  The complete format must be
+ given---no default columns are assumed for a missing token.  Weights for
+ each data point are evaluated from 's' as above.  If error estimates are
+ not available, a constant value can be specified as a constant expression
+ (see `plot datafile using`), e.g., `using 1:2:3:(1)`.
+
+ Multiple datasets may be simultaneously fit with functions of one
+ independent variable by making y a 'pseudo-variable', e.g., the dataline
+ number, and fitting as two independent variables.  See `fit multibranch`.
+
+ The `via` qualifier specifies which parameters are to be adjusted, either
+ directly, or by referencing a parameter file.
+
+ Examples:
+       f(x) = a*x**2 + b*x + c
+       g(x,y) = a*x**2 + b*y**2 + c*x*y
+       FIT_LIMIT = 1e-6
+       fit f(x) 'measured.dat' via 'start.par'
+       fit f(x) 'measured.dat' using 3:($7-5) via 'start.par'
+       fit f(x) './data/trash.dat' using 1:2:3 via a, b, c
+       fit g(x,y) 'surface.dat' using 1:2:3:(1) via a, b, c
+
+ After each iteration step, detailed information about the current state
+ of the fit is written to the display.  The same information about the
+ initial and final states is written to a log file, "fit.log".  This file
+ is always appended to, so as to not lose any previous fit history;  it
+ should be deleted or renamed as desired.
+
+ The fit may be interrupted by pressing Ctrl-C (any key but Ctrl-C under
+ MSDOS and Atari Multitasking Systems).  After the current iteration
+ completes, you have the option to (1) stop the fit and accept the current
+ parameter values, (2) continue the fit, (3) execute a `gnuplot` command
+ as specified by the environment variable FIT_SCRIPT.  The default for
+ FIT_SCRIPT is `replot` (*note replot:: ), so if you had previously plotted
+ both the data and the fitting function in one graph, you can display the
+ current state of the fit.
+
+ Once `fit` has finished, the `update` (*note update:: ) command may be used to
+ store final values in a file for subsequent use as a parameter file.   See
+ `update` for details.
+
+
+* Menu:
+
+* adjustable parameters::
+* beginner's guide::
+* error estimates::
+* fit controlling::
+* multi-branch::
+* starting values::
+* tips::
+
+
+File: gnuplot.info, Node: adjustable parameters, Prev: fit, Up: fit, Next: 
beginner's guide
+
+ There are two ways that `via` can specify the parameters to be adjusted,
+ either directly on the command line or indirectly, by referencing a
+ parameter file.  The two use different means to set initial values.
+
+ Adjustable parameters can be specified by a comma-separated list of variable
+ names after the `via` keyword.  Any variable that is not already defined is
+ is created with an initial value of 1.0.  However, the fit is more likely
+ to converge rapidly if the variables have been previously declared with more
+ appropriate starting values.
+
+ In a parameter file, each parameter to be varied and a corresponding initial
+ value are specified, one per line, in the form
+       varname = value
+
+ Comments, marked by '#', and blank lines are permissible.  The
+ special form
+       varname = value       # FIXED
+
+ means that the variable is treated as a 'fixed parameter', initialized by the
+ parameter file, but not adjusted by `fit` (*note fit:: ).  For clarity, it may
+ be useful to designate variables as fixed parameters so that their values are
+ reported by `fit`.  The keyword `# FIXED` has to appear in exactly this form.
+
+
+
+File: gnuplot.info, Node: beginner's guide, Prev: adjustable parameters, Up: 
fit, Next: error estimates
+
+ `fit` (*note fit:: ) is used to find a set of parameters that 'best' fits your
+ data to your user-defined function.  The fit is judged on the basis of the the
+ sum of the squared differences or 'residuals' (SSR) between the input data
+ points and the function values, evaluated at the same places.  This quantity
+ is often called 'chisquare' (i.e., the Greek letter chi, to the power of
+ 2).  The algorithm attempts to minimize SSR, or more precisely, WSSR, as the
+ residuals are 'weighted' by the input data errors (or 1.0) before being
+ squared; see `fit error_estimates` for details.
+
+ That's why it is called 'least-squares fitting'.  Let's look at an example
+ to see what is meant by 'non-linear', but first we had better go over some
+ terms.  Here it is convenient to use z as the dependent variable for
+ user-defined functions of either one independent variable, z=f(x), or two
+ independent variables, z=f(x,y).  A parameter is a user-defined variable
+ that `fit` will adjust, i.e., an unknown quantity in the function
+ declaration.  Linearity/non-linearity refers to the relationship of the
+ dependent variable, z, to the parameters which `fit` is adjusting, not of
+ z to the independent variables, x and/or y.  (To be technical, the
+ second {and higher} derivatives of the fitting function with respect to
+ the parameters are zero for a linear least-squares problem).
+
+ For linear least-squares (LLS), the user-defined function will be a sum of
+ simple functions, not involving any parameters, each multiplied by one
+ parameter.  NLLS handles more complicated functions in which parameters can
+ be used in a large number of ways.  An example that illustrates the
+ difference between linear and nonlinear least-squares is the Fourier series.
+ One member may be written as
+      z=a*sin(c*x) + b*cos(c*x).
+ If a and b are the unknown parameters and c is constant, then estimating
+ values of the parameters is a linear least-squares problem.  However, if
+ c is an unknown parameter, the problem is nonlinear.
+
+ In the linear case, parameter values can be determined by comparatively
+ simple linear algebra, in one direct step.  However LLS is a special case
+ which is also solved along with more general NLLS problems by the iterative
+ procedure that `gnuplot` (*note gnuplot:: ) uses.  fit attempts to find the
+ minimum by doing a search.  Each step (iteration) calculates WSSR with a new
+ set of parameter values.  The Marquardt-Levenberg algorithm selects the
+ parameter values for the next iteration.  The process continues until a preset
+ criterium is met, either (1) the fit has "converged" (the relative change in
+ WSSR is less than FIT_LIMIT), or (2) it reaches a preset iteration count
+ limit, FIT_MAXITER (see `fit control variables`
+ (*note control variables:: )).  The fit may also be interrupted and
+ subsequently halted from the keyboard (see `fit`).
+
+ Often the function to be fitted will be based on a model (or theory) that
+ attempts to describe or predict the behaviour of the data.  Then `fit` can
+ be used to find values for the free parameters of the model, to determine
+ how well the data fits the model, and to estimate an error range for each
+ parameter.  See `fit error_estimates`.
+
+ Alternatively, in curve-fitting, functions are selected independent of
+ a model (on the basis of experience as to which are likely to describe
+ the trend of the data with the desired resolution and a minimum number
+ of parameters*functions.)  The `fit` solution then provides an analytic
+ representation of the curve.
+
+ However, if all you really want is a smooth curve through your data points,
+ the `smooth` (*note smooth:: ) option to  `plot` (*note plot:: ) may be what
+ you've been looking for rather than `fit`.
+
+
+
+File: gnuplot.info, Node: error estimates, Prev: beginner's guide, Up: fit, 
Next: statistical overview
+
+ In `fit` (*note fit:: ), the term "error" is used in two different contexts,
+ data error estimates and parameter error estimates.
+
+ Data error estimates are used to calculate the relative weight of each data
+ point when determining the weighted sum of squared residuals, WSSR or
+ chisquare.  They can affect the parameter estimates, since they determine
+ how much influence the deviation of each data point from the fitted function
+ has on the final values.  Some of the `fit` output information, including
+ the parameter error estimates, is more meaningful if accurate data error
+ estimates have been provided.
+
+ The 'statistical overview' describes some of the `fit` output and gives some
+ background for the 'practical guidelines'.
+
+* Menu:
+
+* statistical overview::
+* practical guidelines::
+
+
+File: gnuplot.info, Node: statistical overview, Prev: error estimates, Up: 
error estimates, Next: practical guidelines
+
+ The theory of non-linear least-squares (NLLS) is generally described in terms
+ of a normal distribution of errors, that is, the input data is assumed to be
+ a sample from a population having a given mean and a Gaussian (normal)
+ distribution about the mean with a given standard deviation.  For a sample of
+ sufficiently large size, and knowing the population standard deviation, one
+ can use the statistics of the chisquare distribution to describe a "goodness
+ of fit" by looking at the variable often called "chisquare".  Here, it is
+ sufficient to say that a reduced chisquare (chisquare/degrees of freedom,
+ where degrees of freedom is the number of datapoints less the number of
+ parameters being fitted) of 1.0 is an indication that the weighted sum of
+ squared deviations between the fitted function and the data points is the
+ same as that expected for a random sample from a population characterized by
+ the function with the current value of the parameters and the given standard
+ deviations.
+
+ If the standard deviation for the population is not constant, as in counting
+ statistics where variance = counts, then each point should be individually
+ weighted when comparing the observed sum of deviations and the expected sum
+ of deviations.
+
+ At the conclusion `fit` (*note fit:: ) reports 'stdfit', the standard
+ deviation of the fit, which is the rms of the residuals, and the variance of
+ the residuals, also called 'reduced chisquare' when the data points are
+ weighted.  The number of degrees of freedom (the number of data points minus
+ the number of fitted parameters) is used in these estimates because the
+ parameters used in calculating the residuals of the datapoints were obtained
+ from the same data.
+
+ To estimate confidence levels for the parameters, one can use the minimum
+ chisquare obtained from the fit and chisquare statistics to determine the
+ value of chisquare corresponding to the desired confidence level, but
+ considerably more calculation is required to determine the combinations of
+ parameters which produce such values.
+
+ Rather than determine confidence intervals, `fit` reports parameter error
+ estimates which are readily obtained from the variance-covariance matrix
+ after the final iteration.  By convention, these estimates are called
+ "standard errors" or "asymptotic standard errors", since they are calculated
+ in the same way as the standard errors (standard deviation of each parameter)
+ of a linear least-squares problem, even though the statistical conditions for
+ designating the quantity calculated to be a standard deviation are not
+ generally valid for the NLLS problem.  The asymptotic standard errors are
+ generally over-optimistic and should not be used for determining confidence
+ levels, but are useful for qualitative purposes.
+
+ The final solution also produces a correlation matrix, which gives an
+ indication of the correlation of parameters in the region of the solution;
+ if one parameter is changed, increasing chisquare, does changing another
+ compensate?  The main diagonal elements, autocorrelation, are all 1; if
+ all parameters were independent, all other elements would be nearly 0.  Two
+ variables which completely compensate each other would have an off-diagonal
+ element of unit magnitude, with a sign depending on whether the relation is
+ proportional or inversely proportional.  The smaller the magnitudes of the
+ off-diagonal elements, the closer the estimates of the standard deviation
+ of each parameter would be to the asymptotic standard error.
+
+
+File: gnuplot.info, Node: practical guidelines, Prev: statistical overview, 
Up: error estimates
+
+ If you have a basis for assigning weights to each data point, doing so lets
+ you make use of additional knowledge about your measurements, e.g., take into
+ account that some points may be more reliable than others.  That may affect
+ the final values of the parameters.
+
+ Weighting the data provides a basis for interpreting the additional `fit`
+ (*note fit:: ) output after the last iteration.  Even if you weight each point
+ equally, estimating an average standard deviation rather than using a weight
+ of 1 makes WSSR a dimensionless variable, as chisquare is by definition.
+
+ Each fit iteration will display information which can be used to evaluate
+ the progress of the fit.  (An '*' indicates that it did not find a smaller
+ WSSR and is trying again.)  The 'sum of squares of residuals', also called
+ 'chisquare', is the WSSR between the data and your fitted function; `fit`
+ has minimized that.  At this stage, with weighted data, chisquare is expected
+ to approach the number of degrees of freedom (data points minus parameters).
+ The WSSR can be used to calculate the reduced chisquare (WSSR/ndf) or stdfit,
+ the standard deviation of the fit, sqrt(WSSR/ndf).  Both of these are
+ reported for the final WSSR.
+
+ If the data are unweighted, stdfit is the rms value of the deviation of the
+ data from the fitted function, in user units.
+
+ If you supplied valid data errors, the number of data points is large enough,
+ and the model is correct, the reduced chisquare should be about unity.  (For
+ details, look up the 'chi-squared distribution' in your favourite statistics
+ reference.)  If so, there are additional tests, beyond the scope of this
+ overview, for determining how well the model fits the data.
+
+ A reduced chisquare much larger than 1.0 may be due to incorrect data error
+ estimates, data errors not normally distributed, systematic measurement
+ errors, 'outliers', or an incorrect model function.  A plot of the residuals,
+ e.g., `plot 'datafile' using 1:($2-f($1))`, may help to show any systematic
+ trends.  Plotting both the data points and the function may help to suggest
+ another model.
+
+ Similarly, a reduced chisquare less than 1.0 indicates WSSR is less than that
+ expected for a random sample from the function with normally distributed
+ errors.  The data error estimates may be too large, the statistical
+ assumptions may not be justified, or the model function may be too general,
+ fitting fluctuations in a particular sample in addition to the underlying
+ trends.  In the latter case, a simpler function may be more appropriate.
+
+ You'll have to get used to both `fit` and the kind of problems you apply it
+ to before you can relate the standard errors to some more practical estimates
+ of parameter uncertainties or evaluate the significance of the correlation
+ matrix.
+
+ Note that `fit`, in common with most NLLS implementations, minimizes the
+ weighted sum of squared distances (y-f(x))**2.  It does not provide any means
+ to account for "errors" in the values of x, only in y.  Also, any "outliers"
+ (data points outside the normal distribution of the model) will have an
+ exaggerated effect on the solution.
+
+
+File: gnuplot.info, Node: fit controlling, Prev: error estimates, Up: fit, 
Next: control variables
+
+ There are a number of `gnuplot` (*note gnuplot:: ) variables that can be
+ defined to affect `fit` (*note fit:: ).  Those which can be defined once
+ gnuplot is running are listed under 'control_variables' while those defined
+ before starting `gnuplot` are listed under 'environment_variables'.
+
+
+* Menu:
+
+* control variables::
+* environment variables::
+
+
+File: gnuplot.info, Node: control variables, Prev: fit controlling, Up: fit 
controlling, Next: environment variables
+
+ The default epsilon limit (1e-5) may be changed by declaring a value for
+       FIT_LIMIT
+ When the sum of squared residuals changes between two iteration steps by
+ a factor less than this number (epsilon), the fit is considered to have
+ 'converged'.
+
+ The maximum number of iterations may be limited by declaring a value for
+       FIT_MAXITER
+ A value of 0 (or not defining it at all)  means that there is no limit.
+
+ If you need even more control about the algorithm, and know the
+ Marquardt-Levenberg algorithm well, there are some more variables to
+ influence it. The startup value of `lambda` is normally calculated
+ automatically from the ML-matrix, but if you want to, you may provide
+ your own one with
+       FIT_START_LAMBDA
+ Specifying FIT_START_LAMBDA as zero or less will re-enable the automatic
+ selection. The variable
+       FIT_LAMBDA_FACTOR
+ gives the factor by which `lambda` is increased or decreased whenever
+ the chi-squared target function increased or decreased significantly.
+ Setting FIT_LAMBDA_FACTOR to zero re-enables the default factor of
+ 10.0.
+
+ Oher variables with the FIT_ prefix may be added to `fit` (*note fit:: ), so
+ it is safer not to use that prefix for user-defined variables.
+
+ The variables FIT_SKIP and FIT_INDEX were used by earlier releases of
+ `gnuplot` (*note gnuplot:: ) with a 'fit' patch called gnufit and are no
+ longer available. The datafile `every` (*note every:: ) modifier provides the
+ functionality of FIT_SKIP. FIT_INDEX was used for multi-branch fitting, but
+ multi-branch fitting of one independent variable is now done as a pseudo-3D
+ fit in which the second independent variable and `using` (*note using:: ) are
+ used to specify the branch. See `fit multi-branch` (*note multi-branch:: ).
+
+
+
+File: gnuplot.info, Node: environment variables, Prev: control variables, Up: 
fit controlling
+
+ The environment variables must be defined before `gnuplot` (*note gnuplot:: )
+ is executed; how to do so depends on your operating system.
+
+       FIT_LOG
+ changes the name (and/or path) of the file to which the fit log will be
+ written from the default of "fit.log" in the working directory.
+
+       FIT_SCRIPT
+ specifies a command that may be executed after an user interrupt. The default
+ is `replot` (*note replot:: ), but a  `plot` (*note plot:: ) or  `load`
+ (*note load:: ) command may be useful to display a plot customized to
+ highlight the progress of the fit.
+
+
+
+File: gnuplot.info, Node: multi-branch, Prev: fit controlling, Up: fit, Next: 
starting values
+
+ In multi-branch fitting, multiple data sets can be simultaneously fit with
+ functions of one independent variable having common parameters by minimizing
+ the total WSSR.  The function and parameters (branch) for each data set are
+ selected by using a 'pseudo-variable', e.g., either the dataline number (a
+ 'column' index of -1) or the datafile index (-2), as the second independent
+ variable.
+
+ Example:  Given two exponential decays of the form, z=f(x), each describing
+ a different data set but having a common decay time, estimate the values of
+ the parameters.  If the datafile has the format x:z:s, then
+      f(x,y) = (y==0) ? a*exp(-x/tau) : b*exp(-x/tau)
+      fit f(x,y) 'datafile' using  1:-1:2:3  via a, b, tau
+
+ For a more complicated example, see the file "hexa.fnc" used by the
+ "fit.dem" demo.
+
+ Appropriate weighting may be required since unit weights may cause one
+ branch to predominate if there is a difference in the scale of the dependent
+ variable.  Fitting each branch separately, using the multi-branch solution
+ as initial values, may give an indication as to the relative effect of each
+ branch on the joint solution.
+
+
+File: gnuplot.info, Node: starting values, Prev: multi-branch, Up: fit, Next: 
tips
+
+ Nonlinear fitting is not guaranteed to converge to the global optimum (the
+ solution with the smallest sum of squared residuals, SSR), and can get stuck
+ at a local minimum.  The routine has no way to determine that;  it is up to
+ you to judge whether this has happened.
+
+ `fit` (*note fit:: ) may, and often will get "lost" if started far from a
+ solution, where SSR is large and changing slowly as the parameters are varied,
+ or it may reach a numerically unstable region (e.g., too large a number
+ causing a floating point overflow) which results in an "undefined value"
+ message or `gnuplot` (*note gnuplot:: ) halting.
+
+ To improve the chances of finding the global optimum, you should set the
+ starting values at least roughly in the vicinity of the solution, e.g.,
+ within an order of magnitude, if possible.  The closer your starting values
+ are to the solution, the less chance of stopping at another minimum.  One way
+ to find starting values is to plot data and the fitting function on the same
+ graph and change parameter values and `replot` (*note replot:: ) until
+ reasonable similarity is reached.  The same plot is also useful to check
+ whether the fit stopped at a minimum with a poor fit.
+
+ Of course, a reasonably good fit is not proof there is not a "better" fit (in
+ either a statistical sense, characterized by an improved goodness-of-fit
+ criterion, or a physical sense, with a solution more consistent with the
+ model.)  Depending on the problem, it may be desirable to `fit` with various
+ sets of starting values, covering a reasonable range for each parameter.
+
+
+File: gnuplot.info, Node: tips, Prev: starting values, Up: fit
+
+ Here are some tips to keep in mind to get the most out of `fit`
+ (*note fit:: ).  They're not very organized, so you'll have to read them
+ several times until their essence has sunk in.
+
+ The two forms of the `via` argument to `fit` serve two largely distinct
+ purposes.  The `via "file"` form is best used for (possibly unattended) batch
+ operation, where you just supply the startup values in a file and can later
+ use `update` (*note update:: ) to copy the results back into another (or the
+ same) parameter file.
+
+ The `via var1, var2, ...` form is best used interactively, where the command
+ history mechanism may be used to edit the list of parameters to be fitted or
+ to supply new startup values for the next try.  This is particularly useful
+ for hard problems, where a direct fit to all parameters at once won't work
+ without good starting values.  To find such, you can iterate several times,
+ fitting only some of the parameters, until the values are close enough to the
+ goal that the final fit to all parameters at once will work.
+
+ Make sure that there is no mutual dependency among parameters of the function
+ you are fitting.  For example, don't try to fit a*exp(x+b), because
+ a*exp(x+b)=a*exp(b)*exp(x).  Instead, fit either a*exp(x) or exp(x+b).
+
+ A technical issue:  the parameters must not be too different in magnitude.
+ The larger the ratio of the largest and the smallest absolute parameter
+ values, the slower the fit will converge.  If the ratio is close to or above
+ the inverse of the machine floating point precision, it may take next to
+ forever to converge, or refuse to converge at all.  You will have to adapt
+ your function to avoid this, e.g., replace 'parameter' by '1e9*parameter' in
+ the function definition, and divide the starting value by 1e9.
+
+ If you can write your function as a linear combination of simple functions
+ weighted by the parameters to be fitted, by all means do so.  That helps a
+ lot, because the problem is no longer nonlinear and should converge with only
+ a small number of iterations, perhaps just one.
+
+ Some prescriptions for analysing data, given in practical experimentation
+ courses, may have you first fit some functions to your data, perhaps in a
+ multi-step process of accounting for several aspects of the underlying
+ theory one by one, and then extract the information you really wanted from
+ the fitting parameters of those functions.  With `fit`, this may often be
+ done in one step by writing the model function directly in terms of the
+ desired parameters.  Transforming data can also quite often be avoided,
+ though sometimes at the cost of a more difficult fit problem.  If you think
+ this contradicts the previous paragraph about simplifying the fit function,
+ you are correct.
+
+ A "singular matrix" message indicates that this implementation of the
+ Marquardt-Levenberg algorithm can't calculate parameter values for the next
+ iteration.  Try different starting values, writing the function in another
+ form, or a simpler function.
+
+ Finally, a nice quote from the manual of another fitting package (fudgit),
+ that kind of summarizes all these issues:  "Nonlinear fitting is an art!"
+
+
+File: gnuplot.info, Node: help, Prev: fit, Up: Commands, Next: if
+
+ The `help` command displays on-line help. To specify information on a
+ particular topic use the syntax:
+
+       help {<topic>}
+
+ If <topic> is not specified, a short message is printed about `gnuplot`
+ (*note gnuplot:: ). After help for the requested topic is given, a menu of
+ subtopics is given; help for a subtopic may be requested by typing its name,
+ extending the help request.  After that subtopic has been printed, the request
+ may be extended again or you may go back one level to the previous
+ topic.  Eventually, the `gnuplot` command line will return.
+
+ If a question mark (?) is given as the topic, the list of topics currently
+ available is printed on the screen.
+
+
+File: gnuplot.info, Node: if, Prev: help, Up: Commands, Next: load
+
+ The `if` command allows commands to be executed conditionally.
+
+ Syntax:
+       if (<condition>) <command-line>
+
+ <condition> will be evaluated.  If it is true (non-zero), then the command(s)
+ of the <command-line> will be executed.  If <condition> is false (zero), then
+ the entire <command-line> is ignored.  Note that use of `;` to allow multiple
+ commands on the same line will _not_ end the conditionalized commands.
+
+ Examples:
+       pi=3
+       if (pi!=acos(-1)) print "?Fixing pi!"; pi=acos(-1); print pi
+ will display:
+       ?Fixing pi!
+       3.14159265358979
+ but
+       if (1==2) print "Never see this"; print "Or this either"
+ will not display anything.
+
+ See `reread` (*note reread:: ) for an example of how if and reread can be used
+ together to perform a loop.
+
+
+
+File: gnuplot.info, Node: load, Prev: if, Up: Commands, Next: pause
+
+ The `load` command executes each line of the specified input file as if it
+ had been typed in interactively.  Files created by the `save` (*note save:: )
+ command can later be `load`ed.  Any text file containing valid commands can be
+ created and then executed by the `load` command.  Files being `load`ed may
+ themselves contain `load` or `call` (*note call:: ) commands.  See comment for
+ information about comments in commands.  To `load` with arguments, see
+ `call`.
+
+ The `load` command _must_ be the last command on a multi-command line.
+
+ Syntax:
+       load "<input-file>"
+
+ The name of the input file must be enclosed in quotes.
+
+ The special filename "-" may be used to `load` commands from standard input.
+ This allows a `gnuplot` (*note gnuplot:: ) command file to accept some
+ commands from standard input.  Please see "help batch/interactive" for more
+ details.
+
+ Examples:
+       load 'work.gnu'
+       load "func.dat"
+
+ The `load` command is performed implicitly on any file names given as
+ arguments to `gnuplot`.  These are loaded in the order specified, and
+ then `gnuplot` exits.
+
+
+File: gnuplot.info, Node: pause, Prev: load, Up: Commands, Next: plot
+
+ The `pause` command displays any text associated with the command and then
+ waits a specified amount of time or until the carriage return is pressed.
+ `pause` is especially useful in conjunction with `load` (*note load:: )
+ files.
+
+ Syntax:
+       pause <time> {"<string>"}
+
+ <time> may be any integer constant or expression.  Choosing -1 will wait
+ until a carriage return is hit, zero (0) won't pause at all, and a positive
+ integer will wait the specified number of seconds.  `pause 0` is synonymous
+ with `print` (*note print:: ).
+
+ Note: Since `pause` communicates with the operating system rather than the
+ graphics, it may behave differently with different device drivers (depending
+ upon how text and graphics are mixed).
+
+ Examples:
+       pause -1    # Wait until a carriage return is hit
+       pause 3     # Wait three seconds
+       pause -1  "Hit return to continue"
+       pause 10  "Isn't this pretty?  It's a cubic spline."
+
+
+
+File: gnuplot.info, Node: plot, Prev: pause, Up: Commands, Next: data-file
+
+ `plot` is the primary command for drawing plots with `gnuplot`
+ (*note gnuplot:: ).  It creates plots of functions and data in many, many
+ ways.  `plot` is used to draw 2-d functions and data; `splot` (*note splot:: )
+ draws 2-d projections of 3-d surfaces and data. `plot` and `splot` contain
+ many common features; see `splot` for differences. Note specifically that
+ `splot`'s `binary` (*note binary:: ) and  `matrix` (*note matrix:: ) options
+ do not exist for `plot`.
+
+ Syntax:
+       plot {<ranges>}
+            {<function> | {"<datafile>" {datafile-modifiers}}}
+            {axes <axes>} {<title-spec>} {with <style>}
+            {, {definitions,} <function> ...}
+
+ where either a <function> or the name of a data file enclosed in quotes is
+ supplied.  A function is a mathematical expression or a pair of mathematical
+ expressions in parametric mode.  The expressions may be defined completely or
+ in part earlier in the stream of `gnuplot` commands (see `user-defined`
+ (*note User-defined:: )).
+
+ It is also possible to define functions and parameters on the `plot` command
+ itself.  This is done merely by isolating them from other items with commas.
+
+ There are four possible sets of axes available; the keyword <axes> is used to
+ select the axes for which a particular line should be scaled.  `x1y1` refers
+ to the axes on the bottom and left; `x2y2` to those on the top and right;
+ `x1y2` to those on the bottom and right; and `x2y1` to those on the top and
+ left.  Ranges specified on the `plot` command apply only to the first set of
+ axes (bottom left).
+
+ Examples:
+       plot sin(x)
+       plot f(x) = sin(x*a), a = .2, f(x), a = .4, f(x)
+       plot [t=1:10] [-pi:pi*2] tan(t), \
+            "data.1" using (tan($2)):($3/$4) smooth csplines \
+                     axes x1y2 notitle with lines 5
+
+
+* Menu:
+
+* data-file::
+* errorbars::
+* parametric::
+* ranges::
+* title::
+* with::
+
+
+File: gnuplot.info, Node: data-file, Prev: plot, Up: plot, Next: every
+
+ Discrete data contained in a file can be displayed by specifying the name of
+ the data file (enclosed in single or double quotes) on the `plot`
+ (*note plot:: ) command line.
+
+ Syntax:
+       plot '<file_name>' {index <index list>}
+                             {every <every list>}
+                             {thru <thru expression>}
+                             {using <using list>}
+                             {smooth <option>}
+
+ The modifiers `index` (*note index:: ),  `every` (*note every:: ),  `thru`
+ (*note thru:: ),  `using` (*note using:: ), and  `smooth` (*note smooth:: )
+ are discussed separately.  In brief, `index` selects which data sets in a
+ multi-data-set file are to be plotted, `every` specifies which points within a
+ single data set are to be plotted, `using` determines how the columns within a
+ single record are to be interpreted (`thru` is a special case of `using`),
+ and `smooth` allows for simple interpolation and approximation.  ('splot' has
+ a similar syntax, but does not support the `smooth` and `thru` options.)
+
+ Data files should contain at least one data point per record (`using` can
+ select one data point from the record).  Records beginning with `#` (and
+ also with `!` on VMS) will be treated as comments and ignored.  Each data
+ point represents an (x,y) pair.  For `plot`s with error bars (see `set style
+ errorbars`), each data point is (x,y,ydelta), (x,y,ylow,yhigh), (x,y,xdelta),
+ (x,y,xlow,xhigh), or (x,y,xlow,xhigh,ylow,yhigh).  In all cases, the numbers
+ on each record of a data file must be separated by white space (one or more
+ blanks or tabs), unless a format specifier is provided by the `using` option.
+ This white space divides each record into columns.
+
+ Data may be written in exponential format with the exponent preceded by the
+ letter e, E, d, D, q, or Q.
+
+ Only one column (the y value) need be provided.  If x is omitted, `gnuplot`
+ (*note gnuplot:: ) provides integer values starting at 0.
+
+ In datafiles, blank records (records with no characters other than blanks and
+ a newline and/or carriage return) are significant---pairs of blank records
+ separate `index`es (see `plot datafile index`).  Data separated by double
+ blank records are treated as if they were in separate data files.
+
+ Single blank records designate discontinuities in a `plot`; no line will join
+ points separated by a blank records (if they are plotted with a line style).
+
+ If autoscaling has been enabled (`set autoscale` (*note autoscale:: )), the
+ axes are automatically extended to include all datapoints, with a whole number
+ of tic marks if tics are being drawn.  This has two consequences: i) For
+ `splot` (*note splot:: ), the corner of the surface may not coincide with the
+ corner of the base.  In this case, no vertical line is drawn.  ii) When
+ plotting data with the same x range on a dual-axis graph, the x coordinates
+ may not coincide if the x2tics are not being drawn.  This is because the x
+ axis has been autoextended to a whole number of tics, but the x2 axis has
+ not.  The following example illustrates the problem:
+
+       reset; plot '-', '-'
+       1 1
+       19 19
+       e
+       1 1
+       19 19
+       e
+
+* Menu:
+
+* every::
+* example datafile::
+* index::
+* smooth::
+* special-filenames::
+* thru::
+* using::
+
+
+File: gnuplot.info, Node: every, Prev: data-file, Up: data-file, Next: example 
datafile
+
+ The `every` keyword allows a periodic sampling of a data set to be plotted.
+
+ In the discussion a "point" is a datum defined by a single record in the
+ file; "block" here will mean the same thing as "datablock" (see `glossary`
+ (*note Glossary:: )).
+
+ Syntax:
+       plot 'file' every {<point_incr>}
+                           {:{<block_incr>}
+                             {:{<start_point>}
+                               {:{<start_block>}
+                                 {:{<end_point>}
+                                   {:<end_block>}}}}}
+
+ The data points to be plotted are selected according to a loop from
+ <`start_point`> to <`end_point`> with increment <`point_incr`> and the
+ blocks according to a loop from <`start_block`> to <`end_block`> with
+ increment <`block_incr`>.
+
+ The first datum in each block is numbered '0', as is the first block in the
+ file.
+
+ Note that records containing unplottable information are counted.
+
+ Any of the numbers can be omitted; the increments default to unity, the start
+ values to the first point or block, and the end values to the last point or
+ block.  If `every` is not specified, all points in all lines are plotted.
+
+ Examples:
+       every :::3::3    # selects just the fourth block ('0' is first)
+       every :::::9     # selects the first 10 blocks
+       every 2:2        # selects every other point in every other block
+       every ::5::15    # selects points 5 through 15 in each block
+
+
+File: gnuplot.info, Node: example datafile, Prev: every, Up: data-file, Next: 
index
+
+ This example plots the data in the file "population.dat" and a theoretical
+ curve:
+
+       pop(x) = 103*exp((1965-x)/10)
+       plot [1960:1990] 'population.dat', pop(x)
+
+ The file "population.dat" might contain:
+
+       # Gnu population in Antarctica since 1965
+          1965   103
+          1970   55
+          1975   34
+          1980   24
+          1985   10
+
+
+
+File: gnuplot.info, Node: index, Prev: example datafile, Up: data-file, Next: 
smooth
+
+ The `index` keyword allows only some of the data sets in a multi-data-set
+ file to be plotted.
+
+ Syntax:
+       plot 'file' index <m>{{:<n>}:<p>}
+
+ Data sets are separated by pairs of blank records.  `index <m>` selects only
+ set <m>; `index <m>:<n>` selects sets in the range <m> to <n>; and `index
+ <m>:<n>:<p>` selects indices <m>, <m>+<p>, <m>+2<p>, etc., but stopping at
+ <n>.  Following C indexing, the index 0 is assigned to the first data set in
+ the file.  Specifying too large an index results in an error message.  If
+ `index` is not specified, all sets are plotted as a single data set.
+
+ Example:
+       plot 'file' index 4:5
+
+
+File: gnuplot.info, Node: smooth, Prev: index, Up: data-file, Next: acsplines
+
+ `gnuplot` (*note gnuplot:: ) includes a few general-purpose routines for
+ interpolation and approximation of data; these are grouped under the `smooth`
+ option.  More sophisticated data processing may be performed by preprocessing
+ the data externally or by using `fit` (*note fit:: ) with an appropriate
+ model.
+
+ Syntax:
+       smooth {unique | csplines | acsplines | bezier | sbezier}
+
+ `unique` (*note unique:: ) plots the data after making them monotonic.  Each
+ of the other routines uses the data to determine the coefficients of a
+ continuous curve between the endpoints of the data.  This curve is then
+ plotted in the same manner as a function, that is, by finding its value at
+ uniform intervals along the abscissa (see `set samples` (*note samples:: ))
+ and connecting these points with straight line segments (if a line style is
+ chosen).
+
+ If `autoscale` (*note autoscale:: ) is in effect, the ranges will be computed
+ such that the plotted curve lies within the borders of the graph.
+
+ If too few points are available to allow the selected option to be applied,
+ an error message is produced.  The minimum number is one for `unique`, four
+ for `acsplines` (*note acsplines:: ), and three for the others.
+
+ The `smooth` options have no effect on function plots.
+
+* Menu:
+
+* acsplines::
+* bezier::
+* csplines::
+* sbezier::
+* unique::
+
+
+File: gnuplot.info, Node: acsplines, Prev: smooth, Up: smooth, Next: bezier
+
+ The `acsplines` option approximates the data with a "natural smoothing 
spline".
+ After the data are made monotonic in x (see `smooth unique`
+ (*note unique:: )), a curve is piecewise constructed from segments of cubic
+ polynomials whose coefficients are found by the weighting the data points; the
+ weights are taken from the third column in the data file.  That default can be
+ modified by the third entry in the `using` (*note using:: ) list, e.g.,
+       plot 'data-file' using 1:2:(1.0) smooth acsplines
+
+ Qualitatively, the absolute magnitude of the weights determines the number
+ of segments used to construct the curve.  If the weights are large, the
+ effect of each datum is large and the curve approaches that produced by
+ connecting consecutive points with natural cubic splines.  If the weights are
+ small, the curve is composed of fewer segments and thus is smoother; the
+ limiting case is the single segment produced by a weighted linear least
+ squares fit to all the data.  The smoothing weight can be expressed in terms
+ of errors as a statistical weight for a point divided by a "smoothing factor"
+ for the curve so that (standard) errors in the file can be used as smoothing
+ weights.
+
+ Example:
+       sw(x,S)=1/(x*x*S)
+       plot 'data_file' using 1:2:(sw($3,100)) smooth acsplines
+
+
+File: gnuplot.info, Node: bezier, Prev: acsplines, Up: smooth, Next: csplines
+
+ The `bezier` option approximates the data with a Bezier curve of degree n
+ (the number of data points) that connects the endpoints.
+
+
+File: gnuplot.info, Node: csplines, Prev: bezier, Up: smooth, Next: sbezier
+
+ The `csplines` option connects consecutive points by natural cubic splines
+ after rendering the data monotonic (see `smooth unique` (*note unique:: )).
+
+
+
+File: gnuplot.info, Node: sbezier, Prev: csplines, Up: smooth, Next: unique
+
+ The `sbezier` option first renders the data monotonic (`unique`
+ (*note unique:: )) and then applies the `bezier` (*note bezier:: ) algorithm.
+
+
+
+File: gnuplot.info, Node: unique, Prev: sbezier, Up: smooth
+
+ The `unique` option makes the data monotonic in x; points with the same
+ x-value are replaced by a single point having the average y-value.  The
+ resulting points are then connected by straight line segments.
+
+
+File: gnuplot.info, Node: special-filenames, Prev: smooth, Up: data-file, 
Next: thru
+
+ A special filename of `'-'` specifies that the data are inline; i.e., they
+ follow the command.  Only the data follow the command; `plot` (*note plot:: )
+ options like filters, titles, and line styles remain on the 'plot' command
+ line.  This is similar to << in unix shell script, and $DECK in VMS DCL.  The
+ data are entered as though they are being read from a file, one data point per
+ record. The letter "e" at the start of the first column terminates data
+ entry.  The `using` (*note using:: ) option can be applied to these
+ data---using it to filter them through a function might make sense, but
+ selecting columns probably doesn't!
+
+ `'-'` is intended for situations where it is useful to have data and commands
+ together, e.g., when `gnuplot` (*note gnuplot:: ) is run as a sub-process of
+ some front-end application.  Some of the demos, for example, might use this
+ feature.  While `plot` options such as `index` (*note index:: ) and  `every`
+ (*note every:: ) are recognized, their use forces you to enter data that won't
+ be used.  For example, while
+
+       plot '-' index 0, '-' index 1
+       2
+       4
+       6
+
+
+       10
+       12
+       14
+       e
+       2
+       4
+       6
+
+
+       10
+       12
+       14
+       e
+
+ does indeed work,
+
+       plot '-', '-'
+       2
+       4
+       6
+       e
+       10
+       12
+       14
+       e
+
+ is a lot easier to type.
+
+ If you use `'-'` with `replot` (*note replot:: ), you may need to enter the
+ data more than once (see `replot`).
+
+ A blank filename ('') specifies that the previous filename should be reused.
+ This can be useful with things like
+
+       plot 'a/very/long/filename' using 1:2, '' using 1:3, '' using 1:4
+
+ (If you use both `'-'` and `''` on the same `plot` command, you'll need to
+ have two sets of inline data, as in the example above.)
+
+ On some computer systems with a popen function (Unix), the datafile can be
+ piped through a shell command by starting the file name with a '<'.  For
+ example,
+
+       pop(x) = 103*exp(-x/10)
+       plot "< awk '{print $1-1965, $2}' population.dat", pop(x)
+
+ would plot the same information as the first population example but with
+ years since 1965 as the x axis.  If you want to execute this example, you
+ have to delete all comments from the data file above or substitute the
+ following command for the first part of the command above (the part up to
+ the comma):
+
+       plot "< awk '$0 !~ /^#/ {print $1-1965, $2}' population.dat"
+
+ While this approach is most flexible, it is possible to achieve simple
+ filtering with the `using` or `thru` (*note thru:: ) keywords.
+
+
+
+File: gnuplot.info, Node: thru, Prev: special-filenames, Up: data-file, Next: 
using
+
+ The `thru` function is provided for backward compatibility.
+
+ Syntax:
+       plot 'file' thru f(x)
+
+ It is equivalent to:
+
+       plot 'file' using 1:(f($2))
+
+ While the latter appears more complex, it is much more flexible.  The more
+ natural
+
+       plot 'file' thru f(y)
+
+ also works (i.e. you can use y as the dummy variable).
+
+ `thru` is parsed for `splot` (*note splot:: ) and  `fit` (*note fit:: ) but
+ has no effect.
+
+
+
+File: gnuplot.info, Node: using, Prev: thru, Up: data-file
+
+ The most common datafile modifier is `using`.
+
+ Syntax:
+       plot 'file' using {<entry> {:<entry> {:<entry> ...}}} {'format'}
+
+ If a format is specified, each datafile record is read using the C library's
+ 'scanf' function, with the specified format string.  Otherwise the record is
+ read and broken into columns at spaces or tabs.  A format cannot be specified
+ if time-format data is being used (this must be done by `set data time`).
+
+ The resulting array of data is then sorted into columns according to the
+ entries.  Each <entry> may be a simple column number, which selects the
+ datum, an expression enclosed in parentheses, or empty.  The expression can
+ use $1 to access the first item read, $2 for the second item, and so on.  It
+ can also use `column(x)` and `valid(x)` where x is an arbitrary expression
+ resulting in an integer.  `column(x)` returns the x'th datum; `valid(x)`
+ tests that the datum in the x'th column is a valid number.  A column number
+ of 0 generates a number increasing (from zero) with each point, and is reset
+ upon encountering two blank records.  A column number of -1 gives the
+ dataline number, which starts at 0, increments at single blank records, and
+ is reset at double blank records.  A column number of -2 gives the index
+ number, which is incremented only when two blank records are found.  An empty
+ <entry> will default to its order in the list of entries.  For example,
+ `using ::4` is interpreted as `using 1:2:4`.
+
+ N.B.---the `call` (*note call:: ) command also uses $'s as a special
+ character.  See call for details about how to include a column number in a
+ `call` argument list.
+
+ If the `using` list has but a single entry, that <entry> will be used for y
+ and the data point number is used for x; for example, "`plot 'file' using 1`"
+ is identical to "`plot 'file' using 0:1`".  If the `using` list has two
+ entries, these will be used for x and y.  Additional entries are usually
+ errors in x and/or y.  See `set style` (*note style:: ) for details about
+ plotting styles that make use of error information, and `fit` (*note fit:: )
+ for use of error information in curve fitting.
+
+ 'scanf' accepts several numerical specifications but `gnuplot`
+ (*note gnuplot:: ) requires all inputs to be double-precision floating-point
+ variables, so `lf` is the only permissible specifier.  'scanf' expects to see
+ white space---a blank, tab ("\t"), newline ("\n"), or formfeed
+ ("\f")---between numbers; anything else in the input stream must be explicitly
+ skipped.
+
+ Note that the use of "\t", "\n", or "\f" or requires use of double-quotes
+ rather than single-quotes.
+
+ Examples:
+
+ This creates a plot of the sum of the 2nd and 3rd data against the first:
+ (The format string specifies comma- rather than space-separated columns.)
+       plot 'file' using 1:($2+$3) '%lf,%lf,%lf'
+
+ In this example the data are read from the file "MyData" using a more
+ complicated format:
+       plot 'MyData' using "%*lf%lf%*20[^\n]%lf"
+
+ The meaning of this format is:
+
+       %*lf        ignore a number
+       %lf         read a double-precision number (x by default)
+       %*20[^\n]   ignore 20 non-newline characters
+       %lf         read a double-precision number (y by default)
+
+ One trick is to use the ternary `?:` operator to filter data:
+
+       plot 'file' using 1:($3>10 ? $2 : 1/0)
+
+ which plots the datum in column two against that in column one provided
+ the datum in column three exceeds ten.  `1/0` is undefined; `gnuplot`
+ quietly ignores undefined points, so unsuitable points are suppressed.
+
+ In fact, you can use a constant expression for the column number, provided it
+ doesn't start with an opening parenthesis; constructs like `using
+ 0+(complicated expression)` can be used.  The crucial point is that the
+ expression is evaluated once if it doesn't start with a left parenthesis, or
+ once for each data point read if it does.
+
+ If timeseries data are being used, the time can span multiple columns.  The
+ starting column should be specified.  Note that the spaces within the time
+ must be included when calculating starting columns for other data.  E.g., if
+ the first element on a line is a time with an embedded space, the y value
+ should be specified as column three.
+
+ It should be noted that `plot 'file'`, `plot 'file' using 1:2`, and `plot
+ (*note plot:: ) 'file' using ($1):($2)` can be subtly different: 1) if `file`
+ has some lines with one column and some with two, the first will invent x
+ values when they are missing, the second will quietly ignore the lines with
+ one column, and the third will store an undefined value for lines with one
+ point (so that in a plot with lines, no line joins points across the bad
+ point); 2) if a line contains text at the first column, the first will abort
+ the plot on an error, but the second and third should quietly skip the
+ garbage.
+
+ In fact, it is often possible to plot a file with lots of lines of garbage at
+ the top simply by specifying
+
+       plot 'file' using 1:2
+
+ However, if you want to leave text in your data files, it is safer to put the
+ comment character (#) in the first column of the text lines.
+
+
+File: gnuplot.info, Node: errorbars, Prev: data-file, Up: plot, Next: 
parametric
+
+ Error bars are supported for 2-d data file plots by reading one to four
+ additional columns (or `using` (*note using:: ) entries); these additional
+ values are used in different ways by the various errorbar styles.
+
+ In the default situation, `gnuplot` (*note gnuplot:: ) expects to see three,
+ four, or six numbers on each line of the data file---either
+
+       (x, y, ydelta),
+       (x, y, ylow, yhigh),
+       (x, y, xdelta),
+       (x, y, xlow, xhigh),
+       (x, y, xdelta, ydelta), or
+       (x, y, xlow, xhigh, ylow, yhigh).
+
+ The x coordinate must be specified.  The order of the numbers must be
+ exactly as given above, though the `using` qualifier can manipulate the order
+ and provide values for missing columns.  For example,
+
+       plot 'file' with errorbars
+       plot 'file' using 1:2:(sqrt($1)) with xerrorbars
+       plot 'file' using 1:2:($1-$3):($1+$3):4:5 with xyerrorbars
+
+ The last example is for a file containing an unsupported combination of
+ relative x and absolute y errors.  The `using` entry generates absolute x min
+ and max from the relative error.
+
+ The y error bar is a vertical line plotted from (x, ylow) to (x, yhigh).
+ If ydelta is specified instead of ylow and yhigh, ylow = y - ydelta and
+ yhigh = y + ydelta are derived.  If there are only two numbers on the record,
+ yhigh and ylow are both set to y.  The x error bar is a horizontal line
+ computed in the same fashion.  To get lines plotted between the data points,
+ `plot` (*note plot:: ) the data file twice, once with errorbars and once with
+ lines (but remember to use the `notitle` option on one to avoid two entries in
+ the key).
+
+ The error bars have crossbars at each end unless `set bar` (*note bar:: ) is
+ used (see set bar` for details).
+
+ If autoscaling is on, the ranges will be adjusted to include the error bars.
+
+ See `plot using`, `plot with` (*note with:: ), and  `set style`
+ (*note style:: ) for more information.
+
+
+
+File: gnuplot.info, Node: parametric, Prev: errorbars, Up: plot, Next: ranges
+
+ When in parametric mode (`set parametric` (*note parametric:: )) mathematical
+ expressions must be given in pairs for `plot` (*note plot:: ) and in triplets
+ for  `splot` (*note splot:: ).
+
+ Examples:
+       plot sin(t),t**2
+       splot cos(u)*cos(v),cos(u)*sin(v),sin(u)
+
+ Data files are plotted as before, except any preceding parametric function
+ must be fully specified before a data file is given as a plot.  In other
+ words, the x parametric function (`sin(t)` above) and the y parametric
+ function (`t**2` above) must not be interrupted with any modifiers or data
+ functions; doing so will generate a syntax error stating that the parametric
+ function is not fully specified.
+
+ Other modifiers, such as `with` (*note with:: ) and  `title` (*note title:: ),
+ may be specified only after the parametric function has been completed:
+
+       plot sin(t),t**2 title 'Parametric example' with linespoints
+
+
+File: gnuplot.info, Node: ranges, Prev: parametric, Up: plot, Next: title
+
+ The optional ranges specify the region of the graph that will be displayed.
+
+ Syntax:
+       [{<dummy-var>=}{{<min>}:{<max>}}]
+       [{{<min>}:{<max>}}]
+
+ The first form applies to the independent variable (`xrange` (*note xrange:: )
+ or  `trange` (*note trange:: ), if in parametric mode).  The second form
+ applies to the dependent variable `yrange` (*note yrange:: ) (and xrange, too,
+ if in parametric mode).  <dummy-var> is a new name for the independent
+ variable.  (The defaults may be changed with `set dummy`.)  The optional <min>
+ and <max> terms can be constant expressions or *.
+
+ In non-parametric mode, the order in which ranges must be given is `xrange`
+ and `yrange`.
+
+ In parametric mode, the order for the `plot` (*note plot:: ) command is
+ trange, xrange, and `yrange`.  The following `plot` command shows setting the
+ `trange` to [-pi:pi], the `xrange` to [-1.3:1.3] and the `yrange` to [-1:1]
+ for the duration of the graph:
+
+       plot [-pi:pi] [-1.3:1.3] [-1:1] sin(t),t**2
+
+ Note that the x2range and y2range cannot be specified here---`set x2range`
+ (*note x2range:: ) and `set y2range` (*note y2range:: ) must be used.
+
+ Ranges are interpreted in the order listed above for the appropriate mode.
+ Once all those needed are specified, no further ones must be listed, but
+ unneeded ones cannot be skipped---use an empty range `[]` as a placeholder.
+
+ `*` can be used to allow autoscaling of either of min and max.  See also
+ `set autoscale` (*note autoscale:: ).
+
+ Ranges specified on the `plot` or `splot` (*note splot:: ) command line affect
+ only that graph; use the `set xrange`, `set yrange`, etc., commands to change
+ the default ranges for future graphs.
+
+ With time data, you must provide the range (in the same manner as the time
+ appears in the datafile) within quotes.  `gnuplot` (*note gnuplot:: ) uses the
+  `timefmt` (*note timefmt:: ) string to read the value---see `set timefmt`.
+
+ Examples:
+
+ This uses the current ranges:
+       plot cos(x)
+
+ This sets the x range only:
+       plot [-10:30] sin(pi*x)/(pi*x)
+
+ This is the same, but uses t as the dummy-variable:
+       plot [t = -10 :30]  sin(pi*t)/(pi*t)
+
+ This sets both the x and y ranges:
+       plot [-pi:pi] [-3:3]  tan(x), 1/x
+
+ This sets only the y range, and turns off autoscaling on both axes:
+       plot [ ] [-2:sin(5)*-8] sin(x)**besj0(x)
+
+ This sets xmax and ymin only:
+       plot [:200] [-pi:]  exp(sin(x))
+
+ This sets the x range for a timeseries:
+       set timefmt "%d/%m/%y %H:%M"
+       plot ["1/6/93 12:00":"5/6/93 12:00"] 'timedata.dat'
+
+
+
+File: gnuplot.info, Node: title, Prev: ranges, Up: plot, Next: with
+
+ A line title for each function and data set appears in the key, accompanied
+ by a sample of the line and/or symbol used to represent it.  It can be
+ changed by using the `title` option.
+
+ Syntax:
+       title "<title>" | notitle
+
+ where <title> is the new title of the line and must be enclosed in quotes.
+ The quotes will not be shown in the key.  A special character may be given as
+ a backslash followed by its octal value ("\345").  The tab character "\t" is
+ understood.  Note that backslash processing occurs only for strings enclosed
+ in double quotes---use single quotes to prevent such processing.  The newline
+ character "\n" is not processed in key entries in either type of string.
+
+ The line title and sample can be omitted from the key by using the keyword
+ `notitle`.  A null title (`title ''`) is equivalent to `notitle`.  If only
+ the sample is wanted, use one or more blanks (`title ' '`).
+
+ By default the line title is the function or file name as it appears on the
+ `plot` (*note plot:: ) command.  If it is a file name, any datafile modifiers
+ specified will be included in the default title.
+
+ The layout of the key itself (position, title justification, etc.) can be
+ controlled by `set key` (*note key:: ).  Please see set key for details.
+
+ Examples:
+
+ This plots y=x with the title 'x':
+       plot x
+
+ This plots x squared with title "x^2" and file "data.1" with title
+ "measured data":
+       plot x**2 title "x^2", 'data.1' t "measured data"
+
+ This puts an untitled circular border around a polar graph:
+       set polar; plot my_function(t), 1 notitle
+
+
+File: gnuplot.info, Node: with, Prev: title, Up: plot
+
+ Functions and data may be displayed in one of a large number of styles.
+ The `with` keyword provides the means of selection.
+
+ Syntax:
+       with <style> { {linestyle | ls <line_style>}
+                      | {{linetype | lt <line_type>}
+                         {linewidth | lw <line_width>}
+                         {pointtype | pt <point_type>}
+                         {pointsize | ps <point_size>}} }
+
+ where <style> is either `lines` (*note lines:: ),  `points` (*note points:: ),
+  `linespoints` (*note linespoints:: ),  `impulses` (*note impulses:: ),
+  `dots` (*note dots:: ), `steps` (*note steps:: ),  `fsteps`
+ (*note fsteps:: ),  `histeps` (*note histeps:: ),  `errorbars`
+ (*note errorbars:: ),  `xerrorbars` (*note xerrorbars:: ),  `yerrorbars`
+ (*note yerrorbars:: ), `xyerrorbars` (*note xyerrorbars:: ),  `boxes`
+ (*note boxes:: ),  `boxerrorbars` (*note boxerrorbars:: ),  `boxxyerrorbars`
+ (*note boxxyerrorbars:: ),  `financebars` (*note financebars:: ),
+ `candlesticks` (*note candlesticks:: ) or  `vector` (*note vector:: ).  Some
+ of these styles require additional information.  See `set style <style>` for
+ details of each style.
+
+ Default styles are chosen with the `set function style`
+ (*note function style:: ) and  `set data style` (*note data style:: )
+ commands.
+
+ By default, each function and data file will use a different line type and
+ point type, up to the maximum number of available types.  All terminal
+ drivers support at least six different point types, and re-use them, in
+ order, if more are required.  The LaTeX driver supplies an additional six
+ point types (all variants of a circle), and thus will only repeat after 12
+ curves are plotted with points.  The PostScript drivers (`postscript`
+ (*note postscript:: )) supplies a total of 64.
+
+ If you wish to choose the line or point type for a single plot, <line_type>
+ and <point_type> may be specified.  These are positive integer constants (or
+ expressions) that specify the line type and point type to be used for the
+ plot.  Use `test` (*note test:: ) to display the types available for your
+ terminal.
+
+ You may also scale the line width and point size for a plot by using
+ <line_width> and <point_size>, which are specified relative to the default
+ values for each terminal.  The pointsize may also be altered globally---see
+ `set pointsize` (*note pointsize:: ) for details.  But note that both
+ <point_size> as set here and as set by `set pointsize` multiply the default
+ point size---their effects are not cumulative.  That is, `set pointsize 2;
+ plot x w p ps 3` will use points three times default size, not six.
+
+ If you have defined specific line type/width and point type/size combinations
+ with `set linestyle` (*note linestyle:: ), one of these may be selected by
+ setting <line_style> to the index of the desired style.
+
+ The keywords may be abbreviated as indicated.
+
+ Note that the `linewidth` (*note linewidth:: ) and pointsize options are not
+ supported by all terminals.
+
+ Examples:
+
+ This plots sin(x) with impulses:
+       plot sin(x) with impulses
+
+ This plots x with points, x**2 with the default:
+       plot x*y w points, x**2 + y**2
+
+ This plots tan(x) with the default function style, file "data.1" with lines:
+       plot [ ] [-2:5] tan(x), 'data.1' with l
+
+ This plots "leastsq.dat" with impulses:
+       plot 'leastsq.dat' w i
+
+ This plots the data file "population" with boxes:
+       plot 'population' with boxes
+
+ This plots "exper.dat" with errorbars and lines connecting the points
+ (errorbars require three or four columns):
+       plot 'exper.dat' w lines, 'exper.dat' notitle w errorbars
+
+ This plots sin(x) and cos(x) with linespoints, using the same line type but
+ different point types:
+       plot sin(x) with linesp lt 1 pt 3, cos(x) with linesp lt 1 pt 4
+
+ This plots file "data" with points of type 3 and twice usual size:
+       plot 'data' with points pointtype 3 pointsize 2
+
+ This plots two data sets with lines differing only by weight:
+       plot 'd1' t "good" w l lt 2 lw 3, 'd2' t "bad" w l lt 2 lw 1
+
+ See `set style` (*note style:: ) to change the default styles.
+
+
+
+File: gnuplot.info, Node: print, Prev: plot, Up: Commands, Next: pwd
+
+ The `print` command prints the value of <expression> to the screen.  It is
+ synonymous with `pause 0`.  <expression> may be anything that `gnuplot`
+ (*note gnuplot:: ) can evaluate that produces a number, or it can be a
+ string.
+
+ Syntax:
+       print <expression> {, <expression>, ...}
+
+ See `expressions` (*note Expressions:: ).
+
+
+
+File: gnuplot.info, Node: pwd, Prev: print, Up: Commands, Next: quit
+
+ The `pwd` command prints the name of the working directory to the screen.
+
+
+File: gnuplot.info, Node: quit, Prev: pwd, Up: Commands, Next: replot
+
+ The `exit` (*note exit:: ) and quit commands and END-OF-FILE character will
+ exit it `gnuplot` (*note gnuplot:: ). Each of these commands will clear the
+ output device (as does the `clear` (*note clear:: ) command) before exiting.
+
+
+
+File: gnuplot.info, Node: replot, Prev: quit, Up: Commands, Next: reread
+
+ The `replot` command without arguments repeats the last `plot` (*note plot:: )
+ or  `splot` (*note splot:: ) command.  This can be useful for viewing a plot
+ with different `set` (*note set-show:: ) options, or when generating the same
+ plot for several devices.
+
+ Arguments specified after a `replot` command will be added onto the last
+ `plot` or `splot` command (with an implied ',' separator) before it is
+ repeated.  `replot` accepts the same arguments as the `plot` and `splot`
+ commands except that ranges cannot be specified.  Thus you can use `replot`
+ to plot a function against the second axes if the previous command was `plot`
+ but not if it was `splot`, and similarly you can use `replot` to add a plot
+ from a binary file only if the previous command was `splot`.
+
+ N.B.---use of
+
+       plot '-' ; ... ; replot
+
+ is not recommended.  `gnuplot` (*note gnuplot:: ) does not store the inline
+ data internally, so since `replot` appends new information to the previous
+ `plot` and then executes the modified command, the `'-'` from the initial
+ `plot` will expect to read inline data again.
+
+ Note that `replot` does not work in `multiplot` (*note multiplot:: ) mode,
+ since it reproduces only the last plot rather than the entire screen.
+
+ See also `command-line-editing` (*note Command-line-editing:: ) for ways to
+ edit the last plot (splot) command.
+
+
+
+File: gnuplot.info, Node: reread, Prev: replot, Up: Commands, Next: reset
+
+ The `reread` command causes the current `gnuplot` (*note gnuplot:: ) command
+ file, as specified by a `load` (*note load:: ) command or on the command line,
+ to be reset to its starting point before further commands are read from
+ it.  This essentially implements an endless loop of the commands from the
+ beginning of the command file to the `reread` command.  (But this is not
+ necessarily a disaster---`reread` can be very useful when used in conjunction
+ with `if` (*note if:: ).  See if for details.) The `reread` command has no
+ effect if input from standard input.
+
+ Examples:
+
+ Suppose the file "looper" contains the commands
+       a=a+1
+       plot sin(x*a)
+       pause -1
+       if(a<5) reread
+ and from within `gnuplot` you submit the commands
+       a=0
+       load 'looper'
+ The result will be four plots (separated by the `pause` (*note pause:: )
+ message).
+
+ Suppose the file "data" contains six columns of numbers with a total yrange
+ from 0 to 10; the first is x and the next are five different functions of x.
+ Suppose also that the file "plotter" contains the commands
+       c_p = c_p+1
+       plot "$0" using 1:c_p with lines linetype c_p
+       if(c_p <  n_p) reread
+ and from within `gnuplot` you submit the commands
+       n_p=6
+       c_p=1
+       set nokey
+       set yrange [0:10]
+       set multiplot
+       call 'plotter' 'data'
+       set nomultiplot
+ The result is a single graph consisting of five plots.  The yrange must be
+ set explicitly to guarantee that the five separate graphs (drawn on top of
+ each other in multiplot mode) will have exactly the same axes.  The linetype
+ must be specified; otherwise all the plots would be drawn with the same type.
+
+
+File: gnuplot.info, Node: reset, Prev: reread, Up: Commands, Next: save
+
+ The `reset` command causes all options that can be set with the `set`
+ (*note set-show:: ) command to take on their default values.  The only
+ exceptions are that the terminal set with `set term` (*note terminal:: ) and
+ the output file set with  `set output` (*note output:: ) are left
+ unchanged.  This command is useful, e.g., to restore the default settings at
+ the end of a command file, or to return to a defined state after lots of
+ settings have been changed within a command file.  Please refer to the `set`
+ command to see the default values that the various options take.
+
+
+
+File: gnuplot.info, Node: save, Prev: reset, Up: Commands, Next: set-show
+
+ The `save` command saves user-defined functions, variables, `set`
+ (*note set-show:: ) options, or all three, plus the last `plot`
+ (*note plot:: ) ((`splot` (*note splot:: )) command to the specified file.
+
+ Syntax:
+       save  {<option>} '<filename>'
+
+ where <option> is `functions` (*note functions:: ),  `variables`
+ (*note variables:: ) or set. If no option is used, `gnuplot`
+ (*note gnuplot:: ) saves functions, variables, set options and the last plot
+ (`splot`) command.
+
+ `save`d files are written in text format and may be read by the `load`
+ (*note load:: ) command.
+
+ The filename must be enclosed in quotes.
+
+ Examples:
+       save 'work.gnu'
+       save functions 'func.dat'
+       save var 'var.dat'
+       save set 'options.dat'
+
+
+File: gnuplot.info, Node: set-show, Prev: save, Up: Commands, Next: angles
+
+ The `set` command can be used to sets _lots_ of options.  No screen is
+ drawn, however, until a `plot` (*note plot:: ),  `splot` (*note splot:: ), or
+  `replot` (*note replot:: ) command is given.
+
+ The `show` command shows their settings;  `show all` shows all the
+ settings.
+
+ If a variable contains time/date data, `show` will display it according to
+ the format currently defined by `set timefmt` (*note timefmt:: ), even if that
+ was not in effect when the variable was initially defined.
+
+
+* Menu:
+
+* angles::
+* arrow::
+* autoscale::
+* bar::
+* bmargin::
+* border::
+* boxwidth::
+* clabel::
+* clip::
+* cntrparam::
+* contour::
+* data style::
+* dgrid3d::
+* dummy::
+* encoding::
+* format::
+* function style::
+* functions::
+* grid::
+* hidden3d::
+* isosamples::
+* key::
+* label::
+* linestyle::
+* lmargin::
+* locale::
+* logscale::
+* mapping::
+* margin::
+* missing::
+* multiplot::
+* mx2tics::
+* mxtics::
+* my2tics::
+* mytics::
+* mztics::
+* offsets::
+* origin::
+* output::
+* parametric::
+* pointsize::
+* polar::
+* rmargin::
+* rrange::
+* samples::
+* size::
+* style::
+* surface::
+* terminal::
+* tics::
+* ticslevel::
+* ticscale::
+* timestamp::
+* timefmt::
+* title::
+* tmargin::
+* trange::
+* urange::
+* variables::
+* version::
+* view::
+* vrange::
+* x2data::
+* x2dtics::
+* x2label::
+* x2mtics::
+* x2range::
+* x2tics::
+* x2zeroaxis::
+* xdata::
+* xdtics::
+* xlabel::
+* xmtics::
+* xrange::
+* xtics::
+* xzeroaxis::
+* y2data::
+* y2dtics::
+* y2label::
+* y2mtics::
+* y2range::
+* y2tics::
+* y2zeroaxis::
+* ydata::
+* ydtics::
+* ylabel::
+* ymtics::
+* yrange::
+* ytics::
+* yzeroaxis::
+* zdata::
+* zdtics::
+* zero::
+* zeroaxis::
+* zlabel::
+* zmtics::
+* zrange::
+* ztics::
+
+
+File: gnuplot.info, Node: angles, Prev: set-show, Up: set-show, Next: arrow
+
+ By default, `gnuplot` (*note gnuplot:: ) assumes the independent variable in
+ polar graphs is in units of radians.  If `set angles degrees` is specified
+ before `set polar` (*note polar:: ), then the default range is [0:360] and the
+ independent variable has units of degrees.  This is particularly useful for
+ plots of data files.  The angle setting also applies to 3-d mapping as set via
+ the `set mapping` (*note mapping:: ) command.
+
+ Syntax:
+       set angles {degrees | radians}
+       show angles
+
+ The angle specified in `set grid polar` is also read and displayed in the
+ units specified by `set angles`.
+
+ `set angles` also affects the arguments of the machine-defined functions
+ sin(x), cos(x) and tan(x), and the outputs of asin(x), acos(x), atan(x),
+ atan2(x), and arg(x).  It has no effect on the arguments of hyperbolic
+ functions or Bessel functions.  However, the output arguments of inverse
+ hyperbolic functions of complex arguments are affected; if these functions
+ are used, `set angles radians` must be in effect to maintain consistency
+ between input and output arguments.
+
+       x={1.0,0.1}
+       set angles radians
+       y=sinh(x)
+       print y         #prints {1.16933, 0.154051}
+       print asinh(y)  #prints {1.0, 0.1}
+ but
+       set angles degrees
+       y=sinh(x)
+       print y         #prints {1.16933, 0.154051}
+       print asinh(y)  #prints {57.29578, 5.729578}
+
+
+File: gnuplot.info, Node: arrow, Prev: angles, Up: set-show, Next: autoscale
+
+ Arbitrary arrows can be placed on a plot using the `set arrow` command.
+
+ Syntax:
+       set arrow {<tag>} {from <position>} {to <position>} {{no}head}
+                 { {linestyle | ls <line_style>}
+                   | {linetype | lt <line_type>}
+                     {linewidth | lw <line_width} }
+       set noarrow {<tag>}
+       show arrow
+
+ <tag> is an integer that identifies the arrow.  If no tag is given, the
+ lowest unused tag value is assigned automatically.  The tag can be used to
+ delete or change a specific arrow.  To change any attribute of an existing
+ arrow, use the `set arrow` command with the appropriate tag and specify the
+ parts of the arrow to be changed.
+
+ The <position>s are specified by either x,y or x,y,z, and may be preceded by
+ `first`, `second`, `graph`, or `screen` to select the coordinate system.
+ Unspecified coordinates default to 0.  The endpoints can be specified in
+ one of four coordinate systems---`first` or `second` axes, `graph` or
+ `screen`.  See `coordinates` (*note Coordinates:: ) for details.  A coordinate
+ system specifier does not carry over from the "from" position to the "to"
+ position.  Arrows outside the screen boundaries are permitted but may cause
+ device errors.
+
+ Specifying `nohead` produces an arrow drawn without a head---a line segment.
+ This gives you yet another way to draw a line segment on the plot.  By
+ default, arrows have heads.
+
+ The line style may be selected from a user-defined list of line styles (see
+ `set linestyle` (*note linestyle:: )) or may be defined here by providing
+ values for <line_type> (an index from the default list of styles) and/or
+ <line_width> (which is a multiplier for the default width).
+
+ Note, however, that if a user-defined line style has been selected, its
+ properties (type and width) cannot be altered merely by issuing another
+ `set arrow` command with the appropriate index and `lt` or `lw`.
+
+ Examples:
+
+ To set an arrow pointing from the origin to (1,2) with user-defined style 5,
+ use:
+       set arrow to 1,2 ls 5
+
+ To set an arrow from bottom left of plotting area to (-5,5,3), and tag the
+ arrow number 3, use:
+       set arrow 3 from graph 0,0 to -5,5,3
+
+ To change the preceding arrow to end at 1,1,1, without an arrow head and
+ double its width, use:
+       set arrow 3 to 1,1,1 nohead lw 2
+
+ To draw a vertical line from the bottom to the top of the graph at x=3, use:
+       set arrow from 3, graph 0 to 3, graph 1 nohead
+
+ To delete arrow number 2, use:
+       set noarrow 2
+
+ To delete all arrows, use:
+       set noarrow
+
+ To show all arrows (in tag order), use:
+       show arrow
+
+
+File: gnuplot.info, Node: autoscale, Prev: arrow, Up: set-show, Next: 
parametric mode
+
+ Autoscaling may be set individually on the x, y or z axis or globally on all
+ axes. The default is to autoscale all axes.
+
+ Syntax:
+       set autoscale {<axes>{min|max}}
+       set noautoscale {<axes>{min|max}}
+       show autoscale
+
+ where <axes> is either `x`, `y`, `z`, `x2`, `y2` or `xy`.  A keyword with
+ `min` or `max` appended (this cannot be done with `xy`) tells `gnuplot`
+ (*note gnuplot:: ) to autoscale just the minimum or maximum of that axis.  If
+ no keyword is given, all axes are autoscaled.
+
+ When autoscaling, the axis range is automatically computed and the dependent
+ axis (y for a `plot` (*note plot:: ) and z for  `splot` (*note splot:: )) is
+ scaled to include the range of the function or data being plotted.
+
+ If autoscaling of the dependent axis (y or z) is not set, the current y or z
+ range is used.
+
+ Autoscaling the independent variables (x for `plot` and x,y for `splot`) is a
+ request to set the domain to match any data file being plotted.  If there are
+ no data files, autoscaling an independent variable has no effect.  In other
+ words, in the absence of a data file, functions alone do not affect the x
+ range (or the y range if plotting z = f(x,y)).
+
+ Please see `set xrange` (*note xrange:: ) for additional information about
+ ranges.
+
+ The behavior of autoscaling remains consistent in parametric mode, (see `set
+ parametric`).  However, there are more dependent variables and hence more
+ control over x, y, and z axis scales.  In parametric mode, the independent or
+ dummy variable is t for `plot`s and u,v for `splot`s.  `autoscale` in
+ parametric mode, then, controls all ranges (t, u, v, x, y, and z) and allows
+ x, y, and z to be fully autoscaled.
+
+ Autoscaling works the same way for polar mode as it does for parametric mode
+ for `plot`, with the extension that in polar mode `set dummy` (*note dummy:: )
+ can be used to change the independent variable from t (see `set dummy`).
+
+ When tics are displayed on second axes but no plot has been specified for
+ those axes, x2range and y2range are inherited from xrange and yrange.  This
+ is done _before_ xrange and yrange are autoextended to a whole number of
+ tics, which can cause unexpected results.
+
+ Examples:
+
+ This sets autoscaling of the y axis (other axes are not affected):
+       set autoscale y
+
+ This sets autoscaling only for the minimum of the y axis (the maximum of the
+ y axis and the other axes are not affected):
+       set autoscale ymin
+
+ This sets autoscaling of the x and y axes:
+       set autoscale xy
+
+ This sets autoscaling of the x, y, z, x2 and y2 axes:
+       set autoscale
+
+ This disables autoscaling of the x, y, z, x2 and y2 axes:
+       set noautoscale
+
+ This disables autoscaling of the z axis only:
+       set noautoscale z
+
+* Menu:
+
+* parametric mode::
+* polar mode::
+
+
+File: gnuplot.info, Node: parametric mode, Prev: autoscale, Up: autoscale, 
Next: polar mode
+
+ When in parametric mode (`set parametric` (*note parametric:: )), the xrange
+ is as fully scalable as the y range.  In other words, in parametric mode the x
+ axis can be automatically scaled to fit the range of the parametric function
+ that is being plotted.  Of course, the y axis can also be automatically scaled
+ just as in the non-parametric case.  If autoscaling on the x axis is not set,
+ the current x range is used.
+
+ Data files are plotted the same in parametric and non-parametric mode.
+ However, there is a difference in mixed function and data plots: in
+ non-parametric mode with autoscaled x, the x range of the datafile controls
+ the x range of the functions; in parametric mode it has no influence.
+
+ For completeness a last command `set autoscale t` is accepted.  However, the
+ effect of this "scaling" is very minor.  When `gnuplot` (*note gnuplot:: )
+ determines that the t range would be empty, it makes a small adjustment if
+ autoscaling is true. Otherwise, `gnuplot` gives an error.  Such behavior may,
+ in fact, not be very useful and the command `set autoscale t` is certainly
+ questionable.
+
+ `splot` (*note splot:: ) extends the above ideas as you would expect.  If
+ autoscaling is set, then x, y, and z ranges are computed and each axis scaled
+ to fit the resulting data.
+
+
+
+File: gnuplot.info, Node: polar mode, Prev: parametric mode, Up: autoscale
+
+ When in polar mode (`set polar` (*note polar:: )), the xrange and the yrange
+ are both found from the polar coordinates, and thus they can both be
+ automatically scaled. In other words, in polar mode both the x and y axes can
+ be automatically scaled to fit the ranges of the polar function that is being
+ plotted.
+
+ When plotting functions in polar mode, the rrange may be autoscaled.  When
+ plotting data files in polar mode, the trange may also be autoscaled.  Note
+ that if the trange is contained within one quadrant, autoscaling will produce
+ a polar plot of only that single quadrant.
+
+ Explicitly setting one or two ranges but not others may lead to unexpected
+ results.
+
+
+File: gnuplot.info, Node: bar, Prev: autoscale, Up: set-show, Next: bmargin
+
+ The `set bar` command controls the tics at the ends of errorbars.
+
+ Syntax:
+       set bar {small | large | <size>}
+       show bar
+
+ `small` is a synonym for 0.0, and `large` for 1.0.
+ The default is 1.0 if no size is given.
+
+
+File: gnuplot.info, Node: bmargin, Prev: bar, Up: set-show, Next: border
+
+ The command `set bmargin` sets the size of the bottom margin.  Please see
+ `set margin` (*note margin:: ) for details.
+
+
+
+File: gnuplot.info, Node: border, Prev: bmargin, Up: set-show, Next: boxwidth
+
+ The `set border` and `set noborder` commands control the display of the graph
+ borders for the `plot` (*note plot:: ) and  `splot` (*note splot:: )
+ commands.
+
+ Syntax:
+       set border {<integer> { {linestyle | ls <line_style>}
+                               | {linetype | lt <line_type> }
+                                 {linewidth | lw <line_width>} } }
+       set noborder
+       show border
+
+ The borders are encoded in a 12-bit integer: the bottom four bits control the
+ border for `plot` and the sides of the base for `splot`; The next four bits
+ control the verticals in `splot`; the top four bits control the edges on top
+ of the `splot`.  In detail, the `<integer>` should be the sum of the
+ appropriate entries from the following table:
+
+                         plot border     splot         splot
+           Side          splot base    verticals        top
+       bottom (south)         1            16           256
+       left   (west)          2            32           512
+       top    (north)         4            64          1024
+       right  (east)          8           128          2048
+
+ The default is 31, which is all four sides for `plot`, and base and z axis
+ for `splot`.
+
+ Using the optional <line_style>, <line_type> and <line_width>
+ specifiers, the way the border lines are drawn can be influenced
+ (limited by what the current terminal driver supports).
+
+ Various axes or combinations of axes may be added together in the command.
+
+ To have tics on edges other than bottom and left, disable the usual tics and
+ enable the second axes.
+
+ Examples:
+
+ Draw all borders:
+       set border
+
+ Draw only the SOUTHWEST borders:
+       set border 3
+
+ Draw a complete box around a `splot`:
+       set border 4095
+
+ Draw a partial box, omitting the front vertical:
+       set border 127+256+512
+
+ Draw only the NORTHEAST borders:
+       set noxtics; set noytics; set x2tics; set y2tics; set border 12
+
+
+
+File: gnuplot.info, Node: boxwidth, Prev: border, Up: set-show, Next: clabel
+
+ The `set boxwidth` command is used to set the default width of boxes in the
+ `boxes` (*note boxes:: ) and  `boxerrorbars` (*note boxerrorbars:: ) styles.
+
+ Syntax:
+       set boxwidth {<width>}
+       show boxwidth
+
+ If a data file is plotted without the width being specified in the third,
+ fourth, or fifth column (or `using` (*note using:: ) entry), or if a function
+ is plotted, the width of each box is set by the `set boxwidth` command.  (If a
+ width is given both in the file and by the `set boxwidth` command, the one in
+ the file is used.)  If the width is not specified in one of these ways, the
+ width of each box will be calculated automatically so that it touches the
+ adjacent boxes. In a four-column data set, the fourth column will be
+ interpreted as the box width unless the width is set to -2.0, in which case
+ the width will be calculated automatically.  See `set style boxerrorbars` for
+ more details.
+
+ To set the box width to automatic use the command
+       set boxwidth
+ or, for four-column data,
+       set boxwidth -2
+
+ The same effect can be achieved with the `using` keyword in `plot`
+ (*note plot:: ):       plot 'file' using 1:2:3:4:(-2)
+
+
+
+File: gnuplot.info, Node: clabel, Prev: boxwidth, Up: set-show, Next: clip
+
+ `gnuplot` (*note gnuplot:: ) will vary the linetype used for each contour
+ level when clabel is set.  When this option on (the default), a legend labels
+ each linestyle with the z level it represents.  It is not possible at present
+ to separate the contour labels from the surface key.
+
+ Syntax:
+       set clabel {'<format>'}
+       set noclabel
+       show clabel
+
+ The default for the format string is %8.3g, which gives three decimal places.
+ This may produce poor label alignment if the key is altered from its default
+ configuration.
+
+ The first contour linetype, or only contour linetype when clabel is off, is
+ the surface linetype +1; contour points are the same style as surface points.
+
+ See also `set contour` (*note contour:: ).
+
+
+
+File: gnuplot.info, Node: clip, Prev: clabel, Up: set-show, Next: cntrparam
+
+ `gnuplot` (*note gnuplot:: ) can clip data points and lines that are near the
+ boundaries of a graph.
+
+ Syntax:
+       set clip <clip-type>
+       set noclip <clip-type>
+       show clip
+
+ Three clip types are supported by `gnuplot`: `points` (*note points:: ), one,
+ and two. One, two, or all three clip types may be active for a single graph.
+
+ The `points` clip type forces `gnuplot` to clip (actually, not plot at all)
+ data points that fall within but too close to the boundaries.  This is done
+ so that large symbols used for points will not extend outside the boundary
+ lines.  Without clipping points near the boundaries, the plot may look bad.
+ Adjusting the x and y ranges may give similar results.
+
+ Setting the `one` clip type causes `gnuplot` to draw a line segment which has
+ only one of its two endpoints within the graph.  Only the in-range portion of
+ the line is drawn.  The alternative is to not draw any portion of the line
+ segment.
+
+ Some lines may have both endpoints out of range, but pass through the graph.
+ Setting the `two` clip-type allows the visible portion of these lines to be
+ drawn.
+
+ In no case is a line drawn outside the graph.
+
+ The defaults are `noclip points`, `clip one`, and `noclip two`.
+
+ To check the state of all forms of clipping, use
+       show clip
+
+ For backward compatibility with older versions, the following forms are also
+ permitted:
+       set clip
+       set noclip
+
+ `set clip` is synonymous with `set clip points`; `set noclip` turns off all
+ three types of clipping.
+
+
+File: gnuplot.info, Node: cntrparam, Prev: clip, Up: set-show, Next: contour
+
+ `set cntrparam` controls the generation of contours and their smoothness for
+ a contour plot. `show contour` (*note contour:: ) displays current settings of
+ cntrparam as well as `contour`.
+
+ Syntax:
+       set cntrparam {  {linear | cubicspline | bspline}
+                       { points <n>} { order <n> }
+                       { levels   auto {<n>} | <n>
+                                | discrete <z1> {,<z2>{,<z3>...}}
+                                | incremental <start>, <incr> {,<end>}
+                        }
+                      }
+       show contour
+
+ This command has two functions.  First, it sets the values of z for which
+ contour points are to be determined (by linear interpolation between data
+ points or function isosamples.)  Second, it controls the way contours are
+ drawn between the points determined to be of equal z.  <n> should be an
+ integral constant expression and <z1>, <z2> ... any constant expressions.
+ The parameters are:
+
+ `linear`, `cubicspline`, `bspline`---Controls type of approximation or
+ interpolation.  If `linear`, then straight line segments connect points of
+ equal z magnitude.  If `cubicspline`, then piecewise-linear contours are
+ interpolated between the same equal z points to form somewhat smoother
+ contours, but which may undulate.  If `bspline`, a guaranteed-smoother curve
+ is drawn, which only approximates the position of the points of equal-z.
+
+ `points` (*note points:: )---Eventually all drawings are done with
+ piecewise-linear strokes. This number controls the number of line segments
+ used to approximate the `bspline` or `cubicspline` curve.  Number of
+ cubicspline or bspline segments (strokes) = `points` * number of linear
+ segments.
+
+ `order`---Order of the bspline approximation to be used.  The bigger this
+ order is, the smoother the resulting contour.  (Of course, higher order
+ bspline curves will move further away from the original piecewise linear
+ data.)  This option is relevant for `bspline` mode only.  Allowed values are
+ integers in the range from 2 (linear) to 10.
+
+ `levels`--- Selection of contour levels,  controlled by `auto` (default),
+ `discrete`, `incremental`, and <n>, number of contour levels, limited to
+  MAX_DISCRETE_LEVELS as defined in plot.h (30 is standard.)
+
+ For `auto`, <n> specifies a nominal number of levels; the actual number will
+ be adjusted to give simple labels. If the surface is bounded by zmin and zmax,
+ contours will be generated at integer multiples of dz between zmin and zmax,
+ where dz is 1, 2, or 5 times some power of ten (like the step between two
+ tic marks).
+
+ For `levels discrete`, contours will be generated at z = <z1>, <z2> ... as
+ specified; the number of discrete levels sets the number of contour levels.
+ In `discrete` mode, any `set cntrparms levels <n>` are ignored.
+
+ For `incremental`, contours are generated at values of z beginning at <start>
+ and increasing by <increment>, until the number of contours is reached. <end>
+ is used to determine the number of contour levels, which will be changed by
+ any subsequent `set cntrparam levels <n>`.
+
+ If the command `set cntrparam` is given without any arguments specified,  the
+ defaults are used: linear, 5 points, order 4, 5 auto levels.
+
+ Examples:
+       set cntrparam bspline
+       set cntrparam points 7
+       set cntrparam order 10
+
+ To select levels automatically, 5 if the level increment criteria are met:
+       set cntrparam levels auto 5
+
+ To specify discrete levels at .1, .37, and .9:
+       set cntrparam levels discrete .1,1/exp(1),.9
+
+ To specify levels from 0 to 4 with increment 1:
+       set cntrparam levels incremental  0,1,4
+
+ To set the number of levels to 10 (changing an incremental end or possibly
+ the number of auto levels):
+       set cntrparam levels 10
+
+ To set the start and increment while retaining the number of levels:
+       set cntrparam levels incremental 100,50
+
+ See also `set contour` for control of where the contours are drawn, and `set
+ clabel` for control of the format of the contour labels and linetypes.
+
+
+File: gnuplot.info, Node: contour, Prev: cntrparam, Up: set-show, Next: data 
style
+
+ `set contour` enables contour drawing for surfaces. This option is available
+ for `splot` (*note splot:: ) only.
+
+ Syntax:
+       set contour {base | surface | both}
+       set nocontour
+       show contour
+
+ The three options specify where to draw the contours: `base` draws the
+ contours on the grid base where the x/ytics are placed, `surface`
+ (*note surface:: ) draws the contours on the surfaces themselves, and `both`
+ draws the contours on both the base and the surface.  If no option is
+ provided, the default is `base`.
+
+ See also `set cntrparam` (*note cntrparam:: ) for the parameters that affect
+ the drawing of contours, and `set clabel` (*note clabel:: ) for control of
+ labelling of the contours.
+
+ The surface can be switched off (see `set surface`), giving a contour-only
+ graph.  Though it is possible to use `set size` (*note size:: ) to enlarge the
+ plot to fill the screen, more control over the output format can be obtained
+ by writing the contour information to a file, and rereading it as a 2-d
+ datafile plot:
+
+       set nosurface
+       set contour
+       set cntrparam ...
+       set term table
+       set out 'filename'
+       splot ...
+       set out
+       # contour info now in filename
+       set term <whatever>
+       plot 'filename'
+
+ In order to draw contours, the data should be organized as "grid data".  In
+ such a file all the points for a single y-isoline are listed, then all the
+ points for the next y-isoline, and so on.  A single blank line (a line
+ containing no characters other than blank spaces and a carriage return and/or
+ a line feed) separates one y-isoline from the next.  See also `splot datafile`
+ (*note data-file:: ).
+
+ If contours are desired from non-grid data, `set dgrid3d` (*note dgrid3d:: )
+ can be used to create an appropriate grid.  See `set dgrid3d` for more
+ information.
+
+
+
+File: gnuplot.info, Node: data style, Prev: contour, Up: set-show, Next: 
dgrid3d
+
+ The `set data style` command changes the default plotting style for data
+ plots.
+
+ Syntax:
+       set data style <style-choice>
+       show data style
+
+ See `set style` (*note style:: ) for the choices.  If no choice is given, the
+ choices are listed.  `show data style` shows the current default data plotting
+ style.
+
+
+
+File: gnuplot.info, Node: dgrid3d, Prev: data style, Up: set-show, Next: dummy
+
+ The `set dgrid3d` command enables, and can set parameters for, non-grid
+ to grid data mapping.
+
+ Syntax:
+       set dgrid3d {<row_size>} {,{<col_size>} {,<norm>}}
+       set nodgrid3d
+       show dgrid3d
+
+ By default `dgrid3d` is disabled.  When enabled, 3-d data read from a file
+ are always treated as a scattered data set.  A grid with dimensions derived
+ from a bounding box of the scattered data and size as specified by the
+ row/col_size parameters is created for plotting and contouring.  The grid
+ is equally spaced in x (rows) and in y (columns); the z values are computed
+ as weighted averages of the scattered points' z values.
+
+ The third parameter, norm, controls the weighting:  Each data point is
+ weighted inversely by its distance from the grid point raised to the norm
+ power.  (Actually, the weights are given by the inverse of dx^norm + dy^norm,
+ where dx and dy are the components of the separation of the grid point from
+ each data point.  For some norms that are powers of two, specifically 4, 8,
+ and 16, the computation is optimized by using the Euclidean distance in the
+ weight calculation, (dx^2+dx^2)^norm/2.  However, any non-negative integer
+ can be used.)
+
+ The closer the data point is to a grid point, the more effect it has on
+ that grid point and the larger the value of norm the less effect more
+ distant data points have on that grid point.
+
+ The `dgrid3d` option is a simple low pass filter that converts scattered
+ data to a grid data set.  More sophisticated approaches to this problem
+ exist and should be used to preprocess the data outside `gnuplot`
+ (*note gnuplot:: ) if this simple solution is found inadequate.
+
+ (The z values are found by weighting all data points, not by interpolating
+ between nearby data points;  also edge effects may produce unexpected and/or
+ undesired results.  In some cases, small norm values produce a grid point
+ reflecting the average of distant data points rather than a local average,
+ while large values of norm may produce "steps" with several grid points
+ having the same value as the closest data point, rather than making a smooth
+ transition between adjacent data points.  Some areas of a grid may be filled
+ by extrapolation, to an arbitrary boundary condition.  The variables are
+ not normalized; consequently the units used for x and y will affect the
+ relative weights of points in the x and y directions.)
+
+ Examples:
+       set dgrid3d 10,10,1     # defaults
+       set dgrid3d ,,4
+
+ The first specifies that a grid of size 10 by 10 is to be constructed using
+ a norm value of 1 in the weight computation.  The second only modifies the
+ norm, changing it to 4.
+
+
+
+File: gnuplot.info, Node: dummy, Prev: dgrid3d, Up: set-show, Next: encoding
+
+ The `set dummy` command changes the default dummy variable names.
+
+ Syntax:
+       set dummy {<dummy-var>} {,<dummy-var>}
+       show dummy
+
+ By default, `gnuplot` (*note gnuplot:: ) assumes that the independent, or
+ "dummy", variable for the `plot` (*note plot:: ) command is "t" if in
+ parametric or polar mode, or "x" otherwise. Similarly the independent
+ variables for the `splot` (*note splot:: ) command are "u" and "v" in
+ parametric mode (`splot` cannot be used in polar mode), or "x" and "y"
+ otherwise.
+
+ It may be more convenient to call a dummy variable by a more physically
+ meaningful or conventional name.  For example, when plotting time functions:
+
+       set dummy t
+       plot sin(t), cos(t)
+
+ At least one dummy variable must be set on the command; `set dummy` by itself
+ will generate an error message.
+
+ Examples:
+       set dummy u,v
+       set dummy ,s
+
+ The second example sets the second variable to s.
+
+
+File: gnuplot.info, Node: encoding, Prev: dummy, Up: set-show, Next: format
+
+ The `set encoding` command selects a character encoding.  Valid values are
+ `default`, which tells a terminal to use its default; `iso_8859_1` (known in
+ the PostScript world as `ISO-Latin1`), which is used on many Unix workstations
+ and with MS-Windows; `cp850`, for OS/2; and `cp437`, for MS-DOS.
+
+ Syntax:
+       set encoding {<value>}
+       show encoding
+
+ Note that encoding is not supported by all terminal drivers and that
+ the device must be able to produce the desired non-standard characters.
+
+
+File: gnuplot.info, Node: format, Prev: encoding, Up: set-show, Next: format 
specifiers
+
+ The format of the tic-mark labels can be set with the `set format` command.
+
+ Syntax:
+       set format {<axes>} {"<format-string>"}
+       set format {<axes>} {'<format-string>'}
+       show format
+
+ where <axes> is either `x`, `y`, `z`, `xy`, `x2`, `y2` or nothing (which is
+ the same as `xy`).  The length of the string representing a tic mark (after
+ formatting with 'printf') is restricted to 100 characters.  If the format
+ string is omitted, the format will be returned to the default "%g".  For
+ LaTeX users, the format "$%g$" is often desirable.  If the empty string "" is
+ used, no label will be plotted with each tic, though the tic mark will still
+ be plotted.  To eliminate all tic marks, use `set noxtics` (*note xtics:: ) or
+  `set noytics` (*note ytics:: ).
+
+ Newline (\n) is accepted in the format string.  Use double-quotes rather than
+ single-quotes to enable such interpretation.  See also `syntax`
+ (*note Syntax:: ).
+
+ The default format for both axes is "%g", but other formats such as "%.2f" or
+ "%3.0em" are often desirable.  Anything accepted by 'printf' when given a
+ double precision number, and accepted by the terminal, will work.  Some other
+ options have been added.  If the format string looks like a floating point
+ format, then `gnuplot` (*note gnuplot:: ) tries to construct a reasonable
+ format.
+
+ Characters not preceded by "%" are printed verbatim.  Thus you can include
+ spaces and labels in your format string, such as "%g m", which will put " m"
+ after each number.  If you want "%" itself, double it: "%g %%".
+
+ See also `set xtics` for more information about tic labels.
+
+* Menu:
+
+* format specifiers::
+* time/date specifiers::
+
+
+File: gnuplot.info, Node: format specifiers, Prev: format, Up: format, Next: 
time/date specifiers
+
+ The acceptable formats (if not in time/date mode) are:
+
+       Format       Explanation
+       %f           floating point notation
+       %e or %E     exponential notation; an "e" or "E" before the power
+       %g or %G     the shorter of %e (or %E) and %f
+       %x or %X     hex
+       %o or %O     octal
+       %t           mantissa to base 10
+       %l           mantissa to base of current logscale
+       %s           mantissa to base of current logscale; scientific power
+       %T           power to base 10
+       %L           power to base of current logscale
+       %S           scientific power
+       %c           character replacement for scientific power
+       %P           multiple of pi
+
+ A 'scientific' power is one such that the exponent is a multiple of three.
+ Character replacement of scientific powers (`"%c"`) has been implemented
+ for powers in the range -18 to +18.  For numbers outside of this range the
+ format reverts to exponential.
+
+ Other acceptable modifiers (which come after the "%" but before the format
+ specifier) are "-", which left-justifies the number; "+", which forces all
+ numbers to be explicitly signed; "#", which places a decimal point after
+ floats that have only zeroes following the decimal point; a positive integer,
+ which defines the field width; "0" (the digit, not the letter) immediately
+ preceding the field width, which indicates that leading zeroes are to be used
+ instead of leading blanks; and a decimal point followed by a non-negative
+ integer, which defines the precision (the minimum number of digits of an
+ integer, or the number of digits following the decimal point of a float).
+
+ Some releases of 'printf' may not support all of these modifiers but may also
+ support others; in case of doubt, check the appropriate documentation and
+ then experiment.
+
+ Examples:
+       set format y "%t"; set ytics (5,10)          # "5.0" and "1.0"
+       set format y "%s"; set ytics (500,1000)      # "500" and "1.0"
+       set format y "+-12.3f"; set ytics(12345)     # "+12345.000  "
+       set format y "%.2t*10^%+03T"; set ytic(12345)# "1.23*10^+04"
+       set format y "%s*10^{%S}"; set ytic(12345)   # "12.345*10^{3}"
+       set format y "%s %cg"; set ytic(12345)       # "12.345 kg"
+       set format y "%.0P pi"; set ytic(6.283185)   # "2 pi"
+       set format y "%.0P%%"; set ytic(50)          # "50%"
+
+       set log y 2; set format y '%l'; set ytics (1,2,3)
+       #displays "1.0", "1.0" and "1.5" (since 3 is 1.5 * 2^1)
+
+ There are some problem cases that arise when numbers like 9.999 are printed
+ with a format that requires both rounding and a power.
+
+ If the data type for the axis is time/date, the format string must contain
+ valid codes for the 'strftime' function (outside of `gnuplot`
+ (*note gnuplot:: ), type "man strftime").  See `set timefmt`
+ (*note timefmt:: ) for a list of the allowed input format codes.
+
+
+
+File: gnuplot.info, Node: time/date specifiers, Prev: format specifiers, Up: 
format
+
+ In time/date mode, the acceptable formats are:
+
+       Format       Explanation
+       %a           abbreviated name of day of the week
+       %A           full name of day of the week
+       %b or %h     abbreviated name of the month
+       %B           full name of the month
+       %d           day of the month, 1--31
+       %D           shorthand for "%m/%d/%y"
+       %H or %k     hour, 0--24
+       %I or %l     hour, 0--12
+       %j           day of the year, 1--366
+       %m           month, 1--12
+       %M           minute, 0--60
+       %p           "am" or "pm"
+       %r           shorthand for "%I:%M:%S %p"
+       %R           shorthand for %H:%M"
+       %S           second, 0--60
+       %T           shorthand for "%H:%M:%S"
+       %U           week of the year (week starts on Sunday)
+       %w           day of the week, 0--6 (Sunday = 0)
+       %W           week of the year (week starts on Monday)
+       %y           year, 0-99
+       %Y           year, 4-digit
+
+ Except for the non-numerical formats, these may be preceded by a "0" ("zero",
+ not "oh") to pad the field length with leading zeroes, and a positive digit,
+ to define the minimum field width (which will be overridden if the specified
+ width is not large enough to contain the number).  There is a 24-character
+ limit to the length of the printed text; longer strings will be truncated.
+
+ Examples:
+
+ Suppose the text is "76/12/25 23:11:11".  Then
+       set format x                 # defaults to "12/25/76" \n "23:11"
+       set format x "%A, %d %b %Y"  # "Saturday, 25 Dec 1976"
+       set format x "%r %d"         # "11:11:11 pm 12/25/76"
+
+ Suppose the text is "98/07/06 05:04:03".  Then
+       set format x "%1y/%2m/%3d %01H:%02M:%03S"  # "98/ 7/  6 5:04:003"
+
+
+File: gnuplot.info, Node: function style, Prev: format, Up: set-show, Next: 
functions
+
+ The `set function style` command changes the default plotting style for
+ function plots.
+
+ Syntax:
+       set function style <style-choice>
+       show function style
+
+ See `set style` (*note style:: ) for the choices.  If no choice is given, the
+ choices are listed.  `show function style` shows the current default function
+ plotting style.
+
+
+
+File: gnuplot.info, Node: functions, Prev: function style, Up: set-show, Next: 
grid
+
+ The `show functions` command lists all user-defined functions and their
+ definitions.
+
+ Syntax:
+       show functions
+
+ For information about the definition and usage of functions in `gnuplot`
+ (*note gnuplot:: ), please see `expressions` (*note Expressions:: ).
+
+
+
+File: gnuplot.info, Node: grid, Prev: functions, Up: set-show, Next: hidden3d
+
+ The `set grid` command allows grid lines to be drawn on the plot.
+
+ Syntax:
+       set grid {{no}{m}xtics} {{no}{m}ytics} {{no}{m}ztics}
+                {{no}{m}x2tics} {{no}{m}y2tics}
+                {polar {<angle>}}
+                { {linestyle <major_linestyle>}
+                  | {linetype | lt <major_linetype>}
+                    {linewidth | lw <major_linewidth>}
+                  { , {linestyle | ls <minor_linestyle>}
+                      | {linetype | lt <minor_linetype>}
+                        {linewidth | lw <minor_linewidth>} } }
+       set nogrid
+       show grid
+
+ The grid can be enabled and disabled for the major and/or minor tic
+ marks on any axis, and the linetype and linewidth can be specified
+ for major and minor grid lines, also via a predefined linestyle, as
+ far as the active terminal driver supports this.
+
+ Additionally, a polar grid can be selected for 2-d plots---circles are drawn
+ to intersect the selected tics, and radial lines are drawn at definable
+ intervals.  (The interval is given in degrees or radians ,depending on the
+ `set angles` (*note angles:: ) setting.)  Note that a polar grid is no longer
+ automatically generated in polar mode.
+
+ The pertinent tics must be enabled before `set grid` can draw them; `gnuplot`
+ (*note gnuplot:: ) will quietly ignore instructions to draw grid lines at
+ non-existent tics, but they will appear if the tics are subsequently enabled.
+
+ If no linetype is specified for the minor gridlines, the same linetype as the
+ major gridlines is used.  The default polar angle is 30 degrees.
+
+ Z grid lines are drawn on the back of the plot.  This looks better if a
+ partial box is drawn around the plot---see `set border` (*note border:: ).
+
+
+
+File: gnuplot.info, Node: hidden3d, Prev: grid, Up: set-show, Next: isosamples
+
+ The `set hidden3d` command enables hidden line removal for surface plotting
+ (see `splot` (*note splot:: )).  Some optional features of the underlying
+ algorithm can also be controlled using this command.
+
+ Syntax:
+       set hidden3d {defaults} |
+                    { {{offset <offset>} | {nooffset}}
+                      {trianglepattern <bitpattern>}
+                      {{undefined <level>} | {noundefined}}
+                      {{no}altdiagonal}
+                      {{no}bentover} }
+       set nohidden3d
+       show hidden3d
+
+ In contrast to the usual display in gnuplot, hidden line removal actually
+ treats the given function or data grids as real surfaces that can't be seen
+ through, so parts behind the surface will be hidden by it.  For this to be
+ possible, the surface needs to have 'grid structure' (see `splot datafile`
+ (*note data-file:: ) about this), and it has to be drawn `with lines` or `with
+ linespoints`.
+
+ When `hidden3d` is set, both the hidden portion of the surface and possibly
+ its contours drawn on the base (see `set contour` (*note contour:: )) as well
+ as the grid will be hidden.  Each surface has its hidden parts removed with
+ respect to itself and to other surfaces, if more than one surface is
+ plotted.  Contours drawn on the surface (`set contour surface`) don't
+ work.  Labels and arrows are always visible and are unaffected.  The key is
+ also never hidden by the surface.
+
+ Functions are evaluated at isoline intersections.  The algorithm interpolates
+ linearly between function points or data points when determining the visible
+ line segments.  This means that the appearance of a function may be different
+ when plotted with `hidden3d` than when plotted with `nohidden3d` because in
+ the latter case functions are evaluated at each sample.  Please see `set
+ samples` and `set isosamples` (*note isosamples:: ) for discussion of the
+ difference.
+
+ The algorithm used to remove the hidden parts of the surfaces has some
+ additional features controllable by this command.  Specifying `defaults` will
+ set them all to their default settings, as detailed below.  If `defaults` is
+ not given, only explicitly specified options will be influenced: all others
+ will keep their previous values, so you can turn on/off hidden line removal
+ via `set {no}hidden3d`, without modifying the set of options you chose.
+
+ The first option, `offset`, influences the linestyle used for lines on the
+ 'back' side.  Normally, they are drawn in a linestyle one index number higher
+ than the one used for the front, to make the two sides of the surface
+ distinguishable.  You can specify a different line style offset to add
+ instead of the default 1, by `offset <offset>`.  Option `nooffset` stands for
+ `offset 0`, making the two sides of the surface use the same linestyle.
+
+ Next comes the option `trianglepattern <bitpattern>`.  <bitpattern> must be
+ a number between 0 and 7, interpreted as a bit pattern.  Each bit determines
+ the visibility of one edge of the triangles each surface is split up into.
+ Bit 0 is for the 'horizontal' edges of the grid, Bit 1 for the 'vertical'
+ ones, and Bit 2 for the diagonals that split each cell of the original grid
+ into two triangles.  The default pattern is 3, making all horizontal and
+ vertical lines visible, but not the diagonals.  You may want to choose 7 to
+ see those diagonals as well.
+
+ The `undefined <level>` option lets you decide what the algorithm is to do
+ with data points that are undefined (missing data, or undefined function
+ values), or exceed the given x-, y- or z-ranges.  Such points can either be
+ plotted nevertheless, or taken out of the input data set.  All surface
+ elements touching a point that is taken out will be taken out as well, thus
+ creating a hole in the surface.  If <level> = 3, equivalent to option
+ `noundefined`, no points will be thrown away at all.  This may produce all
+ kinds of problems elsewhere, so you should avoid this.  <level> = 2 will
+ throw away undefined points, but keep the out-of-range ones.  <level> = 1,
+ the default, will get rid of out-of-range points as well.
+
+ By specifying `noaltdiagonal`, you can override the default handling of a
+ special case can occur if `undefined` is active (i.e. <level> is not 3).
+ Each cell of the grid-structured input surface will be divided in two
+ triangles along one of its diagonals.  Normally, all these diagonals have
+ the same orientation relative to the grid.  If exactly one of the four cell
+ corners is excluded by the `undefined` handler, and this is on the usual
+ diagonal, both triangles will be excluded.  However if the default setting
+ of `altdiagonal` is active, the other diagonal will be chosen for this cell
+ instead, minimizing the size of the hole in the surface.
+
+ The `bentover` option controls what happens to another special case, this
+ time in conjunction with the `trianglepattern`.  For rather crumply surfaces,
+ it can happen that the two triangles a surface cell is divided into are seen
+ from opposite sides (i.e. the original quadrangle is 'bent over'), as
+ illustrated in the following ASCII art:
+
+                                                               C----B
+     original quadrangle:  A--B      displayed quadrangle:     |\   |
+       ("set view 0,0")    | /|    ("set view 75,75" perhaps)  | \  |
+                           |/ |                                |  \ |
+                           C--D                                |   \|
+                                                               A    D
+
+ If the diagonal edges of the surface cells aren't generally made visible by
+ bit 2 of the <bitpattern> there, the edge CB above wouldn't be drawn at all,
+ normally, making the resulting display hard to understand.  Therefore, the
+ default option of `bentover` will turn it visible in this case.  If you don't
+ want that, you may choose `nobentover` instead.
+
+
+File: gnuplot.info, Node: isosamples, Prev: hidden3d, Up: set-show, Next: key
+
+ The isoline density (grid) for plotting functions as surfaces may be changed
+ by the `set isosamples` command.
+
+ Syntax:
+       set isosamples <iso_1> {,<iso_2>}
+       show isosamples
+
+ Each function surface plot will have <iso_1> iso-u lines and <iso_2> iso-v
+ lines.  If you only specify <iso_1>, <iso_2> will be set to the same value
+ as <iso_1>.  By default, sampling is set to 10 isolines per u or v axis.
+ A higher sampling rate will produce more accurate plots, but will take longer.
+ These parameters have no effect on data file plotting.
+
+ An isoline is a curve parameterized by one of the surface parameters while
+ the other surface parameter is fixed.  Isolines provide a simple means to
+ display a surface.  By fixing the u parameter of surface s(u,v), the iso-u
+ lines of the form c(v) = s(u0,v) are produced, and by fixing the v parameter,
+ the iso-v lines of the form c(u) = s(u,v0) are produced.
+
+ When a function surface plot is being done without the removal of hidden
+ lines, `set samples` (*note samples:: )  controls the number of points sampled
+ along each isoline;  see `set samples` and `set hidden3d`
+ (*note hidden3d:: ).  The contour algorithm assumes that a function sample
+ occurs at each isoline intersection, so change in `samples` as well as
+ `isosamples` may be desired when changing the resolution of a function
+ surface/contour.
+
+
+
+File: gnuplot.info, Node: key, Prev: isosamples, Up: set-show, Next: label
+
+ The `set key` enables a key (or legend) describing plots on a plot.
+
+ The contents of the key, i.e., the names given to each plotted data set and
+ function and samples of the lines and/or symbols used to represent them, are
+ determined by the `title` (*note title:: ) and  `with` (*note with:: ) options
+ of the {s}s`}`plot` (*note plot:: ) command. Please see `plot title` and `plot
+ with` for more information.
+
+ Syntax:
+       set key {  left | right | top | bottom | outside | below
+                | <position>}
+               {Left | Right} {{no}reverse}
+               {samplen <sample_length>} {spacing <vertical_spacing>}
+               {width <width_increment>}
+               {title "<text>"}
+               {{no}box { {linestyle | ls <line_style>}
+                          | {linetype | lt <line_type>}
+                            {linewidth | lw <line_width>}}}
+       set nokey
+       show key
+
+ By default the key is placed in the upper right corner of the graph.  The
+ keywords `left`, `right`, `top`, `bottom`, `outside` and `below` may be used
+ to place the key in the other corners inside the graph or to the right
+ (outside) or below the graph.  They may be given alone or combined.
+
+ Justification of the labels within the key is controlled by `Left` or `Right`
+ (default is `Right`).  The text and sample can be reversed (`reverse`) and a
+ box can be drawn around the key (`box {...}`) in a specified `linetype`
+ and `linewidth` (*note linewidth:: ), or a user-defined  `linestyle`
+ (*note linestyle:: ). Note that not all terminal drivers support linewidth
+ selection, though.
+
+ The length of the sample line can be controlled by `samplen`.  The sample
+ length is computed as the sum of the tic length and <sample_length> times the
+ character width.  `samplen` also affects the positions of point samples in
+ the key since these are drawn at the midpoint of the sample line, even if it
+ is not drawn.  <sample_length> must be an integer.
+
+ The vertical spacing between lines is controlled by `spacing`.  The spacing
+ is set equal to the product of the pointsize, the vertical tic size, and
+ <vertical_spacing>.  The program will guarantee that the vertical spacing is
+ no smaller than the character height.
+
+ The <width_increment> is a number of character widths to be added to or
+ subtracted from the length of the string.  This is useful only when you are
+ putting a box around the key and you are using control characters in the text.
+ `gnuplot` (*note gnuplot:: ) simply counts the number of characters in the
+ string when computing the box width; this allows you to correct it.
+
+ A title can be put on the key (`title "<text>"`)---see also `syntax`
+ (*note Syntax:: ) for the distinction between text in single- or
+ double-quotes.  The key title uses the same justification as do the plot
+ titles.
+
+ The defaults for `set key` are `right`, `top`, `Right`, `noreverse`, `samplen
+ 4`, `spacing 1.25`, `title ""`, and `nobox`.  The default <linetype> is the
+ same as that used for the plot borders.  Entering `set key` with no options
+ returns the key to its default configuration.
+
+ The <position> can be a simple x,y,z as in previous versions, but these can
+ be preceded by one of four keywords (`first`, `second`, `graph`, `screen`)
+ which selects the coordinate system in which the position is specified.  See
+ `coordinates` (*note Coordinates:: ) for more details.
+
+ The key is drawn as a sequence of lines, with one plot described on each
+ line.  On the right-hand side (or the left-hand side, if `reverse` is
+ selected) of each line is a representation that attempts to mimic the way the
+ curve is plotted.  On the other side of each line is the text description
+ (the line title), obtained from the `plot` command.  The lines are vertically
+ arranged so that an imaginary straight line divides the left- and right-hand
+ sides of the key.  It is the coordinates of the top of this line that are
+ specified with the `set key` command.  In a `plot`, only the x and y
+ coordinates are used to specify the line position.  For a `splot`
+ (*note splot:: ), x, y and z are all used as a 3-d location mapped using the
+ same mapping as the graph itself to form the required 2-d screen position of
+ the imaginary line.
+
+ Some or all of the key may be outside of the graph boundary, although this
+ may interfere with other labels and may cause an error on some devices.  If
+ you use the keywords `outside` or `below`, `gnuplot` makes space for the keys
+ and the graph becomes smaller.  Putting keys outside to the right, they
+ occupy as few columns as possible, and putting them below, as many columns as
+ possible (depending of the length of the labels), thus stealing as little
+ space from the graph as possible.
+
+ When using the TeX or PostScript drivers, or similar drivers where formatting
+ information is embedded in the string, `gnuplot` is unable to calculate
+ correctly the width of the string for key positioning.  If the key is to be
+ positioned at the left, it may be convenient to use the combination  `set key
+ left Left reverse`.  The box and gap in the grid will be the width of the
+ literal string.
+
+ If `splot` is being used to draw contours, the contour labels will be listed
+ in the key.  If the alignment of these labels is poor or a different number
+ of decimal places is desired, the label format can be specified.  See `set
+ clabel` for details.
+
+ Examples:
+
+ This places the key at the default location:
+       set key
+
+ This disables the key:
+       set nokey
+
+ This places a key at coordinates 2,3.5,2 in the default (first) coordinate
+ system:
+       set key 2,3.5,2
+
+ This places the key below the graph:
+       set key below
+
+ This places the key in the bottom left corner, left-justifies the text,
+ gives it a title, and draws a box around it in linetype 3:
+       set key left bottom Left title 'Legend' box 3
+
+
+File: gnuplot.info, Node: label, Prev: key, Up: set-show, Next: linestyle
+
+ Arbitrary labels can be placed on the plot using the `set label` command.
+
+ Syntax:
+       set label {<tag>} {"<label_text>"} {at <position>}
+                 {<justification>} {{no}rotate} {font "<name><,size>"}
+       set nolabel {<tag>}
+       show label
+
+ The <position> is specified by either x,y or x,y,z, and may be preceded by
+ `first`, `second`, `graph`, or `screen` to select the coordinate system.
+ See `coordinates` (*note Coordinates:: ) for details.
+
+ The tag is an integer that is used to identify the label. If no <tag> is
+ given, the lowest unused tag value is assigned automatically.  The tag can be
+ used to delete or modify a specific label.  To change any attribute of an
+ existing label, use the `set label` command with the appropriate tag, and
+ specify the parts of the label to be changed.
+
+ By default, the text is placed flush left against the point x,y,z.  To adjust
+ the way the label is positioned with respect to the point x,y,z, add the
+ parameter <justification>, which may be `left`, `right` or `center`,
+ indicating that the point is to be at the left, right or center of the text.
+ Labels outside the plotted boundaries are permitted but may interfere with
+ axis labels or other text.
+
+ If `rotate` (*note rotate:: ) is given, the label is written vertically (if
+ the terminal can do so, of course).
+
+ If one (or more) axis is timeseries, the appropriate coordinate should be
+ given as a quoted time string according to the `timefmt` (*note timefmt:: )
+ format string.  See `set xdata` (*note xdata:: ) and set timefmt.
+
+ The EEPIC, Imagen, LaTeX, and TPIC drivers allow \\ in a string to specify
+ a newline.
+
+ Examples:
+
+ To set a label at (1,2) to "y=x", use:
+       set label "y=x" at 1,2
+
+ To set a Sigma of size 24, from the Symbol font set, at the center of
+ the graph, use:
+       set label "S" at graph 0.5,0.5 center font "Symbol,24"
+
+ To set a label "y=x^2" with the right of the text at (2,3,4), and tag the
+ label as number 3, use:
+       set label 3 "y=x^2" at 2,3,4 right
+
+ To change the preceding label to center justification, use:
+       set label 3 center
+
+ To delete label number 2, use:
+       set nolabel 2
+
+ To delete all labels, use:
+       set nolabel
+
+ To show all labels (in tag order), use:
+       show label
+
+ To set a label on a graph with a timeseries on the x axis, use, for example:
+       set timefmt "%d/%m/%y,%H:%M"
+       set label "Harvest" at "25/8/93",1
+
+
+File: gnuplot.info, Node: linestyle, Prev: label, Up: set-show, Next: lmargin
+
+ Each terminal has a default set of line and point types, which can be seen
+ by using the command `test` (*note test:: ).  set linestyle defines a set of
+ line types and widths and point types and sizes so that you can refer to them
+ later by an index instead of repeating all the information at each
+ invocation.
+
+ Syntax:
+       set linestyle <index> {linetype | lt <line_type>}
+                             {linewidth | lw <line_width>}
+                             {pointtype | pt <point_type>}
+                             {pointsize | ps <point_size>}
+       set nolinestyle
+       show linestyle
+
+ The line and point types are taken from the default types for the terminal
+ currently in use.  The line width and point size are multipliers for the
+ default width and size (but note that <point_size> here is unaffected by
+ the multiplier given on 'set pointsize').
+
+ The defaults for the line and point types is the index.  The defaults for
+ the width and size are both unity.
+
+ Linestyles created by this mechanism do not replace the default styles;
+ both may be used.
+
+ Not all terminals support the `linewidth` (*note linewidth:: ) and
+  `pointsize` (*note pointsize:: ) features; if not supported, the option will
+ be ignored.
+
+ Note that this feature is not completely implemented; linestyles defined by
+ this mechanism may be used with 'plot', 'splot', 'replot', and 'set arrow',
+ but not by other commands that allow the default index to be used, such as
+ 'set grid'.
+
+ Example:
+ Suppose that the default lines for indices 1, 2, and 3 are red, green, and
+ blue, respectively, and the default point shapes for the same indices are a
+ square, a cross, and a triangle, respectively.  Then
+
+       set linestyle 1 lt 2 lw 2 pt 3 ps 0.5
+
+ defines a new linestyle that is green and twice the default width and a new
+ pointstyle that is a half-sized triangle.  The commands
+
+       set function style lines
+       plot f(x) lt 3, g(x) ls 1
+
+ will create a plot of f(x) using the default blue line and a plot of g(x)
+ using the user-defined wide green line.  Similarly the commands
+
+       set function style linespoints
+       plot p(x) lt 1 pt 3, q(x) ls 1
+
+ will create a plot of f(x) using the default triangles connected by a red
+ line and q(x) using small triangles connected by a green line.
+
+
+File: gnuplot.info, Node: lmargin, Prev: linestyle, Up: set-show, Next: locale
+
+ The command `set lmargin` sets the size of the left margin.  Please see
+ `set margin` (*note margin:: ) for details.
+
+
+
+File: gnuplot.info, Node: locale, Prev: lmargin, Up: set-show, Next: logscale
+
+ The `locale` setting determines the language with which `{x,y,z}{d,m}tics`
+ will write the days and months.
+
+ Syntax:
+       set locale {"<locale>"}
+
+ <locale> may be any language designation acceptable to your installation.
+ See your system documentation for the available options.  The default value
+ is determined from the LANG environment variable.
+
+
+File: gnuplot.info, Node: logscale, Prev: locale, Up: set-show, Next: mapping
+
+ Log scaling may be set on the x, y, z, x2 and/or y2 axes.
+
+ Syntax:
+       set logscale <axes> <base>
+       set nologscale <axes>
+       show logscale
+
+ where <axes> may be any combinations of `x`, `y`, and `z`, in any order, or
+ `x2` or `y2` and where <base> is the base of the log scaling.  If <base> is
+ not given, then 10 is assumed.  If <axes> is not given, then all axes are
+ assumed.  `set nologscale` turns off log scaling for the specified axes.
+
+ Examples:
+
+ To enable log scaling in both x and z axes:
+       set logscale xz
+
+ To enable scaling log base 2 of the y axis:
+       set logscale y 2
+
+ To disable z axis log scaling:
+       set nologscale z
+
+
+File: gnuplot.info, Node: mapping, Prev: logscale, Up: set-show, Next: margin
+
+ If data are provided to `splot` (*note splot:: ) in spherical or cylindrical
+ coordinates, the `set mapping` command should be used to instruct `gnuplot`
+ (*note gnuplot:: ) how to interpret them.
+
+ Syntax:
+       set mapping {cartesian | spherical | cylindrical}
+
+ A cartesian coordinate system is used by default.
+
+ For a spherical coordinate system, the data occupy two or three columns (or
+ `using` (*note using:: ) entries).  The first two are interpreted as the polar
+ and azimuthal angles theta and phi (in the units specified by `set angles`
+ (*note angles:: )).  The radius r is taken from the third column if there is
+ one, or is set to unity if there is no third column.  The mapping is:
+
+       x = r * cos(theta) * cos(phi)
+       y = r * sin(theta) * cos(phi)
+       z = r * sin(phi)
+
+ Note that this is a "geographic" spherical system, rather than a "polar" one.
+
+ For a cylindrical coordinate system, the data again occupy two or three
+ columns.  The first two are interpreted as theta (in the units specified by
+ `set angles`) and z.  The radius is either taken from the third column or set
+ to unity, as in the spherical case.  The mapping is:
+
+       x = r * cos(theta)
+       y = r * sin(theta)
+       z = z
+
+ The effects of `mapping` can be duplicated with the `using` filter on the
+ `splot` command, but `mapping` may be more convenient if many data files are
+ to be processed.  However even if `mapping` is used, `using` may still be
+ necessary if the data in the file are not in the required order.
+
+ `mapping` has no effect on `plot` (*note plot:: ).
+
+
+
+File: gnuplot.info, Node: margin, Prev: mapping, Up: set-show, Next: missing
+
+ Normally the margins of a plot are automatically calculated based on tics
+ and axis labels (and the size of the graph correspondingly adjusted.)  These
+ computed values can be overridden by the `set margin` commands.  `show margin`
+ shows the current settings.
+
+ Syntax:
+       set bmargin {<margin>}
+       set lmargin {<margin>}
+       set rmargin {<margin>}
+       set tmargin {<margin>}
+       show margin
+
+ The units of <margin> are character heights or widths, as appropriate.  A
+ positive value defines the absolute size of the margin.  A negative value
+ (or none) causes `gnuplot` (*note gnuplot:: ) to revert to the computed
+ value.
+
+
+
+File: gnuplot.info, Node: missing, Prev: margin, Up: set-show, Next: multiplot
+
+ The `set missing` command allows you to tell `gnuplot` (*note gnuplot:: ) what
+ character is used in a data file to denote missing data.
+
+ Syntax:
+       set missing {"<character>"}
+       show missing
+
+ Example:
+       set missing "?"
+
+ would mean that, when plotting a file containing
+
+          1 1
+          2 ?
+          3 2
+
+ the middle line would be ignored.
+
+ There is no default character for `missing`.
+
+
+File: gnuplot.info, Node: multiplot, Prev: missing, Up: set-show, Next: mx2tics
+
+ The command `set multiplot` places `gnuplot` (*note gnuplot:: ) in the
+ multiplot mode, in which several plots are placed on the same page, window, or
+ screen.
+
+ Syntax:
+       set multiplot
+       set nomultiplot
+
+ For some terminals, no plot is displayed until the command `set nomultiplot`
+ is given, which causes the entire page to be drawn and then returns `gnuplot`
+ to its normal single-plot mode.  For other terminals, each separate `plot`
+ (*note plot:: ) command produces a plot, but the screen may not be cleared
+ between plots.
+
+ Any labels or arrows that have been defined will be drawn for each plot
+ according to the current size and origin (unless their coordinates are
+ defined in the `screen` system).  Just about everything else that can be
+ `set` (*note set-show:: ) is applied to each plot, too.  If you want something
+ to appear only once on the page, for instance a single time stamp, you'll need
+ to put a `set time`/`set notime` pair around one of the `plot`, `splot`
+ (*note splot:: ) or  `replot` (*note replot:: ) commands within the `set
+ multiplot`/`set nomultiplot` block.
+
+ The commands `set origin` (*note origin:: ) and  `set size` (*note size:: )
+ must be used to correctly position each plot; see `set origin` and `set size`
+ for details of their usage.
+
+ Example:
+       set size 0.7,0.7
+       set origin 0.1,0.1
+       set multiplot
+       set size 0.4,0.4
+       set origin 0.1,0.1
+       plot sin(x)
+       set size 0.2,0.2
+       set origin 0.5,0.5
+       plot cos(x)
+       set nomultiplot
+
+ displays a plot of cos(x) stacked above a plot of sin(x).  Note the initial
+ `set size` and `set origin`.  While these are not always required, their
+ inclusion is recommended.  Some terminal drivers require that bounding box
+ information be available before any plots can be made, and the form given
+ above guarantees that the bounding box will include the entire plot array
+ rather than just the bounding box of the first plot.
+
+ `set size` and `set origin` refer to the entire plotting area used for each
+ plot.  If you want to have the axes themselves line up, you can guarantee
+ that the margins are the same size with the `set margin` (*note margin:: )
+ commands.  See `set margin` for their use.  Note that the margin settings are
+ absolute, in character units, so the appearance of the graph in the remaining
+ space will depend on the screen size of the display device, e.g., perhaps
+ quite different on a video display and a printer.
+
+
+
+File: gnuplot.info, Node: mx2tics, Prev: multiplot, Up: set-show, Next: mxtics
+
+ Minor tic marks along the x2 (top) axis are controlled by `set mx2tics`.
+ Please see `set mxtics` (*note mxtics:: ).
+
+
+
+File: gnuplot.info, Node: mxtics, Prev: mx2tics, Up: set-show, Next: my2tics
+
+ Minor tic marks along the x axis are controlled by `set mxtics`.  They can be
+ turned off with `set nomxtics`.  Similar commands control minor tics along
+ the other axes.
+
+ Syntax:
+       set mxtics {<freq> | default}
+       set nomxtics
+       show mxtics
+
+ The same syntax applies to `mytics` (*note mytics:: ),  `mztics`
+ (*note mztics:: ),  `mx2tics` (*note mx2tics:: ) and  `my2tics`
+ (*note my2tics:: ).
+
+ <freq> is the number of sub-intervals (NOT the number of minor tics) between
+ major tics (ten is the default for a linear axis, so there are nine minor
+ tics between major tics). Selecting `default` will return the number of minor
+ ticks to its default value.
+
+ If the axis is logarithmic, the number of sub-intervals will be set to a
+ reasonable number by default (based upon the length of a decade).  This will
+ be overridden if <freq> is given.  However the usual minor tics (2, 3, ...,
+ 8, 9 between 1 and 10, for example) are obtained by setting <freq> to 10,
+ even though there are but nine sub-intervals.
+
+ Minor tics can be used only with uniformly spaced major tics.  Since major
+ tics can be placed arbitrarily by `set {x|x2|y|y2|z}tics`, minor tics cannot
+ be used if major tics are explicitly `set` (*note set-show:: ).
+
+ By default, minor tics are off for linear axes and on for logarithmic axes.
+ They inherit the settings for `axis|border` and `{no}mirror` specified for
+ the major tics.  Please see `set xtics` (*note xtics:: ) for information about
+ these.
+
+
+
+File: gnuplot.info, Node: my2tics, Prev: mxtics, Up: set-show, Next: mytics
+
+ Minor tic marks along the y2 (right-hand) axis are controlled by `set
+ my2tics`.  Please see `set mxtics` (*note mxtics:: ).
+
+
+
+File: gnuplot.info, Node: mytics, Prev: my2tics, Up: set-show, Next: mztics
+
+ Minor tic marks along the y axis are controlled by `set mytics`.  Please
+ see `set mxtics` (*note mxtics:: ).
+
+
+
+File: gnuplot.info, Node: mztics, Prev: mytics, Up: set-show, Next: offsets
+
+ Minor tic marks along the z axis are controlled by `set mztics`.  Please
+ see `set mxtics` (*note mxtics:: ).
+
+
+
+File: gnuplot.info, Node: offsets, Prev: mztics, Up: set-show, Next: origin
+
+ Offsets provide a mechanism to put a boundary around the data inside of an
+ autoscaled graph.
+
+ Syntax:
+       set offsets <left>, <right>, <top>, <bottom>
+       set nooffsets
+       show offsets
+
+ Each offset may be a constant or an expression.  Each defaults to 0.  Left
+ and right offsets are given in units of the x axis, top and bottom offsets in
+ units of the y axis.  A positive offset expands the graph in the specified
+ direction, e.g., a positive bottom offset makes ymin more negative.  Negative
+ offsets, while permitted, can have unexpected interactions with autoscaling
+ and clipping.
+
+ Offsets are ignored in `splot`s (*note splot:: ).
+
+ Example:
+       set offsets 0, 0, 2, 2
+       plot sin(x)
+
+ This graph of sin(x) will have a y range [-3:3] because the function
+ will be autoscaled to [-1:1] and the vertical offsets are each two.
+
+
+File: gnuplot.info, Node: origin, Prev: offsets, Up: set-show, Next: output
+
+ The `set origin` command is used to specify the origin of a plotting surface
+ (i.e., the graph and its margins) on the screen.  The coordinates are given
+ in the `screen` coordinate system (see `coordinates` (*note Coordinates:: )
+ for information about this system).
+
+ Syntax:
+       set origin <x-origin>,<y-origin>
+
+
+File: gnuplot.info, Node: output, Prev: origin, Up: set-show, Next: parametric
+
+ By default, screens are displayed to the standard output. The `set output`
+ command redirects the display to the specified file or device.
+
+ Syntax:
+       set output {"<filename>"}
+       show output
+
+ The filename must be enclosed in quotes.  If the filename is omitted, any
+ output file opened by a previous invocation of `set output` will be closed
+ and new output will be sent to STDOUT.  (If you give the command `set output
+ "STDOUT"`, your output may be sent to a file named "STDOUT"!  ["May be", not
+ "will be", because some terminals, like `x11` (*note x11:: ), ignore set
+ output.])
+
+ MSDOS users should note that the \ character has special significance in
+ double-quoted strings, so single-quotes should be used for filenames in
+ different directories.
+
+ When both `set terminal` (*note terminal:: ) and set output are used together,
+ it is safest to give `set terminal` first, because some terminals set a flag
+ which is needed in some operating systems.  This would be the case, for
+ example, if the operating system needs to know whether or not a file is to be
+ formatted in order to open it properly.
+
+ On machines with popen functions (Unix), output can be piped through a shell
+ command if the first non-whitespace character of the filename is '|'.
+ For instance,
+
+       set output "|lpr -Plaser filename"
+       set output "|lp -dlaser filename"
+
+ On MSDOS machines, `set output "PRN"` will direct the output to the default
+ printer.  On VMS, output can be sent directly to any spooled device.  It is
+ also possible to send the output to DECnet transparent tasks, which allows
+ some flexibility.
+
+
+File: gnuplot.info, Node: parametric, Prev: output, Up: set-show, Next: 
pointsize
+
+ The `set parametric` command changes the meaning of `plot` (*note plot:: )
+ ((`splot` (*note splot:: )) from normal functions to parametric
+ functions.  The command `set noparametric` restores the plotting style to
+ normal, single-valued expression plotting.
+
+ Syntax:
+       set parametric
+       set noparametric
+       show parametric
+
+ For 2-d plotting, a parametric function is determined by a pair of parametric
+ functions operating on a parameter.  An example of a 2-d parametric function
+ would be `plot sin(t),cos(t)`, which draws a circle (if the aspect ratio is
+ set correctly---see `set size` (*note size:: )).   `gnuplot`
+ (*note gnuplot:: ) will display an error message if both functions are not
+ provided for a parametric `plot`.
+
+ For 3-d plotting, the surface is described as x=f(u,v), y=g(u,v), z=h(u,v).
+ Therefore a triplet of functions is required.  An example of a 3-d parametric
+ function would be `cos(u)*cos(v),cos(u)*sin(v),sin(u)`, which draws a sphere.
+ `gnuplot` will display an error message if all three functions are not
+ provided for a parametric `splot`.
+
+ The total set of possible plots is a superset of the simple f(x) style plots,
+ since the two functions can describe the x and y values to be computed
+ separately.  In fact, plots of the type t,f(t) are equivalent to those
+ produced with f(x) because the x values are computed using the identity
+ function.  Similarly, 3-d plots of the type u,v,f(u,v) are equivalent to
+ f(x,y).
+
+ Note that the order the parametric functions are specified is xfunction,
+ yfunction (and zfunction) and that each operates over the common parametric
+ domain.
+
+ Also, the `set parametric` function implies a new range of values.  Whereas
+ the normal f(x) and f(x,y) style plotting assume an xrange and yrange (and
+ zrange), the parametric mode additionally specifies a trange, urange, and
+ vrange.  These ranges may be set directly with `set trange` (*note trange:: ),
+  `set urange` (*note urange:: ), and `set vrange` (*note vrange:: ), or by
+ specifying the range on the plot or splot commands.  Currently the default
+ range for these parametric variables is [-5:5].  Setting the ranges to
+ something more meaningful is expected.
+
+
+
+File: gnuplot.info, Node: pointsize, Prev: parametric, Up: set-show, Next: 
polar
+
+ The `set pointsize` command scales the size of the points used in plots.
+
+ Syntax:
+       set pointsize <multiplier>
+       show pointsize
+
+ The default is a multiplier of 1.0.  Larger pointsizes may be useful to
+ make points more visible in bitmapped graphics.
+
+ The pointsize of a single plot may be changed on the `plot` (*note plot:: )
+ command.  See `plot with` (*note with:: ) for details.
+
+ Please note that the pointsize setting is not supported by all terminal
+ types.
+
+
+File: gnuplot.info, Node: polar, Prev: pointsize, Up: set-show, Next: rmargin
+
+ The `set polar` command changes the meaning of the plot from rectangular
+ coordinates to polar coordinates.
+
+ Syntax:
+       set polar
+       set nopolar
+       show polar
+
+ There have been changes made to polar mode in version 3.7, so that scripts
+ for `gnuplot` (*note gnuplot:: ) versions 3.5 and earlier will require
+ modification.  The main change is that the dummy variable t is used for the
+ angle so that the x and y ranges can be controlled independently.  Other
+ changes are: 1) tics are no longer put along the zero axes automatically
+ ---use `set xtics axis nomirror`; `set ytics axis nomirror`; 2) the grid, if
+ selected, is not automatically polar ---use `set grid polar`; 3) the grid is
+ not labelled with angles ---use `set label` (*note label:: ) as necessary.
+
+ In polar coordinates, the dummy variable (t) is an angle.  The default range
+ of t is [0:2*pi], or, if degree units have been selected, to [0:360] (see
+ `set angles` (*note angles:: )).
+
+ The command `set nopolar` changes the meaning of the plot back to the default
+ rectangular coordinate system.
+
+ The `set polar` command is not supported for `splot`s (*note splot:: ).  See
+ the  `set mapping` (*note mapping:: ) command for similar functionality for
+ `splot`s.
+
+ While in polar coordinates the meaning of an expression in t is really
+ r = f(t), where t is an angle of rotation.  The trange controls the domain
+ (the angle) of the function, and the x and y ranges control the range of the
+ graph in the x and y directions.  Each of these ranges, as well as the
+ rrange, may be autoscaled or set explicitly.  See `set xrange`
+ (*note xrange:: ) for details of all the `set range` commands.
+
+ Example:
+       set polar
+       plot t*sin(t)
+       plot [-2*pi:2*pi] [-3:3] [-3:3] t*sin(t)
+
+ The first `plot` (*note plot:: ) uses the default polar angular domain of 0 to
+ 2*pi.  The radius and the size of the graph are scaled automatically.  The
+ second `plot` expands the domain, and restricts the size of the graph to
+ [-3:3] in both directions.
+
+ You may want to `set size square` to have `gnuplot` try to make the aspect
+ ratio equal to unity, so that circles look circular.
+
+
+File: gnuplot.info, Node: rmargin, Prev: polar, Up: set-show, Next: rrange
+
+ The command `set rmargin` sets the size of the right margin.  Please see
+ `set margin` (*note margin:: ) for details.
+
+
+
+File: gnuplot.info, Node: rrange, Prev: rmargin, Up: set-show, Next: samples
+
+ The `set rrange` command sets the range of the radial coordinate for a
+ graph in polar mode.  Please see `set xrange` (*note xrange:: ) for details.
+
+
+
+File: gnuplot.info, Node: samples, Prev: rrange, Up: set-show, Next: size
+
+ The sampling rate of functions, or for interpolating data, may be changed
+ by the `set samples` command.
+
+ Syntax:
+       set samples <samples_1> {,<samples_2>}
+       show samples
+
+ By default, sampling is set to 100 points.  A higher sampling rate will
+ produce more accurate plots, but will take longer.  This parameter has no
+ effect on data file plotting unless one of the interpolation/approximation
+ options is used.  See `plot smooth` (*note smooth:: ) re 2-d data and  `set
+ cntrparam` (*note cntrparam:: ) and `set dgrid3d` (*note dgrid3d:: ) re 3-d
+ data.
+
+ When a 2-d graph is being done, only the value of <samples_1> is relevant.
+
+ When a surface plot is being done without the removal of hidden lines, the
+ value of samples specifies the number of samples that are to be evaluated for
+ the isolines.  Each iso-v line will have <sample_1> samples and each iso-u
+ line will have <sample_2> samples.  If you only specify <samples_1>,
+ <samples_2> will be set to the same value as <samples_1>.  See also `set
+ isosamples`.
+
+
+File: gnuplot.info, Node: size, Prev: samples, Up: set-show, Next: style
+
+ The `set size` command scales the displayed size of the plot.
+
+ Syntax:
+       set size {{no}square | ratio <r> | noratio} {<xscale>,<yscale>}
+       show size
+
+ The <xscale> and <yscale> values are the scaling factors for the size of the
+ plot, which includes the graph and the margins.
+
+ `ratio` causes `gnuplot` (*note gnuplot:: ) to try to create a graph with an
+ aspect ratio of <r> (the ratio of the y-axis length to the x-axis length)
+ within the portion of the plot specified by <xscale> and <yscale>.
+
+ The meaning of a negative value for <r> is different.  If <r>=-1, gnuplot
+ tries to set the scales so that the unit has the same length on both the x
+ and y axes (suitable for geographical data, for instance).  If <r>=-2, the
+ unit on y has twice the length of the unit on x, and so on.
+
+ The success of `gnuplot` in producing the requested aspect ratio depends on
+ the terminal selected.  The graph area will be the largest rectangle of
+ aspect ratio <r> that will fit into the specified portion of the output
+ (leaving adequate margins, of course).
+
+ `square` is a synonym for `ratio 1`.
+
+ Both `noratio` and `nosquare` return the graph to the default aspect ratio
+ of the terminal, but do not return <xscale> or <yscale> to their default
+ values (1.0).
+
+ `ratio` and `square` have no effect on 3-d plots.
+
+ `set size` is relative to the default size, which differs from terminal to
+ terminal.  Since `gnuplot` fills as much of the available plotting area as
+ possible by default, it is safer to use `set size` to decrease the size of
+ a plot than to increase it.  See `set terminal` (*note terminal:: ) for the
+ default sizes.
+
+ On some terminals, changing the size of the plot will result in text being
+ misplaced.
+
+ Examples:
+
+ To set the size to normal size use:
+       set size 1,1
+
+ To make the graph half size and square use:
+       set size square 0.5,0.5
+
+ To make the graph twice as high as wide use:
+       set size ratio 2
+
+
+
+File: gnuplot.info, Node: style, Prev: size, Up: set-show, Next: boxerrorbars
+
+ Default styles are chosen with the `set function style`
+ (*note function style:: ) and  `set data style` (*note data style:: )
+ commands.  See `plot with` (*note with:: ) for information about how to
+ override the default plotting style for individual functions and data sets.
+
+ Syntax:
+       set function style <style>
+       set data style <style>
+       show function style
+       show data style
+
+ The types used for all line and point styles (i.e., solid, dash-dot, color,
+ etc. for lines; circles, squares, crosses, etc. for points) will be either
+ those specified on the `plot` (*note plot:: ) or  `splot` (*note splot:: )
+ command or will be chosen sequentially from the types available to the
+ terminal in use.  Use the command `test` (*note test:: ) to see what is
+ available.
+
+ None of the styles requiring more than two columns of information (e.g.,
+ `errorbars` (*note errorbars:: )) can be used with splots or function
+ plots.  Neither ther `boxes` (*note boxes:: ) nor any of the `steps`
+ (*note steps:: ) styles can be used with splots.  If an inappropriate style is
+ specified, it will be changed to `points` (*note points:: ).
+
+ For 2-d data with more than two columns, `gnuplot` (*note gnuplot:: ) is picky
+ about the allowed `errorbar` styles.  The `using` (*note using:: ) option on
+ the plot command can be used to set up the correct columns for the style you
+ want.  (In this discussion, "column" will be used to refer both to a column in
+ the data file and an entry in the `using` list.)
+
+ For three columns, only `xerrorbars` (*note xerrorbars:: ),  `yerrorbars`
+ (*note yerrorbars:: ) (or errorbars), boxes, and `boxerrorbars`
+ (*note boxerrorbars:: ) are allowed.  If another plot style is used, the
+ style will be changed to `yerrorbars`.  The `boxerrorbars` style will
+ calculate the boxwidth automatically.
+
+ For four columns, only `xerrorbars`, `yerrorbars` (or `errorbars`),
+ `xyerrorbars` (*note xyerrorbars:: ),  `boxxyerrorbars`
+ (*note boxxyerrorbars:: ), and boxerrorbars are allowed.  An illegal style
+ will be changed to `yerrorbars`.
+
+ Five-column data allow only the `boxerrorbars`, `financebars`
+ (*note financebars:: ), and `candlesticks` (*note candlesticks:: )
+ styles.  (The last two of these are primarily used for plots of financial
+ prices.)  An illegal style will be changed to `boxerrorbars` before plotting.
+
+ Six- and seven-column data only allow the `xyerrorbars` and `boxxyerrorbars`
+ styles.  Illegal styles will be changed to `xyerrorbars` before plotting.
+
+ For more information about error bars, please see `plot errorbars`.
+
+* Menu:
+
+* boxerrorbars::
+* boxes::
+* boxxyerrorbars::
+* candlesticks::
+* dots::
+* financebars::
+* fsteps::
+* histeps::
+* impulses::
+* lines::
+* linespoints::
+* points::
+* steps::
+* vector::
+* xerrorbars::
+* xyerrorbars::
+* yerrorbars::
+
+
+File: gnuplot.info, Node: boxerrorbars, Prev: style, Up: style, Next: boxes
+
+ The `boxerrorbars` style is only relevant to 2-d data plotting.  It is a
+ combination of the `boxes` (*note boxes:: ) and  `yerrorbars`
+ (*note yerrorbars:: ) styles.  The boxwidth will come from the fourth column
+ if the y errors are in the form of "ydelta" and the boxwidth was not
+ previously set equal to -2.0 (`set boxwidth -2.0`) or from the fifth column if
+ the y errors are in the form of "ylow yhigh".  The special case  `boxwidth =
+ -2.0` is for four-column data with y errors in the form "ylow yhigh".  In this
+ case the boxwidth will be calculated so that each box touches the adjacent
+ boxes.  The width will also be calculated in cases where three-column data are
+ used.
+
+ The box height is determined from the y error in the same way as it is for
+ the `yerrorbars` style---either from y-ydelta to y+ydelta or from ylow to
+ yhigh, depending on how many data columns are provided.
+
+
+File: gnuplot.info, Node: boxes, Prev: boxerrorbars, Up: style, Next: 
boxxyerrorbars
+
+ The `boxes` style is only relevant to 2-d plotting.  It draws a box centered
+ about the given x coordinate from the x axis (not the graph border) to the
+ given y coordinate.  The width of the box is obtained in one of three ways.
+ If it is a data plot and the data file has a third column, this will be used
+ to set the width of the box.  If not, if a width has been set using the `set
+ boxwidth` command, this will be used.  If neither of these is available, the
+ width of each box will be calculated automatically so that it touches the
+ adjacent boxes.
+
+
+File: gnuplot.info, Node: boxxyerrorbars, Prev: boxes, Up: style, Next: 
candlesticks
+
+ The `boxxyerrorbars` style is only relevant to 2-d data plotting.  It is a
+ combination of the `boxes` (*note boxes:: ) and  `xyerrorbars`
+ (*note xyerrorbars:: ) styles.
+
+ The box width and height are determined from the x and y errors in the same
+ way as they are for the `xyerrorbars` style---either from xlow to xhigh and
+ from ylow to yhigh, or from x-xdelta to x+xdelta and from y-ydelta to
+ y+ydelta , depending on how many data columns are provided.
+
+
+File: gnuplot.info, Node: candlesticks, Prev: boxxyerrorbars, Up: style, Next: 
dots
+
+ The `candlesticks` style is only relevant for 2-d data plotting of financial
+ data.  Five columns of data are required; in order, these should be the x
+ coordinate (most likely a date) and the opening, low, high, and closing
+ prices.  The symbol is an open rectangle, centered horizontally at the x
+ coordinate and limited vertically by the opening and closing prices.  A
+ vertical line segment at the x coordinate extends up from the top of the
+ rectangle to the high price and another down to the low.  The width of the
+ rectangle may be changed by `set bar` (*note bar:: ).  The symbol will be
+ unchanged if the low and high prices are interchanged or if the opening and
+ closing prices are interchanged.  See `set bar` and `financebars`
+ (*note financebars:: ).
+
+
+
+File: gnuplot.info, Node: dots, Prev: candlesticks, Up: style, Next: 
financebars
+
+ The `dots` style plots a tiny dot at each point; this is useful for scatter
+ plots with many points.
+
+
+File: gnuplot.info, Node: financebars, Prev: dots, Up: style, Next: fsteps
+
+ The `financebars` style is only relevant for 2-d data plotting of financial
+ data.  Five columns of data are required; in order, these should be the x
+ coordinate (most likely a date) and the opening, low, high, and closing
+ prices.  The symbol is a vertical line segment, located horizontally at the x
+ coordinate and limited vertically by the high and low prices.  A horizontal
+ tic on the left marks the opening price and one on the right marks the
+ closing price.  The length of these tics may be changed by `set bar`
+ (*note bar:: ).  The symbol will be unchanged if the high and low prices are
+ interchanged.  See `set bar` and `candlesticks` (*note candlesticks:: ).
+
+
+
+File: gnuplot.info, Node: fsteps, Prev: financebars, Up: style, Next: histeps
+
+ The `fsteps` style is only relevant to 2-d plotting.  It connects consecutive
+ points with two line segments: the first from (x1,y1) to (x1,y2) and the
+ second from (x1,y2) to (x2,y2).
+
+
+File: gnuplot.info, Node: histeps, Prev: fsteps, Up: style, Next: impulses
+
+ The `histeps` style is only relevant to 2-d plotting.  It is intended for
+ plotting histograms.  Y-values are assumed to be centered at the x-values;
+ the point at x1 is represented as a horizontal line from ((x0+x1)/2,y1) to
+ ((x1+x2)/2,y1).  The lines representing the end points are extended so that
+ the step is centered on at x.  Adjacent points are connected by a vertical
+ line at their average x, that is, from ((x1+x2)/2,y1) to ((x1+x2)/2,y2).
+
+ If `autoscale` (*note autoscale:: ) is in effect, it selects the xrange from
+ the data rather than the steps, so the end points will appear only half as
+ wide as the others.
+
+ `histeps` is only a plotting style; `gnuplot` (*note gnuplot:: ) does not have
+ the ability to create bins and determine their population from some data set.
+
+
+
+File: gnuplot.info, Node: impulses, Prev: histeps, Up: style, Next: lines
+
+ The `impulses` style displays a vertical line from the x axis (not the graph
+ border), or from the grid base for `splot` (*note splot:: ), to each point.
+
+
+
+File: gnuplot.info, Node: lines, Prev: impulses, Up: style, Next: linespoints
+
+ The `lines` style connects adjacent points with straight line segments.
+
+
+File: gnuplot.info, Node: linespoints, Prev: lines, Up: style, Next: points
+
+ The `linespoints` style does both `lines` (*note lines:: ) and  `points`
+ (*note points:: ), that is, it draws a small symbol at each point and then
+ connects adjacent points with straight line segments.  The command `set
+ pointsize` (*note pointsize:: ) may be used to change the size of the
+ points.  See `set pointsize` for its usage.
+
+ `linespoints` may be abbreviated `lp`.
+
+
+File: gnuplot.info, Node: points, Prev: linespoints, Up: style, Next: steps
+
+ The `points` style displays a small symbol at each point.  The command `set
+ pointsize` may be used to change the size of the points.  See `set pointsize`
+ (*note pointsize:: ) for its usage.
+
+
+
+File: gnuplot.info, Node: steps, Prev: points, Up: style, Next: vector
+
+ The `steps` style is only relevant to 2-d plotting.  It connects consecutive
+ points with two line segments: the first from (x1,y1) to (x2,y1) and the
+ second from (x2,y1) to (x2,y2).
+
+
+File: gnuplot.info, Node: vector, Prev: steps, Up: style, Next: xerrorbars
+
+ The `vector` style draws a vector from (x,y) to (x+xdelta,y+ydelta).  Thus
+ it requires four columns of data.  It also draws a small arrowhead at the
+ end of the vector.
+
+ The `vector` style is still experimental: it doesn't get clipped properly
+ and other things may also be wrong with it.  Use it at your own risk.
+
+
+File: gnuplot.info, Node: xerrorbars, Prev: vector, Up: style, Next: 
xyerrorbars
+
+ The `xerrorbars` style is only relevant to 2-d data plots.  `xerrorbars` is
+ like `dots` (*note dots:: ), except that a horizontal error bar is also
+ drawn.  At each point (x,y), a line is drawn from (xlow,y) to (xhigh,y) or
+ from (x-xdelta,y) to (x+xdelta,y), depending on how many data columns are
+ provided.  A tic mark is placed at the ends of the error bar (unless `set bar`
+ (*note bar:: ) is used---see set bar` for details).
+
+
+
+File: gnuplot.info, Node: xyerrorbars, Prev: xerrorbars, Up: style, Next: 
yerrorbars
+
+ The `xyerrorbars` style is only relevant to 2-d data plots.  `xyerrorbars` is
+ like `dots` (*note dots:: ), except that horizontal and vertical error bars
+ are also drawn. At each point (x,y), lines are drawn from (x,y-ydelta) to
+ (x,y+ydelta) and from (x-xdelta,y) to (x+xdelta,y) or from (x,ylow) to
+ (x,yhigh) and from (xlow,y) to (xhigh,y), depending upon the number of data
+ columns provided.  A tic mark is placed at the ends of the error bar (unless
+ `set bar` (*note bar:: ) is used---see `set bar` for details).
+
+ If data are provided in an unsupported mixed form, the `using`
+ (*note using:: ) filter on the `plot` (*note plot:: ) command should be used
+ to set up the appropriate form.  For example, if the data are of the form
+ (x,y,xdelta,ylow,yhigh), then you can use
+
+       plot 'data' using 1:2:($1-$3),($1+$3),4,5 with xyerrorbars
+
+
+File: gnuplot.info, Node: yerrorbars, Prev: xyerrorbars, Up: style
+
+ The `yerrorbars` (or `errorbars` (*note errorbars:: )) style is only relevant
+ to 2-d data plots. `yerrorbars` is like `dots` (*note dots:: ), except that a
+ vertical error bar is also drawn. At each point (x,y), a line is drawn from
+ (x,y-ydelta) to (x,y+ydelta) or from (x,ylow) to (x,yhigh), depending on how
+ many data columns are provided. A tic mark is placed at the ends of the error
+ bar (unless `set bar` (*note bar:: ) is used---see `set bar` for details).
+
+
+
+File: gnuplot.info, Node: surface, Prev: style, Up: set-show, Next: terminal
+
+ The command `set surface` controls the display of surfaces by `splot`
+ (*note splot:: ).
+
+ Syntax:
+       set surface
+       set nosurface
+       show surface
+
+ The surface is drawn with the style specifed by `with` (*note with:: ), or
+ else the appropriate style, data or function.
+
+ Whenever `set nosurface` is issued, `splot` will not draw points or lines
+ corresponding to the function or data file points.  Contours may be still be
+ drawn on the surface, depending on the `set contour` (*note contour:: )
+ option. set nosurface; set contour base` is useful for displaying contours on
+ the grid base.  See also `set contour`.
+
+
+
+File: gnuplot.info, Node: terminal, Prev: surface, Up: set-show, Next: linux
+
+ `gnuplot` (*note gnuplot:: ) supports many different graphics devices.  Use
+ set terminal to tell `gnuplot` what kind of output to generate. Use `set
+ output` (*note output:: ) to redirect that output to a file or device.
+
+ Syntax:
+       set terminal {<terminal-type>}
+       show terminal
+
+ If <terminal-type> is omitted, `gnuplot` will list the available terminal
+ types.  <terminal-type> may be abbreviated.
+
+ If both `set terminal` and `set output` are used together, it is safest to
+ give `set terminal` first, because some terminals set a flag which is needed
+ in some operating systems.
+
+ Several terminals have additional options.  For example, see `dumb`
+ (*note dumb:: ), `iris4d`, `hpljii` (*note hpljii:: ) or  `postscript`
+ (*note postscript:: ).
+
+ This document may describe drivers that are not available to you because they
+ were not installed, or it may not describe all the drivers that are available
+ to you, depending on its output format.
+
+* Menu:
+
+* linux::
+* aed767::
+* gpic::
+* regis::
+* tek410x::
+* tek40::
+* xlib::
+* x11::
+* aifm::
+* cgm::
+* corel::
+* dumb::
+* dxf::
+* fig::
+* hp2623a::
+* hp2648::
+* hp500c::
+* hpgl::
+* hpljii::
+* hppj::
+* imagen::
+* mif::
+* pbm::
+* png::
+* postscript::
+* qms::
+* table::
+* tgif::
+* tkcanvas::
+* epson-180dpi::
+* latex::
+* pslatex and pstex::
+* eepic::
+* tpic::
+* pstricks::
+* texdraw::
+* mf::
+
+
+File: gnuplot.info, Node: linux, Prev: terminal, Up: terminal, Next: aed767
+
+ The `linux` driver has no additional options to specify.  It looks at the
+ environment variable GSVGAMODE for the default mode; if not set, it uses
+ 1024x768x256 as default mode or, if that is not possible, 640x480x16
+ (standard VGA).
+
+
+File: gnuplot.info, Node: aed767, Prev: linux, Up: terminal, Next: gpic
+
+ The `aed512` and `aed767` terminal drivers support AED graphics terminals.
+ The two drivers differ only in their horizontal ranges, which are 512 and
+ 768 pixels, respectively.  Their vertical range is 575 pixels.  There are
+ no options for these drivers.
+
+
+File: gnuplot.info, Node: gpic, Prev: aed767, Up: terminal, Next: regis
+
+ The `gpic` terminal driver generates GPIC graphs in the Free Software
+ Foundations's "groff" package.  The default size is 5 x 3 inches.  The only
+ option is the origin, which defaults to (0,0).
+
+ Syntax:
+       set terminal gpic {<x> <y>}
+
+ where `x` and `y` are in inches.
+
+ A simple graph can be formatted using
+
+       groff -p -mpic -Tps file.pic > file.ps.
+
+ The output from pic can be pipe-lined into eqn, so it is possible to put
+ complex functions in a graph with the `set label` (*note label:: ) and set
+ {x/y}label commands.  For instance,
+
+       set ylab '@space 0 int from 0 to x alpha ( t ) roman d t@'
+
+ will label the y axis with a nice integral if formatted with the command:
+
+       gpic filename.pic | geqn -d@@ -Tps | groff -m[macro-package] -Tps
+           > filename.ps
+
+ Figures made this way can be scaled to fit into a document.  The pic language
+ is easy to understand, so the graphs can be edited by hand if need be.  All
+ co-ordinates in the pic-file produced by `gnuplot` (*note gnuplot:: ) are
+ given as x+gnuplotx and y+gnuploty.  By default x and y are given the value
+ 0.  If this line is removed with an editor in a number of files, one can put
+ several graphs in one figure like this (default size is 5.0x3.0 inches):
+
+       .PS 8.0
+       x=0;y=3
+       copy "figa.pic"
+       x=5;y=3
+       copy "figb.pic"
+       x=0;y=0
+       copy "figc.pic"
+       x=5;y=0
+       copy "figd.pic"
+       .PE
+
+ This will produce an 8-inch-wide figure with four graphs in two rows on top
+ of each other.
+
+ One can also achieve the same thing by the command
+
+       set terminal gpic x y
+
+ for example, using
+
+       .PS 6.0
+       copy "trig.pic"
+       .PE
+
+
+File: gnuplot.info, Node: regis, Prev: gpic, Up: terminal, Next: tek410x
+
+ The `regis` terminal device generates output in the REGIS graphics language.
+ It has the option of using 4 (the default) or 16 colors.
+
+ Syntax:
+       set terminal regis {4 | 16}
+
+
+File: gnuplot.info, Node: tek410x, Prev: regis, Up: terminal, Next: tek40
+
+ The `tek410x` terminal driver supports the 410x and 420x family of Tektronix
+ terminals.  It has no options.
+
+
+File: gnuplot.info, Node: tek40, Prev: tek410x, Up: terminal, Next: xlib
+
+ This family of terminal drivers supports a variety of VT-like terminals.
+ `tek40xx` supports Tektronix 4010 and others as well as most TEK emulators;
+ `vttek` supports VT-like tek40xx terminal emulators; `kc-tek40xx` supports
+ MS-DOS Kermit Tek4010 terminal emulators in color: `km-tek40xx` supports them
+ in monochrome; `selanar` supports Selanar graphics; and `bitgraph` supports
+ BBN Bitgraph terminals.  None have any options.
+
+
+File: gnuplot.info, Node: xlib, Prev: tek40, Up: terminal, Next: x11
+
+ The `xlib` terminal driver supports the X11 Windows System.  It generates
+ gnulib_x11 commands.  `set term x11` (*note x11:: ) behaves similarly to set
+ terminal xlib; set output "|gnuplot_x11"`.  `xlib` has no options, but see
+ `x11`.
+
+
+
+File: gnuplot.info, Node: x11, Prev: xlib, Up: terminal, Next: 
command-line_options
+
+ `gnuplot` (*note gnuplot:: ) provides the x11 terminal type for use with X
+ servers.  This terminal type is set automatically at startup if the `DISPLAY`
+ environment variable is set, if the `TERM` environment variable is set to
+ `xterm`, or if the `-display` command line option is used.
+
+ Syntax:
+       set terminal x11 {reset} {<n>}
+
+ Multiple plot windows are supported: `set terminal x11 <n>` directs the
+ output to plot window number n.  If n>0, the terminal number will be
+ appended to the window title and the icon will be labeled `gplt <n>`.
+ The active window may distinguished by a change in cursor (from default
+ to crosshair.)
+
+ Plot windows remain open even when the `gnuplot` driver is changed to a
+ different device.  A plot window can be closed by pressing the letter q
+ while that window has input focus, or by choosing `close` from a window
+ manager menu.  All plot windows can be closed by specifying `reset`
+ (*note reset:: ), which actually terminates the subprocess which maintains the
+ windows (unless `-persist` was specified).
+
+ Plot windows will automatically be closed at the end of the session
+ unless the `-persist` option was given.
+
+ The size or aspect ratio of a plot may be changed by resizing the `gnuplot`
+ window.
+
+ Linewidths and pointsizes may be changed from within `gnuplot` with
+ `set linestyle` (*note linestyle:: ).
+
+ For terminal type `x11`, `gnuplot` accepts (when initialized) the standard
+ X Toolkit options and resources such as geometry, font, and name from the
+ command line arguments or a configuration file.  See the X(1) man page
+ (or its equivalent) for a description of such options.
+
+ A number of other `gnuplot` options are available for the `x11` terminal.
+ These may be specified either as command-line options when `gnuplot` is
+ invoked or as resources in the configuration file "/.Xdefaults".  They are
+ set upon initialization and cannot be altered during a `gnuplot` session.
+
+* Menu:
+
+* command-line_options::
+* monochome_options::
+* color_resources::
+* grayscale_resources::
+* line_resources::
+
+
+File: gnuplot.info, Node: command-line_options, Prev: x11, Up: x11, Next: 
monochome_options
+
+ In addition to the X Toolkit options, the following options may be specified
+ on the command line when starting `gnuplot` (*note gnuplot:: ) or as resources
+ in your ".Xdefaults" file:  `-clear`   requests that the window be cleared
+ momentarily before a             new plot is displayed.  `-gray`    requests
+ grayscale rendering on grayscale or color displays.             (Grayscale
+ displays receive monochrome rendering by default.)  `-mono`    forces
+ monochrome rendering on color displays.  `-persist` plot windows survive after
+ main gnuplot program exits  `-raise`   raise plot window after each plot
+  `-noraise` do not raise plot window after each plot  `-tvtwm`   requests that
+ geometry specifications for position of the             window be made
+ relative to the currently displayed portion             of the virtual root.
+ The options are shown above in their command-line syntax.  When entered as
+ resources in ".Xdefaults", they require a different syntax.
+
+ Example:
+       gnuplot*gray: on
+
+ `gnuplot` also provides a command line option (`-pointsize <v>`) and a
+ resource, `gnuplot*pointsize: <v>`, to control the size of points plotted
+ with the `points` (*note points:: ) plotting style.  The value v is a real
+ number (greater than 0 and less than or equal to ten) used as a scaling factor
+ for point sizes.  For example, `-pointsize 2` uses points twice the default
+ size, and `-pointsize 0.5` uses points half the normal size.
+
+
+
+File: gnuplot.info, Node: monochome_options, Prev: command-line_options, Up: 
x11, Next: color_resources
+
+ For monochrome displays, `gnuplot` (*note gnuplot:: ) does not honor
+ foreground or background colors.  The default is black-on-white.  `-rv` or
+ `gnuplot*reverseVideo: on` requests white-on-black.
+
+
+
+File: gnuplot.info, Node: color_resources, Prev: monochome_options, Up: x11, 
Next: grayscale_resources
+
+ For color displays, `gnuplot` (*note gnuplot:: ) honors the following
+ resources (shown here with their default values) or the greyscale
+ resources.  The values may be color names as listed in the X11 rgb.txt file on
+ your system, hexadecimal RGB color specifications (see X11 documentation), or
+ a color name followed by a comma and an `intensity` value from 0 to 1.  For
+ example, `blue, 0.5` means a half intensity blue.  gnuplot*background:  white
+  gnuplot*textColor:   black  gnuplot*borderColor: black  gnuplot*axisColor:
+   black  gnuplot*line1Color:  red  gnuplot*line2Color:  green
+  gnuplot*line3Color:  blue  gnuplot*line4Color:  magenta  gnuplot*line5Color:
+  cyan  gnuplot*line6Color:  sienna  gnuplot*line7Color:  orange
+  gnuplot*line8Color:  coral
+
+ The command-line syntax for these is, for example,
+
+ Example:
+       gnuplot -background coral
+
+
+
+File: gnuplot.info, Node: grayscale_resources, Prev: color_resources, Up: x11, 
Next: line_resources
+
+ When `-gray` is selected, `gnuplot` (*note gnuplot:: ) honors the following
+ resources for grayscale or color displays (shown here with their default
+ values).  Note that the default background is black.  gnuplot*background:
+ black  gnuplot*textGray:   white  gnuplot*borderGray: gray50
+  gnuplot*axisGray:   gray50  gnuplot*line1Gray:  gray100  gnuplot*line2Gray:
+  gray60  gnuplot*line3Gray:  gray80  gnuplot*line4Gray:  gray40
+  gnuplot*line5Gray:  gray90  gnuplot*line6Gray:  gray50  gnuplot*line7Gray:
+  gray70  gnuplot*line8Gray:  gray30
+
+
+
+File: gnuplot.info, Node: line_resources, Prev: grayscale_resources, Up: x11
+
+ `gnuplot` (*note gnuplot:: ) honors the following resources for setting the
+ width (in pixels) of plot lines (shown here with their default values.)  0 or
+ 1 means a minimal width line of 1 pixel width.  A value of 2 or 3 may improve
+ the appearance of some plots.  gnuplot*borderWidth: 2  gnuplot*axisWidth:   0
+  gnuplot*line1Width:  0  gnuplot*line2Width:  0  gnuplot*line3Width:  0
+  gnuplot*line4Width:  0  gnuplot*line5Width:  0  gnuplot*line6Width:  0
+  gnuplot*line7Width:  0  gnuplot*line8Width:  0
+
+ `gnuplot` honors the following resources for setting the dash style used for
+ plotting lines.  0 means a solid line.  A two-digit number `jk` (`j` and `k`
+ are >= 1  and <= 9) means a dashed line with a repeated pattern of `j` pixels
+ on followed by `k` pixels off.  For example, '16' is a "dotted" line with one
+ pixel on followed by six pixels off.  More elaborate on/off patterns can be
+ specified with a four-digit value.  For example, '4441' is four on, four off,
+ four on, one off.  The default values shown below are for monochrome displays
+ or monochrome rendering on color or grayscale displays.  For color displays,
+ the default for each is 0 (solid line) except for `axisDashes` which defaults
+ to a '16' dotted line.
+  gnuplot*borderDashes:   0
+  gnuplot*axisDashes:    16
+  gnuplot*line1Dashes:    0
+  gnuplot*line2Dashes:   42
+  gnuplot*line3Dashes:   13
+  gnuplot*line4Dashes:   44
+  gnuplot*line5Dashes:   15
+  gnuplot*line6Dashes: 4441
+  gnuplot*line7Dashes:   42
+  gnuplot*line8Dashes:   13
+
+
+File: gnuplot.info, Node: aifm, Prev: x11, Up: terminal, Next: cgm
+
+ Several options may be set in `aifm`---the Adobe Illustrator 3.0+ driver.
+
+ Syntax:
+       set terminal aifm {<color>} {"<fontname>"} {<fontsize>}
+
+ <color> is either `color` or `monochrome`; "<fontname>" is the name of a
+ valid PostScript font; <fontsize> is the size of the font in PostScript
+ points, before scaling by the `set size` (*note size:: ) command.  Selecting
+ default sets all options to their default values: `monochrome`, "Helvetica",
+ and 14pt.
+
+ Since AI does not really support multiple pages, multiple graphs will be
+ drawn directly on top of one another.  However, each graph will be grouped
+ individually, making it easy to separate them inside AI (just pick them up
+ and move them).
+
+ Examples:
+       set term aifm
+       set term aifm 22
+       set size 0.7,1.4; set term aifm color "Times-Roman" 14
+
+
+File: gnuplot.info, Node: cgm, Prev: aifm, Up: terminal, Next: font
+
+ The `cgm` terminal generates a Computer Graphics Metafile.  This file format
+ is a subset of the ANSI X3.122-1986 standard entitled "Computer Graphics -
+ Metafile for the Storage and Transfer of Picture Description Information".
+ Several options may be set in `cgm`.
+
+ Syntax:
+       set terminal cgm {<mode>} {<color>} {<rotation>} {solid | dashed}
+                        {width <plot_width>} {linewidth <line_width>}
+                        {"<font>"} {<fontsize>}
+
+ where <mode> is `landscape`, `portrait`, or `default`;
+ <color> is either `color` or `monochrome`; 
+ <rotation> is either `rotate` (*note rotate:: ) or norotate; `solid`
+ (*note solid:: ) draws all curves with solid lines, overriding any dashed
+ patterns; <plot_width> is the width of the page in points;  <line_width> is
+ the line width in points;  <font> is the name of a font; and  `<fontsize>` is
+ the size of the font in points.
+
+ By default, `cgm` uses rotated text for the Y axis label.
+
+ The first six options can be in any order.  Selecting `default` sets all
+ options to their default values.
+
+ Examples:
+       set terminal cgm landscape color rotate dashed width 432 \
+                      linewidth 1  'Arial Bold' 12       # defaults
+       set terminal cgm 14 linewidth 2  14  # wider lines & larger font
+       set terminal cgm portrait 'Times Roman Italic' 12
+       set terminal cgm color solid    # no pesky dashes!
+
+* Menu:
+
+* font::
+* fontsize::
+* linewidth::
+* rotate::
+* solid::
+* size::
+* width::
+* winword6::
+
+
+File: gnuplot.info, Node: font, Prev: cgm, Up: cgm, Next: fontsize
+
+ The first part of a Computer Graphics Metafile, the metafile description,
+ includes a font table.  In the picture body, a font is designated by an
+ index into this table.  By default, this terminal generates a table with
+ the following fonts:
+       Arial
+       Arial Italic
+       Arial Bold
+       Arial Bold Italic
+       Times Roman
+       Times Roman Italic
+       Times Roman Bold
+       Times Roman Bold Italic
+       Helvetica
+       Roman
+ Case is not distinct, but the modifiers must appear in the above order (that
+ is, not 'Arial Italic Bold').  'Arial Bold' is the default font.
+
+ You may also specify a font name which does not appear in the default font
+ table.  In that case, a new font table is constructed with the specified
+ font as its only entry.  You must ensure that the spelling, capitalization,
+ and spacing of the name are appropriate for the application that will read
+ the CGM file.
+
+
+File: gnuplot.info, Node: fontsize, Prev: font, Up: cgm, Next: linewidth
+
+ Fonts are scaled assuming the page is 6 inches wide.  If the `size`
+ (*note size:: ) command is used to change the aspect ratio of the page or the
+ CGM file is converted to a different width (e.g. it is imported into a
+ document in which the margins are not 6 inches apart), the resulting font
+ sizes will be different. To change the assumed width, use the `width`
+ (*note width:: ) option.
+
+
+
+File: gnuplot.info, Node: linewidth, Prev: fontsize, Up: cgm, Next: rotate
+
+ The `linewidth` option sets the width of lines in pt.  The default width is
+ 1 pt.  Scaling is affected by the actual width of the page, as discussed
+ under the `fontsize` (*note fontsize:: ) and  `width` (*note width:: )
+ options
+
+
+
+File: gnuplot.info, Node: rotate, Prev: linewidth, Up: cgm, Next: solid
+
+ The `norotate` option may be used to disable text rotation.  For example,
+ the CGM input filter for Word for Windows 6.0c can accept rotated text, but
+ the DRAW editor within Word cannot.  If you edit a graph (for example, to
+ label a curve), all rotated text is restored to horizontal.  The Y axis
+ label will then extend beyond the clip boundary.  With `norotate`, the Y
+ axis label starts in a less attractive location, but the page can be edited
+ without damage.  The `rotate` option confirms the default behavior.
+
+
+File: gnuplot.info, Node: solid, Prev: rotate, Up: cgm, Next: size
+
+ The `solid` option may be used to disable dashed line styles in the
+ plots.  This is useful when color is enabled and the dashing of the lines
+ detracts from the appearance of the plot. The `dashed` option confirms the
+ default behavior, which gives a different dash pattern to each curve.
+
+
+File: gnuplot.info, Node: size, Prev: solid, Up: cgm, Next: width
+
+ Default size of a CGM page is 32599 units wide and 23457 units high for
+ landscape, or 23457 units wide by 32599 units high for portrait.
+
+
+File: gnuplot.info, Node: width, Prev: size, Up: cgm, Next: winword6
+
+ All distances in the CGM file are in abstract units.  The application that
+ reads the file determines the size of the final page.  By default, the width
+ of the final page is assumed to be 6 inches (15.24 cm).  This distance is
+ used to calculate the correct font size, and may be changed with the `width`
+ option.  The keyword should be followed by the width in points.  (Here, a
+ point is 1/72 inch, as in PostScript.  This unit is known as a "big point"
+ in TeX.)  `gnuplot` (*note gnuplot:: ) arithmetic can be used to convert from
+ other units, as follows:       set terminal cgm width 432            #
+ default       set terminal cgm width 6*72           # same as above       set
+ terminal cgm width 10/2.54*72     # 10 cm wide
+
+
+
+File: gnuplot.info, Node: winword6, Prev: width, Up: cgm
+
+ The default font table was chosen to match, where possible, the default font
+ assignments made by the Computer Graphics Metafile input filter for
+ Microsoft Word 6.0c, although the filter makes available only 'Arial' and
+ 'Times Roman' fonts and their bold and/or italic variants.  Other fonts such
+ as 'Helvetica' and 'Roman' are not available.  If the CGM file includes a
+ font table, the filter mostly ignores it.  However, it changes certain font
+ assignments so that they disagree with the table.  As a workaround, the
+ `winword6` option deletes the font table from the CGM file.  In this case,
+ the filter makes predictable font assignments.  'Arial Bold' is correctly
+ assigned even with the font table present, which is one reason it was chosen
+ as the default.
+
+ `winword6` disables the color tables for a similar reason---with the color
+ table included, Microsoft Word displays black for color 7.
+
+ Linewidths and pointsizes may be changed with `set linestyle`
+ (*note linestyle:: ).
+
+
+
+File: gnuplot.info, Node: corel, Prev: cgm, Up: terminal, Next: dumb
+
+ The `corel` terminal driver supports CorelDraw.
+
+ Syntax:
+       set terminal corel {  default
+                           | {monochrome | color
+                                {<fontname> {"<fontsize>" 
+                                   {<xsize> <ysize> {<linewidth> }}}}}
+
+ where the fontsize and linewidth are specified in points and the sizes in
+ inches.  The defaults are monochrome, "SwitzerlandLight", 22, 8.2, 10 and 1.2.
+
+
+File: gnuplot.info, Node: dumb, Prev: corel, Up: terminal, Next: dxf
+
+ The `dumb` terminal driver has an optional size specification and trailing
+ linefeed control.
+
+ Syntax:
+       set terminal dumb {[no]feed} {<xsize> <ysize>}
+
+ where <xsize> and <ysize> set the size of the dumb terminals. Default is
+ 79 by 24. The last newline is printed only if `feed` is enabled.
+
+ Examples:
+       set term dumb nofeed
+       set term dumb 79 49 # VGA screen---why would anyone do that?
+
+
+File: gnuplot.info, Node: dxf, Prev: dumb, Up: terminal, Next: fig
+
+ The `dxf` terminal driver creates pictures that can be imported into AutoCad
+ (Release 10.x).  It has no options of its own, but some features of its plots
+ may be modified by other means.  The default size is 120x80 AutoCad units,
+ which can be changed by `set size` (*note size:: ).  dxf uses seven colors
+ (white, red, yellow, green, cyan, blue and magenta), which can be changed only
+ by modifying the source file.  If a black-and-white plotting device is used,
+ the colors are mapped to differing line thicknesses.  See the description of
+ the AutoCad print/plot command.
+
+
+
+File: gnuplot.info, Node: fig, Prev: dxf, Up: terminal, Next: hp2623a
+
+ The `fig` terminal device generates output in the Fig graphics language.
+
+ Syntax:
+       set terminal fig {monochrome | color} {small | big}
+                        {pointsmax <max_points>}
+                        {landscape | portrait}
+                        {metric | inches}
+                        {fontsize <fsize>}
+                        {size <xsize> <ysize>}
+                        {thickness <units>}
+                        {depth <layer>}
+
+ `monochrome` and `color` determine whether the picture is black-and-white or
+ `color`.  `small` and `big` produce a 5x3 or 8x5 inch graph in the default
+ `landscape` mode and 3x5 or 5x8 inches in `portrait` mode.  <max_points>
+ sets the maximum number of points per polyline.  Default units for editing
+ with "xfig" may be `metric` or `inches`.  `fontsize` (*note fontsize:: ) sets
+ the size of the text font to <fsize> points.  `size` (*note size:: ) sets
+ (overrides) the size of the drawing area to <xsize>*<ysize> in units of inches
+ or centimeters depending on the `inches` or `metric` setting in
+ effect.  `depth` sets the default depth layer for all lines and text.  The
+ default depth is 10 to leave room for adding material with "xfig" on top of
+ the plot.
+
+ `thickness` sets the default line thickness, which is 1 if not specified.
+ Overriding the thickness can be achieved by adding a multiple of 100 to the
+ to the `linetype` value for a `plot` (*note plot:: ) command.  In a similar
+ way the depth of plot elements (with respect to the default depth) can be
+ controlled by adding a multiple of 1000 to <linetype>.  The depth is then
+ <layer> + <linetype>/1000 and the thickness is (<linetype>%1000)/100 or, if
+ that is zero, the default line thickness.
+
+ Additional point-plot symbols are also available with the `fig` driver. The
+ symbols can be used through `pointtype` values % 100 above 50, with different
+ fill intensities controlled by <pointtype> % 5 and outlines in black (for
+ <pointtype> % 10 < 5) or in the current color.  Available symbols are
+         50 - 59:  circles
+         60 - 69:  squares
+         70 - 79:  diamonds
+         80 - 89:  upwards triangles
+         90 - 99:  downwards triangles
+ The size of these symbols is linked to the font size.  The depth of symbols
+ is by default one less than the depth for lines to achieve nice error bars.
+ If <pointtype> is above 1000, the depth is <layer> + <pointtype>/1000-1.  If
+ <pointtype>%1000 is above 100, the fill color is (<pointtype>%1000)/100-1.
+
+ Available fill colors are (from 1 to 9): black, blue, green, cyan, red,
+ magenta, yellow, white and dark blue (in monochrome mode: black for 1 to 6
+ and white for 7 to 9).
+
+ See `plot with` (*note with:: ) for details of <linetype> and <pointtype>.
+
+ The `big` option is a substitute for the `bfig` terminal in earlier versions,
+ which is no longer supported.
+
+ Examples:
+       set terminal fig monochrome small pointsmax 1000  # defaults
+
+       plot 'file.dat' with points linetype 102 pointtype 759
+ would produce circles with a blue outline of width 1 and yellow fill color.
+
+       plot 'file.dat' using 1:2:3 with err linetype 1 pointtype 554
+ would produce errorbars with black lines and circles filled red.  These
+ circles are one layer above the lines (at depth 9 by default).
+
+ To plot the error bars on top of the circles use
+       plot 'file.dat' using 1:2:3 with err linetype 1 pointtype 2554
+
+
+File: gnuplot.info, Node: hp2623a, Prev: fig, Up: terminal, Next: hp2648
+
+ The `hp2623a` terminal driver supports the Hewlett Packard HP2623A.  It has
+ no options.
+
+
+File: gnuplot.info, Node: hp2648, Prev: hp2623a, Up: terminal, Next: hp500c
+
+ The `hp2648` terminal driver supports the Hewlett Packard HP2647 and HP2648.
+ It has no options.
+
+
+File: gnuplot.info, Node: hp500c, Prev: hp2648, Up: terminal, Next: hpgl
+
+ The `hp500c` terminal driver supports the Hewlett Packard HP DeskJet 500c.
+ It has options for resolution and compression.
+
+ Syntax:
+       set terminal hp500c {<res>} {<comp>}
+
+ where `res` can be 75, 100, 150 or 300 dots per inch and `comp` can be "rle",
+ or "tiff".  Any other inputs are replaced by the defaults, which are 75 dpi
+ and no compression.  Rasterization at the higher resolutions may require a
+ large amount of memory.
+
+
+File: gnuplot.info, Node: hpgl, Prev: hp500c, Up: terminal, Next: hpljii
+
+ The `hpgl` driver produces HPGL output for devices like the HP7475A plotter.
+ There are two options which can be set---the number of pens and "eject", which
+ tells the plotter to eject a page when done.  The default is to use 6 pens
+ and not to eject the page when done.
+
+ The international character sets ISO-8859-1 and CP850 are recognized via
+ `set encoding iso_8859_1` or `set encoding cp850` (see `set encoding`
+ (*note encoding:: ) for details).
+
+ Syntax:
+       set terminal hpgl {<number_of_pens>} {eject}
+
+ The selection
+
+       set terminal hpgl 8 eject
+
+ is equivalent to the previous `hp7550` terminal, and the selection
+
+       set terminal hpgl 4
+
+ is equivalent to the previous `hp7580b` terminal.
+
+ The `pcl5` driver supports the Hewlett-Packard Laserjet III.  It actually uses
+ HPGL-2, but there is a name conflict among the terminal devices.  It has
+ several options
+
+ Syntax:
+       set terminal pcl5 {<mode>} {<font>} {<fontsize>}
+
+ where <mode> is `landscape`, or `portrait`, <font> is `stick`, `univers`, or
+ `cg_times`, and <fontsize> is the size in points.
+
+ With `pcl5` international characters are handled by the printer; you just put
+ the appropriate 8-bit character codes into the text strings.  You don't need
+ to bother with `set encoding`.
+
+ HPGL graphics can be imported by many software packages.
+
+
+File: gnuplot.info, Node: hpljii, Prev: hpgl, Up: terminal, Next: hppj
+
+ The `hpljii` terminal driver supports the HP Laserjet Series II printer.  The
+ `hpdj` driver supports the HP DeskJet 500 printer.  These drivers allow a
+ choice of resolutions.
+
+ Syntax:
+       set terminal hpljii | hpdj {<res>}
+
+ where `res` may be 75, 100, 150 or 300 dots per inch; the default is 75.
+ Rasterization at the higher resolutions may require a large amount of memory.
+
+ The `hp500c` (*note hp500c:: ) terminal is similar to hpdj; hp500c
+ additionally supports color and compression.
+
+
+
+File: gnuplot.info, Node: hppj, Prev: hpljii, Up: terminal, Next: imagen
+
+ The `hppj` terminal driver supports the HP PaintJet and HP3630 printers.  The
+ only option is the choice of font.
+
+ Syntax:
+       set terminal hppj {FNT5X9 | FNT9X17 | FNT13X25}
+
+ with the middle-sized font (FNT9X17) being the default.
+
+
+File: gnuplot.info, Node: imagen, Prev: hppj, Up: terminal, Next: mif
+
+ The `imagen` terminal driver supports Imagen laser printers.  It is capable
+ of placing multiple graphs on a single page.
+
+ Syntax:
+       set terminal imagen {<fontsize>} {portrait | landscape}
+                           {[<horiz>,<vert>]}
+
+ where `fontsize` (*note fontsize:: ) defaults to 12 points and the layout
+ defaults to landscape. `<horiz>` and `<vert>` are the number of graphs in the
+ horizontal and vertical directions; these default to unity.
+
+ Example:
+       set terminal imagen portrait [2,3]
+
+ puts six graphs on the page in three rows of two in portrait orientation.
+
+
+File: gnuplot.info, Node: mif, Prev: imagen, Up: terminal, Next: pbm
+
+ The `mif` terminal driver produces Frame Maker MIF format version 3.00.  It
+ plots in MIF Frames with the size 15*10 cm, and plot primitives with the same
+ pen will be grouped in the same MIF group.  Plot primitives in a `gnuplot`
+ (*note gnuplot:: ) page will be plotted in a MIF Frame, and several MIF Frames
+ are collected in one large MIF Frame.  The MIF font used for text is "Times".
+
+ Several options may be set in the MIF 3.00 driver.
+
+ Syntax:
+       set terminal mif {colour | monochrome} {polyline | vectors}
+                        {help | ?}
+
+ `colour` plots lines with line types >= 0 in colour (MIF sep. 2--7) and
+ `monochrome` plots all line types in black (MIF sep. 0).
+ `polyline` plots curves as continuous curves and `vectors` plots curves as
+ collections of vectors.
+ `help` (*note help:: ) and ? print online help on standard error output---both
+ print a short description of the usage; `help` also lists the options;
+
+ Examples:
+       set term mif colour polylines    # defaults
+       set term mif                     # defaults
+       set term mif vectors
+       set term mif help
+
+
+File: gnuplot.info, Node: pbm, Prev: mif, Up: terminal, Next: png
+
+ Several options may be set in the `pbm` terminal---the driver for PBMplus.
+
+ Syntax:
+       set terminal pbm {<fontsize>} {<mode>}
+
+ where <fontsize> is `small`, `medium`, or `large` and <mode> is `monochrome`,
+ `gray` or `color`.  The default plot size is 640 pixels wide and 480 pixels
+ high; this may be changed by `set size` (*note size:: ).
+
+ The output of the `pbm` driver depends upon <mode>: `monochrome` produces a
+ portable bitmap (one bit per pixel), `gray` a portable graymap (three bits
+ per pixel) and `color` a portable pixmap (color, four bits per pixel).
+
+ The output of this driver can be used with Jef Poskanzer's excellent PBMPLUS
+ package, which provides programs to convert the above PBMPLUS formats to GIF,
+ TIFF, MacPaint, Macintosh PICT, PCX, X11 bitmap and many others.  PBMPLUS may
+ be obtained from ftp.x.org.  The relevant files have names that begin with
+ "netpbm-1mar1994.p1"; they reside in /contrib/utilities.  The package can
+ probably also be obtained from one of the many sites that mirrors ftp.x.org.
+
+ Examples:
+       set terminal pbm small monochrome             # defaults
+       set size 2,2; set terminal pbm color medium
+
+
+File: gnuplot.info, Node: png, Prev: pbm, Up: terminal, Next: postscript
+
+ The `png` terminal driver supports Portable Network Graphics.  To compile it,
+ you will need  the third-party libraries "libpng" and "zlib"; both are
+ available at ftp://ftp.uu.net/graphics/png.  `png` has two options.
+
+ Syntax:
+       set terminal png {small | medium | large}
+                        {monochrome | gray | color}
+
+ The defaults are small (fontsize) and monochrome.
+
+
+File: gnuplot.info, Node: postscript, Prev: png, Up: terminal, Next: enhanced 
postscript
+
+ Several options may be set in the `postscript` driver.
+
+ Syntax:
+       set terminal postscript {<mode>} {enhanced | noenhanced}
+                               {color | monochrome} {solid | dashed}
+                               {<duplexing>}
+                               {"<fontname>"} {<fontsize>}
+
+ where <mode> is `landscape`, `portrait`, `eps` or `default`;
+ `solid` (*note solid:: ) draws all plots with solid lines, overriding any
+ dashed patterns; <duplexing> is `defaultplex`, `simplex` or `duplex`
+ ("duplexing" in PostScript is the ability of the printer to print on both
+ sides of the same page---don't set this if your printer can't do it);
+ `enhanced` activates the "enhanced PostScript" features (subscripts,
+ superscripts and mixed fonts); `"<fontname>"` is the name of a valid
+ PostScript font; and `<fontsize>` is the size of the font in PostScript
+ points.
+
+ `default` mode sets all options to their defaults: `landscape`, `monochrome`,
+ `dashed`, `defaultplex`, `noenhanced`, "Helvetica" and 14pt.
+  Default size of a PostScript plot is 10 inches wide and 7 inches high.
+
+ `eps` mode generates EPS (Encapsulated PostScript) output, which is just
+ regular PostScript with some additional lines that allow the file to be
+ imported into a variety of other applications.  (The added lines are
+ PostScript comment lines, so the file may still be printed by itself.)  To
+ get EPS output, use the `eps` mode and make only one plot per file.  In `eps`
+ mode the whole plot, including the fonts, is reduced to half of the default
+ size.
+
+ Examples:
+       set terminal postscript default       # old postscript
+       set terminal postscript enhanced      # old enhpost
+       set terminal postscript landscape 22  # old psbig
+       set terminal postscript eps 14        # old epsf1
+       set terminal postscript eps 22        # old epsf2
+       set size 0.7,1.4; set term post portrait color "Times-Roman" 14
+
+ Linewidths and pointsizes may be changed with `set linestyle`
+ (*note linestyle:: ).
+
+ The `postscript` driver supports about 70 distinct pointtypes, selectable
+ through the `pointtype` option on `plot` (*note plot:: ) and set linestyle.
+
+ Several possibly useful files about `gnuplot` (*note gnuplot:: )'s PostScript
+ are included in the /docs/ps subdirectory of the `gnuplot` distribution and at
+ the distribution sites.  These are "ps_symbols.gpi" (a `gnuplot` command file
+ that, when executed, creates the file "ps_symbols.ps" which shows all the
+ symbols available through the `postscript` terminal), "ps_guide.ps" (a
+ PostScript file that contains a summary of the enhanced syntax and a page
+ showing what the octal codes produce with text and symbol fonts) and
+ "ps_file.doc" (a text file that contains a discussion of the organization of a
+ PostScript file written by `gnuplot`).
+
+ A PostScript file is editable, so once `gnuplot` has created one, you are
+ free to modify it to your heart's desire.  See the "editing postscript"
+ section for some hints.
+
+* Menu:
+
+* enhanced postscript::
+* editing postscript::
+
+
+File: gnuplot.info, Node: enhanced postscript, Prev: postscript, Up: 
postscript, Next: editing postscript
+
+  Control      Examples        Explanation
+   ^           a^x             superscript
+   _           a_x             subscript
+   @           @x or a@^b_c    phantom box (occupies no width)
+   &           &{space}        inserts space of specified length
+
+ Braces can be used to place multiple-character text where a single character
+ is expected (e.g., 2^{10}).  To change the font and/or size, use the full
+ form:  {/[fontname][=fontsize | *fontscale] text}.  Thus {/Symbol=20 G} is a
+ 20-point GAMMA) and {/*0.75 K} is a K at three-quarters of whatever fontsize
+ is currently in effect.  (The '/' character MUST be the first character after
+ the '{'.)
+
+ If the encoding vector has been changed by `set encoding` (*note encoding:: ),
+ the default encoding vector can be used instead by following the slash with a
+ dash.  This is unnecessary if you use the Symbol font, however---since /Symbol
+ uses its own encoding vector, `gnuplot` (*note gnuplot:: ) will not apply any
+ other encoding vector to it.
+
+ The phantom box is useful for a@^b_c to align superscripts and subscripts
+ but does not work well for overwriting an accent on a letter.  (To do the
+ latter, it is much better to use `set encoding iso_8859_1` to change to the
+ ISO Latin-1 encoding vector, which contains a large variety of letters with
+ accents or other diacritical marks.)  Since the box is non-spacing, it is
+ sensible to put the shorter of the subscript or superscript in the box (that
+ is, after the @).
+
+ Space equal in length to a string can be inserted using the '&' character.
+ Thus
+         'abc&{def}ghi'
+ would produce
+         'abc   ghi'.
+
+ You can access special symbols numerically by specifying \character-code (in
+ octal), e.g., {/Symbol \245} is the symbol for infinity.
+
+ You can escape control characters using \, e.g.,  \\, \{, and so on.
+
+ But be aware that strings in double-quotes are parsed differently than those
+ enclosed in single-quotes.  The major difference is that backslashes may need
+ to be doubled when in double-quoted strings.
+
+ Examples (these are hard to describe in words---try them!):
+       set xlabel 'Time (10^6 {/Symbol m}s)'
+       set title '{/Symbol=18 \362@_{/=9.6 0}^{/=12 x}} \
+                  {/Helvetica e^{-{/Symbol m}^2/2} d}{/Symbol m}'
+
+ The file "ps_guide.ps" in the /docs/ps subdirectory of the `gnuplot` source
+ distribution contains more examples of the enhanced syntax.
+
+
+File: gnuplot.info, Node: editing postscript, Prev: enhanced postscript, Up: 
postscript
+
+ The PostScript language is a very complex language---far too complex to
+ describe in any detail in this document.  Nevertheless there are some things
+ in a PostScript file written by `gnuplot` (*note gnuplot:: ) that can be
+ changed without risk of introducing fatal errors into the file.
+
+ For example, the PostScript statement "/Color true def" (written into the
+ file in response to the command `set terminal postscript color`), may be
+ altered in an obvious way to generate a black-and-white version of a plot.
+ Similarly line colors, text colors, line weights and symbol sizes can also be
+ altered in straight-forward ways.  Text (titles and labels) can be edited to
+ correct misspellings or to change fonts.  Anything can be repositioned, and
+ of course anything can be added or deleted, but modifications such as these
+ may require deeper knowledge of the PostScript language.
+
+ The organization of a PostScript file written by `gnuplot` is discussed in
+ the text file "ps_file.doc" in the /docs/ps subdirectory.
+
+
+File: gnuplot.info, Node: qms, Prev: postscript, Up: terminal, Next: table
+
+ The `qms` terminal driver supports the QMS/QUIC Laser printer, the Talaris
+ 1200 and others.  It has no options.
+
+
+File: gnuplot.info, Node: table, Prev: qms, Up: terminal, Next: tgif
+
+ Instead of producing a graph, the `table` terminal prints out the points on
+ which a graph would be based, i.e., the results of processing the `plot`
+ (*note plot:: ) or `splot` (*note splot:: ) command, in a multicolumn ASCII
+ table of X Y {Z} R values.  The character R takes on one of three values: "i"
+ if the point is in the active range, "o" if it is out-of-range, or "u" if it
+ is undefined.  The data format is determined by the format of the axis labels
+ (see `set format` (*note format:: )).
+
+ For those times when you want the numbers, you can display them on the
+ screen or save them to a file.  This can be useful if you want to generate
+ contours and then save them for further use, perhaps for plotting with
+ `plot`;  see `set contour` (*note contour:: ) for an example.  The same method
+ can be used to save interpolated data (see `set samples` (*note samples:: )
+ and  `set dgrid3d` (*note dgrid3d:: )).
+
+
+
+File: gnuplot.info, Node: tgif, Prev: table, Up: terminal, Next: tkcanvas
+
+ Tgif is an X11-based drawing tool---it has nothing to do with GIF.
+
+ The `tgif` driver supports different pointsizes (with `set pointsize`
+ (*note pointsize:: )), different label fonts and font sizes (e.g. `set label
+ "Hallo" at x,y font "Helvetica,34"`) and multiple graphs on the page.  The
+ proportions of the axes are not changed.
+
+ Syntax:
+       set terminal tgif {portrait | landscape} {<[x,y]>}
+                         {solid | dashed}
+                         {"<fontname>"} {<fontsize>}
+
+ where <[x,y]> specifies the number of graphs in the x and y directions on the
+ page, "<fontname>" is the name of a valid PostScript font, and <fontsize>
+ specifies the size of the PostScript font.  Defaults are `portrait`, `[1,1]`,
+ `dashed`, `"Helvetica"`, and `18`.
+
+ The `solid` (*note solid:: ) option is usually prefered if lines are colored,
+ as they often are in the editor.  Hardcopy will be black-and-white, so
+ `dashed` should be chosen for that.
+
+ Multiplot is implemented in two different ways.
+
+ The first multiplot implementation is the standard gnuplot multiplot feature:
+
+       set terminal tgif
+       set output "file.obj"
+       set multiplot
+       set origin x01,y01
+       set size  xs,ys
+       plot ...
+            ...
+       set origin x02,y02
+       plot ...
+       set nomultiplot
+
+ See `set multiplot` (*note multiplot:: ) for further information.
+
+ The second version is the [x,y] option for the driver itself.  The advantage
+ of this implementation is that everything is scaled and placed automatically
+ without the need for setting origins and sizes; the graphs keep their natural
+ x/y proportions of 3/2 (or whatever is fixed by `set size` (*note size:: )).
+
+ If both multiplot methods are selected, the standard method is chosen and a
+ warning message is given.
+
+ Examples of single plots (or standard multiplot):
+       set terminal tgif                  # defaults
+       set terminal tgif "Times-Roman" 24
+       set terminal tgif landscape
+       set terminal tgif landscape solid
+
+ Examples using the built-in multiplot mechanism:
+       set terminal tgif portrait [2,4]  # portrait; 2 plots in the x-
+                                         # and 4 in the y-direction
+       set terminal tgif [1,2]           # portrait; 1 plot in the x-
+                                         # and 2 in the y-direction
+       set terminal tgif landscape [3,3] # landscape; 3 plots in both
+                                         # directions
+
+
+File: gnuplot.info, Node: tkcanvas, Prev: tgif, Up: terminal, Next: 
epson-180dpi
+
+ This terminal driver generates tk canvas widget commands.  To use it, rebuild
+ `gnuplot` (*note gnuplot:: ) (after uncommenting or inserting the appropriate
+ line in "term.h"), then
+
+  gnuplot> set term tkcanvas
+  gnuplot> set output 'plot.file'
+
+ After invoking "wish", execute the following sequence of tcl commands:
+
+  % source plot.file
+  % canvas .c
+  % pack .c
+  % gnuplot .c
+
+ The code generated by `gnuplot` creates a tcl procedure called "gnuplot"
+ that takes the name of a canvas as its argument.  When the procedure is,
+ called, it clears the canvas, finds the size of the canvas and draws the plot
+ in it, scaled to fit.
+
+ The current version of `tkcanvas` supports neither `multiplot`
+ (*note multiplot:: ) nor  `replot` (*note replot:: ).
+
+
+
+File: gnuplot.info, Node: epson-180dpi, Prev: tkcanvas, Up: terminal, Next: 
latex
+
+ This driver supports a family of Epson printers and derivatives.
+
+ `epson-180dpi` and `epson-60dpi` are drivers for Epson LQ-style 24-pin
+ printers with resolutions of 180 and 60 dots per inch, respectively.
+
+ `epson-lx800` is a generic 9-pin driver appropriate for printers like the
+ Epson LX-800, the Star NL-10 and NX-1000, the PROPRINTER, and so forth.
+
+ `nec-cp6` is generix 24-pin driver that can be used for printers like the
+ NEC CP6 and the Epson LQ-800.
+
+ The `okidata` driver supports the 9-pin OKIDATA 320/321 Standard printers.
+
+ The `starc` driver is for the Star Color Printer.
+
+ The `tandy-60dpi` driver is for the Tandy DMP-130 series of 9-pin, 60-dpi
+ printers.
+
+ Only `nec-cp6` has any options.
+
+ Syntax:
+       set terminal nec-cp6 {monochrome | colour | draft}
+
+ which defaults to monochrome.
+
+ With each of these drivers, a binary copy is required on a PC to print.  Do
+ not use `print` (*note print:: )---use instead copy file /b lpt1:.
+
+
+
+File: gnuplot.info, Node: latex, Prev: epson-180dpi, Up: terminal, Next: 
pslatex and pstex
+
+ The `latex` and `emtex` drivers allow two options.
+
+ Syntax:
+       set terminal latex | emtex {courier | roman} {<fontsize>}
+
+ `fontsize` (*note fontsize:: ) may be any size you specify.  The default is
+ 10-point Roman.
+
+ Unless your driver is capable of building fonts at any size (e.g. dvips),
+ stick to the standard 10, 11 and 12 point sizes.
+
+ METAFONT users beware: METAFONT does not like odd sizes.
+
+ All drivers for LaTeX offer a special way of controlling text positioning:
+ If any text string begins with '{', you also need to include a '}' at the
+ end of the text, and the whole text will be centered both horizontally
+ and vertically by LaTeX. --- If the text string begins with '[', you need
+ to continue it with: a position specification (up to two out of t,b,l,r),
+ ']{', the text itself, and finally, '}'. The text itself may be anything
+ LaTeX can typeset as an LR-box. \rule{}{}'s may help for best positioning.
+
+ Examples:
+ About label positioning:
+ Use gnuplot defaults (mostly sensible, but sometimes not really best):
+        set title '\LaTeX\ -- $ \gamma $'
+ Force centering both horizontally and vertically:
+        set label '{\LaTeX\ -- $ \gamma $}' at 0,0
+ Specify own positioning (top here):
+        set xlabel '[t]{\LaTeX\ -- $ \gamma $}'
+ The other label -- account for long ticlabels:
+        set ylabel '[r]{\LaTeX\ -- $ \gamma $\rule{7mm}{0pt}'
+
+
+File: gnuplot.info, Node: pslatex and pstex, Prev: latex, Up: terminal, Next: 
eepic
+
+ The `pslatex` and `pstex` drivers generate output for further processing by
+ LaTeX and TeX, respectively.  Figures generated by `pstex` can be included
+ in any plain-based format (including LaTeX).
+
+ Syntax:
+       set terminal pslatex | |pstex {<color>} {<dashed>} {<rotate>}
+                                     {auxfile} {<font_size>}
+
+ <color> is either `color` or `monochrome`.  <rotate> is either `rotate`
+ (*note rotate:: ) or `norotate` and determines if the y-axis label is
+ rotated.  <font_size> is used to scale the font from its usual size.
+
+ If `auxfile` is specified, it directs the driver to put the PostScript
+ commands into an auxiliary file instead of directly into the LaTeX file.
+ This is useful if your pictures are large enough that dvips cannot handle
+ them.  The name of the auxiliary PostScript file is derived from the name of
+ the TeX file given on the `set output` (*note output:: ) command; it is
+ determined by replacing the trailing `.tex` (actually just the final extent in
+ the file name---and the option will be turned off if there is no extent) with
+ `.ps` in the output file name.  Remember to close the file before leaving
+ `gnuplot` (*note gnuplot:: ).
+
+ All drivers for LaTeX offer a special way of controlling text positioning:
+ If any text string begins with '{', you also need to include a '}' at the
+ end of the text, and the whole text will be centered both horizontally
+ and vertically by LaTeX. --- If the text string begins with '[', you need
+ to continue it with: a position specification (up to two out of t,b,l,r),
+ ']{', the text itself, and finally, '}'. The text itself may be anything
+ LaTeX can typeset as an LR-box. \rule{}{}'s may help for best positioning.
+
+ Examples:
+       set term pslatex monochrome dashed rotate       # set to defaults
+ To write the PostScript commands into the file "foo.ps":
+       set term pslatex auxfile
+       set output "foo.tex"; plot ...: set output
+ About label positioning:
+ Use gnuplot defaults (mostly sensible, but sometimes not really best):
+        set title '\LaTeX\ -- $ \gamma $'
+ Force centering both horizontally and vertically:
+        set label '{\LaTeX\ -- $ \gamma $}' at 0,0
+ Specify own positioning (top here):
+        set xlabel '[t]{\LaTeX\ -- $ \gamma $}'
+ The other label -- account for long ticlabels:
+        set ylabel '[r]{\LaTeX\ -- $ \gamma $\rule{7mm}{0pt}'
+
+ Linewidths and pointsizes may be changed with `set linestyle`
+ (*note linestyle:: ).
+
+
+
+File: gnuplot.info, Node: eepic, Prev: pslatex and pstex, Up: terminal, Next: 
tpic
+
+ The `eepic` terminal driver supports the extended LaTeX picture environment.
+ It is an alternative to the `latex` (*note latex:: ) driver.
+
+ The output of this terminal is intended for use with the "eepic.sty" macro
+ package for LaTeX.  To use it, you need "eepic.sty", "epic.sty" and a
+ printer driver that supports the "tpic" \specials.  If your printer driver
+ doesn't support those \specials, "eepicemu.sty" will enable you to use some
+ of them.
+
+ Although dotted and dashed lines are possible with `eepic` and are tempting,
+ they do not work well for high-sample-rate curves, fusing the dashes all
+ together into a solid line.  For now, the `eepic` driver creates only solid
+ lines.  There is another gnuplot driver (`tpic` (*note tpic:: )) that supports
+ dashed lines, but it cannot be used if your DVI driver doesn't support "tpic"
+ \specials.
+
+ All drivers for LaTeX offer a special way of controlling text positioning:
+ If any text string begins with '{', you also need to include a '}' at the
+ end of the text, and the whole text will be centered both horizontally
+ and vertically by LaTeX. --- If the text string begins with '[', you need
+ to continue it with: a position specification (up to two out of t,b,l,r),
+ ']{', the text itself, and finally, '}'. The text itself may be anything
+ LaTeX can typeset as an LR-box. \rule{}{}'s may help for best positioning.
+
+ The `eepic` terminal has no options.
+
+ Examples:
+ About label positioning:
+ Use gnuplot defaults (mostly sensible, but sometimes not really best):
+        set title '\LaTeX\ -- $ \gamma $'
+ Force centering both horizontally and vertically:
+        set label '{\LaTeX\ -- $ \gamma $}' at 0,0
+ Specify own positioning (top here):
+        set xlabel '[t]{\LaTeX\ -- $ \gamma $}'
+ The other label -- account for long ticlabels:
+        set ylabel '[r]{\LaTeX\ -- $ \gamma $\rule{7mm}{0pt}'
+
+
+File: gnuplot.info, Node: tpic, Prev: eepic, Up: terminal, Next: pstricks
+
+ The `tpic` terminal driver supports the LaTeX picture environment with tpic
+ \specials.  It is an alternative to the `latex` (*note latex:: ) and  `eepic`
+ (*note eepic:: ) terminal drivers. Options are the point size, line width, and
+ dot-dash interval.
+
+ Syntax:
+       set terminal tpic <pointsize> <linewidth> <interval>
+
+ where `pointsize` (*note pointsize:: ) and  `linewidth` (*note linewidth:: )
+ are integers in milli-inches and interval is a float in inches.  If a
+ non-positive value is specified, the default is chosen: pointsize = 40,
+ linewidth = 6, interval = 0.1.
+
+ All drivers for LaTeX offer a special way of controlling text positioning:
+ If any text string begins with '{', you also need to include a '}' at the
+ end of the text, and the whole text will be centered both horizontally
+ and vertically by LaTeX. --- If the text string begins with '[', you need
+ to continue it with: a position specification (up to two out of t,b,l,r),
+ ']{', the text itself, and finally, '}'. The text itself may be anything
+ LaTeX can typeset as an LR-box. \rule{}{}'s may help for best positioning.
+
+ Examples:
+ About label positioning:
+ Use gnuplot defaults (mostly sensible, but sometimes not really best):
+        set title '\LaTeX\ -- $ \gamma $'
+ Force centering both horizontally and vertically:
+        set label '{\LaTeX\ -- $ \gamma $}' at 0,0
+ Specify own positioning (top here):
+        set xlabel '[t]{\LaTeX\ -- $ \gamma $}'
+ The other label -- account for long ticlabels:
+        set ylabel '[r]{\LaTeX\ -- $ \gamma $\rule{7mm}{0pt}'
+
+
+File: gnuplot.info, Node: pstricks, Prev: tpic, Up: terminal, Next: texdraw
+
+ The `pstricks` driver is intended for use with the "pstricks.sty" macro
+ package for LaTeX.  It is an alternative to the `eepic` (*note eepic:: ) and
+  `latex` (*note latex:: ) drivers. You need "pstricks.sty", and, of course, a
+ printer that understands PostScript, or a converter such as Ghostscript.
+
+ PSTricks is available via anonymous ftp from the /pub directory at
+ Princeton.EDU.  This driver definitely does not come close to using the full
+ capability of the PSTricks package.
+
+ Syntax:
+       set terminal pstricks {hacktext | nohacktext} {unit | nounit}
+
+ The first option invokes an ugly hack that gives nicer numbers; the second
+ has to do with plot scaling.  The defaults are `hacktext` and `nounit`.
+
+
+File: gnuplot.info, Node: texdraw, Prev: pstricks, Up: terminal, Next: mf
+
+ The `texdraw` terminal driver supports the LaTeX texdraw environment.  It is
+ intended for use with "texdraw.sty" and "texdraw.tex" in the texdraw package.
+
+ It has no options.
+
+
+File: gnuplot.info, Node: mf, Prev: texdraw, Up: terminal, Next: METAFONT 
Instructions
+
+ The `mf` terminal driver creates a input file to the METAFONT program.  Thus a
+ figure may be used in the TeX document in the same way as is a character.
+
+ To use a picture in a document, the METAFONT program must be run with the
+ output file from `gnuplot` (*note gnuplot:: ) as input.  Thus, the user needs
+ a basic knowledge of the font creating process and the procedure for including
+ a new font in a document.  However, if the METAFONT program is set up properly
+ at the local site, an unexperienced user could perform the operation without
+ much trouble.
+
+ The text support is based on a METAFONT character set.  Currently the
+ Computer Modern Roman font set is input, but the user is in principal free to
+ chose whatever fonts he or she needs.  The METAFONT source files for the
+ chosen font must be available.  Each character is stored in a separate
+ picture variable in METAFONT.  These variables may be manipulated (rotated,
+ scaled etc.) when characters are needed.  The drawback is the interpretation
+ time in the METAFONT program.  On some machines (i.e. PC) the limited amount
+ of memory available may also cause problems if too many pictures are stored.
+
+ The `mf` terminal has no options.
+
+* Menu:
+
+* METAFONT Instructions::
+
+
+File: gnuplot.info, Node: METAFONT Instructions, Prev: mf, Up: mf
+
+
+ - Set your terminal to METAFONT:
+   set terminal mf
+ - Select an output-file, e.g.:
+   set output "myfigures.mf"
+ - Create your pictures. Each picture will generate a separate character. Its
+ default size will be 5*3 inches. You can change the size by saying `set size
+ 0.5,0.5` or whatever fraction of the default size you want to have.
+
+ - Quit `gnuplot` (*note gnuplot:: ).
+
+ - Generate a TFM and GF file by running METAFONT on the output of `gnuplot`.
+ Since the picture is quite large (5*3 in), you will have to use a version of
+ METAFONT that has a value of at least 150000 for memmax.  On Unix systems
+ these are conventionally installed under the name bigmf.  For the following
+ assume that the command virmf stands for a big version of METAFONT.  For
+ example:
+
+ - Invoke METAFONT:
+     virmf '&plain'
+ - Select the output device: At the METAFONT prompt ('*') type:
+     \mode:=CanonCX;     % or whatever printer you use
+ - Optionally select a magnification:
+     mag:=1;             % or whatever you wish
+ - Input the `gnuplot`-file:
+     input myfigures.mf
+ On a typical Unix machine there will usually be a script called "mf" that
+ executes virmf '&plain', so you probably can substitute mf for virmf &plain.
+ This will generate two files: mfput.tfm and mfput.$$$gf (where $$$ indicates
+ the resolution of your device).  The above can be conveniently achieved by
+ typing everything on the command line, e.g.:
+ virmf '&plain' '\mode:=CanonCX; mag:=1; input myfigures.mf'
+ In this case the output files will be named myfigures.tfm and
+ myfigures.300gf.
+
+ - Generate a PK file from the GF file using gftopk:
+   gftopk myfigures.300gf myfigures.300pk
+ The name of the output file for gftopk depends on the DVI driver you use.
+ Ask your local TeX administrator about the naming conventions.  Next, either
+ install the TFM and PK files in the appropriate directories, or set your
+ environment variables properly.  Usually this involves setting TEXFONTS to
+ include the current directory and doing the same thing for the environment
+ variable that your DVI driver uses (no standard name here...).  This step is
+ necessary so that TeX will find the font metric file and your DVI driver will
+ find the PK file.
+
+ - To include your pictures in your document you have to tell TeX the font:
+   \font\gnufigs=myfigures
+ Each picture you made is stored in a single character.  The first picture is
+ character 0, the second is character 1, and so on...  After doing the above
+ step, you can use the pictures just like any other characters.  Therefore, to
+ place pictures 1 and 2 centered in your document, all you have to do is:
+   \centerline{\gnufigs\char0}
+   \centerline{\gnufigs\char1}
+ in plain TeX.  For LaTeX you can, of course, use the picture environment and
+ place the picture wherever you wish by using the \makebox and \put macros.
+
+ This conversion saves you a lot of time once you have generated the font;
+ TeX handles the pictures as characters and uses minimal time to place them,
+ and the documents you make change more often than the pictures do.  It also
+ saves a lot of TeX memory.  One last advantage of using the METAFONT driver
+ is that the DVI file really remains device independent, because no \special
+ commands are used as in the eepic and tpic drivers.
+
+
+File: gnuplot.info, Node: tics, Prev: terminal, Up: set-show, Next: ticslevel
+
+ The `set tics` command can be used to change the tics to be drawn outwards.
+
+ Syntax:
+       set tics {<direction>}
+       show tics
+
+ where <direction> may be `in` (the default) or `out`.
+
+ See also `set xtics` (*note xtics:: ) for more control of major (labelled) tic
+ marks and set mxtics` for control of minor tic marks.
+
+
+
+File: gnuplot.info, Node: ticslevel, Prev: tics, Up: set-show, Next: ticscale
+
+ Using `splot` (*note splot:: ), one can adjust the relative height of the
+ vertical (Z) axis using `set ticslevel`.  The numeric argument provided
+ specifies the location of the bottom of the scale (as a fraction of the
+ z-range) above the xy-plane. The default value is 0.5.  Negative values are
+ permitted, but tic labels on the three axes may overlap.
+
+ To place the xy-plane at a position 'pos' on the z-axis, `ticslevel` should
+ be set equal to  (pos - zmin) / (zmin - zmax).
+
+ Syntax:
+       set ticslevel {<level>}
+       show tics
+
+ See also `set view` (*note view:: ).
+
+
+
+File: gnuplot.info, Node: ticscale, Prev: ticslevel, Up: set-show, Next: 
timestamp
+
+ The size of the tic marks can be adjusted with `set ticscale`.
+
+ Syntax:
+       set ticscale {<major> {<minor>}}
+       show tics
+
+ If <minor> is not specified, it is 0.5*<major>.  The default size is 1.0 for
+ major tics and 0.5 for minor tics.  Note that it is possible to have the tic
+ marks pointing outward by specifying a negative size.
+
+
+File: gnuplot.info, Node: timestamp, Prev: ticscale, Up: set-show, Next: 
timefmt
+
+ The command `set timestamp` places the time and date of the plot in the left
+ margin.
+
+ Syntax:
+       set timestamp {"<format>"} {top|bottom} {{no}rotate}
+                     {<xoff>}{,<yoff>} {"<font>"}
+       set notimestamp
+       show timestamp
+
+ The format string allows you to choose the format used to write the date and
+ time.  Its default value is what asctime() uses: "%a %b %d %H:%M:%S %Y"
+ (weekday, month name, day of the month, hours, minutes, seconds, four-digit
+ year).  With `top` or `bottom` you can place the timestamp at the top or
+ bottom of the left margin (default: bottom).  `rotate` (*note rotate:: ) lets
+ you write the timestamp vertically, if your terminal supports vertical
+ text.  The constants <xoff> and <off> are offsets from the default position
+ given in character screen coordinates.  <font> is used to specify the font
+ with which the time is to be written.
+
+ The abbreviation `time` may be used in place of `timestamp`.
+
+ Example:
+       set timestamp "%d/%m/%y %H:%M" 80,-2 "Helvetica"
+
+ See `set timefmt` (*note timefmt:: ) for more information about time format
+ strings.
+
+
+
+File: gnuplot.info, Node: timefmt, Prev: timestamp, Up: set-show, Next: title
+
+ This command applies to timeseries where data are composed of dates/times.
+ It has no meaning unless the command `set xdata time` is given also.
+
+ Syntax:
+       set timefmt "<format string>"
+       show timefmt
+
+ The string argument tells `gnuplot` (*note gnuplot:: ) how to read timedata
+ from the datafile. The valid formats are:
+
+       Format       Explanation
+       %d           day of the month, 1--31
+       %m           month of the year, 1--12
+       %y           year, 0--99
+       %Y           year, 4-digit
+       %j           day of the year, 1--365
+       %H           hour, 0--24
+       %M           minute, 0--60
+       %S           second, 0--60
+       %b           three-character abbreviation of the name of the month
+       %B           name of the month
+ Any character is allowed in the string, but must match exactly.  \t (tab) is
+ recognized.  Backslash-octals (\nnn) are converted to char.  If there is no
+ separating character between the time/date elements, then %d, %m, %y, %H, %M
+ and %S read two digits each, %Y reads four digits and %j reads three digits.
+ %b requires three characters, and %B requires as many as it needs.
+
+ Spaces are treated slightly differently.  A space in the string stands for
+ zero or more whitespace characters in the file.  That is, "%H %M" can be used
+ to read "1220" and "12     20" as well as "12 20".
+
+ Each set of non-blank characters in the timedata counts as one column in the
+ `using n:n` specification.  Thus `11:11  25/12/76  21.0` consists of three
+ columns.  To avoid confusion, `gnuplot` requires that you provide a complete
+ `using` (*note using:: ) specification if your file contains timedata.
+
+ Since `gnuplot` cannot read non-numerical text, if the date format includes
+ the day or month in words, the format string must exclude this text.  But
+ it can still be printed with the "%a", "%A", "%b", or "%B" specifier: see
+ `set format` (*note format:: ) for more details about these and other options
+ for printing timedata.  (`gnuplot` will determine the proper month and weekday
+ from the numerical values.)
+
+ See also `set xdata` (*note xdata:: ) and Time/date for more information.
+
+ Example:
+       set timefmt "%d/%m/%Y\t%H:%M"
+ tells `gnuplot` to read date and time separated by tab.  (But look closely at
+ your data---what began as a tab may have been converted to spaces somewhere
+ along the line; the format string must match what is actually in the file.)
+
+
+File: gnuplot.info, Node: title, Prev: timefmt, Up: set-show, Next: tmargin
+
+ The `set title` command produces a plot title that is centered at the top of
+ the plot.  `set title` is a special case of `set label` (*note label:: ).
+
+ Syntax:
+       set title {"<title-text>"} {<xoff>}{,<yoff>} {"<font>,{<size>}"}
+       show title
+
+ Specifying constants <xoff> or <yoff> as optional offsets for the title will
+ move the title <xoff> or <yoff> character screen coordinates (not graph
+ coordinates).  For example, "`set title ,-1`" will change only the y offset
+ of the title, moving the title down by roughly the height of one character.
+
+ <font> is used to specify the font with which the title is to be written;
+ the units of the font <size> depend upon which terminal is used.
+
+ `set title` with no parameters clears the title.
+
+ See `syntax` (*note Syntax:: ) for details about the processing of backslash
+ sequences and the distinction between single- and double-quotes.
+
+
+
+File: gnuplot.info, Node: tmargin, Prev: title, Up: set-show, Next: trange
+
+ The command `set tmargin` sets the size of the top margin.  Please see
+ `set margin` (*note margin:: ) for details.
+
+
+
+File: gnuplot.info, Node: trange, Prev: tmargin, Up: set-show, Next: urange
+
+ The `set trange` command sets the parametric range used to compute x and y
+ values when in parametric or polar modes.  Please see `set xrange`
+ (*note xrange:: ) for details.
+
+
+
+File: gnuplot.info, Node: urange, Prev: trange, Up: set-show, Next: variables
+
+ The `set urange` and `set vrange` (*note vrange:: ) commands set the
+ parametric ranges used to compute x, y, and z values when in `splot`
+ (*note splot:: ) parametric mode.  Please see `set xrange` (*note xrange:: )
+ for details.
+
+
+
+File: gnuplot.info, Node: variables, Prev: urange, Up: set-show, Next: version
+
+ The `show variables` command lists all user-defined variables and their
+ values.
+
+ Syntax:
+       show variables
+
+
+File: gnuplot.info, Node: version, Prev: variables, Up: set-show, Next: view
+
+ The `show version` command lists the version of gnuplot being run, its last
+ modification date, the copyright holders, and email addresses for the FAQ,
+ the info-gnuplot mailing list, and reporting bugs--in short, the information
+ listed on the screen when the program is invoked interactively.
+
+ Syntax:
+       show version {long}
+
+ When the `long` option is given, it also lists the operating system, the
+ compilation options used when `gnuplot` (*note gnuplot:: ) was installed, the
+ location of the help file, and (again) the useful email addresses.
+
+
+
+File: gnuplot.info, Node: view, Prev: version, Up: set-show, Next: vrange
+
+ The `set view` command sets the viewing angle for `splot`s
+ (*note splot:: ).  It controls how the 3-d coordinates of the plot are mapped
+ into the 2-d screen space.  It provides controls for both rotation and scaling
+ of the plotted data, but supports orthographic projections only.
+
+ Syntax:
+       set view <rot_x> {,{<rot_z>}{,{<scale>}{,<scale_z>}}}
+       show view
+
+ where <rot_x> and <rot_z> control the rotation angles (in degrees) in a
+ virtual 3-d coordinate system aligned with the screen such that initially
+ (that is, before the rotations are performed) the screen horizontal axis is
+ x, screen vertical axis is y, and the axis perpendicular to the screen is z.
+ The first rotation applied is <rot_x> around the x axis.  The second rotation
+ applied is <rot_z> around the new z axis.
+
+ <rot_x> is bounded to the [0:180] range with a default of 60 degrees, while
+ <rot_z> is bounded to the [0:360] range with a default of 30 degrees.
+ <scale> controls the scaling of the entire `splot`, while <scale_z> scales
+ the z axis only.  Both scales default to 1.0.
+
+ Examples:
+       set view 60, 30, 1, 1
+       set view ,,0.5
+
+ The first sets all the four default values.  The second changes only scale,
+ to 0.5.
+
+ See also `set ticslevel` (*note ticslevel:: ).
+
+
+
+File: gnuplot.info, Node: vrange, Prev: view, Up: set-show, Next: x2data
+
+ The `set urange` (*note urange:: ) and set vrange commands set the parametric
+ ranges used to compute x, y, and z values when in `splot` (*note splot:: )
+ parametric mode.  Please see `set xrange` (*note xrange:: ) for details.
+
+
+
+File: gnuplot.info, Node: x2data, Prev: vrange, Up: set-show, Next: x2dtics
+
+ The `set x2data` command sets data on the x2 (top) axis to timeseries
+ (dates/times).  Please see `set xdata` (*note xdata:: ).
+
+
+
+File: gnuplot.info, Node: x2dtics, Prev: x2data, Up: set-show, Next: x2label
+
+ The `set x2dtics` command changes tics on the x2 (top) axis to days of the
+ week.  Please see `set xdtics` (*note xdtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: x2label, Prev: x2dtics, Up: set-show, Next: x2mtics
+
+ The `set x2label` command sets the label for the x2 (top) axis.  Please see
+ `set xlabel` (*note xlabel:: ).
+
+
+
+File: gnuplot.info, Node: x2mtics, Prev: x2label, Up: set-show, Next: x2range
+
+ The `set x2mtics` command changes tics on the x2 (top) axis to months of the
+ year.  Please see `set xmtics` (*note xmtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: x2range, Prev: x2mtics, Up: set-show, Next: x2tics
+
+ The `set x2range` command sets the horizontal range that will be displayed on
+ the x2 (top) axis.  Please see `set xrange` (*note xrange:: ) for details.
+
+
+
+File: gnuplot.info, Node: x2tics, Prev: x2range, Up: set-show, Next: x2zeroaxis
+
+ The `set x2tics` command controls major (labelled) tics on the x2 (top) axis.
+ Please see `set xtics` (*note xtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: x2zeroaxis, Prev: x2tics, Up: set-show, Next: xdata
+
+ The `set x2zeroaxis` command draws a line at the origin of the x2 (top) axis
+ (y2 = 0).  For details, please see
+ `set zeroaxis` (*note zeroaxis:: ).
+
+
+
+File: gnuplot.info, Node: xdata, Prev: x2zeroaxis, Up: set-show, Next: xdtics
+
+ This command sets the datatype on the x axis to time/date.  A similar command
+ does the same thing for each of the other axes.
+
+ Syntax:
+       set xdata {time}
+       show xdata
+
+ The same syntax applies to `ydata` (*note ydata:: ),  `zdata`
+ (*note zdata:: ),  `x2data` (*note x2data:: ) and  `y2data`
+ (*note y2data:: ).
+
+ The `time` option signals that the datatype is indeed time/date.  If the
+ option is not specified, the datatype reverts to normal.
+
+ See `set timefmt` (*note timefmt:: ) to tell  `gnuplot` (*note gnuplot:: ) how
+ to read date or time data.  The time/date is converted to seconds from start
+ of the century.  There is currently only one timefmt, which implies that all
+ the time/date columns must confirm to this format.  Specification of ranges
+ should be supplied as quoted strings according to this format to avoid
+ interpretation of the time/date as an expression.
+
+ The function 'strftime' (type "man strftime" on unix to look it up) is used
+ to print tic-mark labels.  `gnuplot` tries to figure out a reasonable format
+ for this  unless the `set format x "string"` has supplied something that does
+ not look like a decimal format (more than one '%' or neither %f nor %g).
+
+ See also `Time/date` for more information.
+
+
+File: gnuplot.info, Node: xdtics, Prev: xdata, Up: set-show, Next: xlabel
+
+ The `set xdtics` commands converts the x-axis tic marks to days of the week
+ where 0=Sun and 6=Sat.  Overflows are converted modulo 7 to dates.  `set
+ noxdtics` returns the labels to their default values.  Similar commands do
+ the same things for the other axes.
+
+ Syntax:
+       set xdtics
+       set noxdtics
+       show xdtics
+
+ The same syntax applies to `ydtics` (*note ydtics:: ),  `zdtics`
+ (*note zdtics:: ),  `x2dtics` (*note x2dtics:: ) and  `y2dtics`
+ (*note y2dtics:: ).
+
+ See also the `set format` (*note format:: ) command.
+
+
+
+File: gnuplot.info, Node: xlabel, Prev: xdtics, Up: set-show, Next: xmtics
+
+ The `set xlabel` command sets the x axis label.  Similar commands set labels
+ on the other axes.
+
+ Syntax:
+       set xlabel {"<label>"} {<xoff>}{,<yoff>} {"<font>{,<size>}"}
+       show xlabel
+
+ The same syntax applies to `x2label` (*note x2label:: ),  `ylabel`
+ (*note ylabel:: ),  `y2label` (*note y2label:: ) and  `zlabel`
+ (*note zlabel:: ).
+
+ Specifying the constants <xoff> or <yoff> as optional offsets for a label
+ will move it <xoff> or <yoff> character widths or heights.  For example,
+ "` set xlabel -1`" will change only the x offset of the xlabel, moving the
+ label roughly one character width to the left.   The size of a character
+ depends on both the font and the terminal.
+
+ <font> is used to specify the font in which the label is written; the units
+ of the font <size> depend upon which terminal is used.
+
+ To clear a label, put no options on the command line, e.g., "`set y2label`".
+
+ The default positions of the axis labels are as follows:
+
+ xlabel:  The x-axis label is centered below the bottom axis.
+
+ ylabel:  The position of the y-axis label depends on the terminal, and can be
+ one of the following three positions:
+
+ 1. Horizontal text flushed left at the top left of the plot.  Terminals that
+ cannot rotate text will probably use this method.  If `set x2tics`
+ (*note x2tics:: ) is also in use, the ylabel may overwrite the left-most x2tic
+ label.  This may be remedied by adjusting the ylabel position or the left
+ margin.
+
+ 2. Vertical text centered vertically at the left of the plot.  Terminals
+ that can rotate text will probably use this method.
+
+ 3. Horizontal text centered vertically at the left of the plot.  The EEPIC,
+ LaTeX and TPIC drivers use this method.  The user must insert line breaks
+ using \\ to prevent the ylabel from overwriting the plot.  To produce a
+ vertical row of characters, add \\ between every printing character (but this
+ is ugly).
+
+ zlabel: The z-axis label is centered along the z axis and placed in the space
+ above the grid level.
+
+ y2label: The y2-axis label is placed to the right of the y2 axis.  The
+ position is terminal-dependent in the same manner as is the y-axis label.
+
+ x2label: The x2-axis label is placed above the top axis but below the plot
+ title.  It is also possible to create an x2-axis label by using new-line
+ characters to make a multi-line plot title, e.g.,
+
+       set title "This is the title\n\nThis is the x2label"
+
+ Note that double quotes must be used.  The same font will be used for both
+ lines, of course.
+
+ If you are not satisfied with the default position of an axis label, use `set
+ label` instead--that command gives you much more control over where text is
+ placed.
+
+ Please see `set syntax` for further information about backslash processing
+ and the difference between single- and double-quoted strings.
+
+
+File: gnuplot.info, Node: xmtics, Prev: xlabel, Up: set-show, Next: xrange
+
+ The `set xmtics` commands converts the x-axis tic marks to months of the
+ year where 1=Jan and 12=Dec.  Overflows are converted modulo 12 to months.
+ The tics are returned to their default labels by `set noxmtics`.  Similar
+ commands perform the same duties for the other axes.
+
+ Syntax:
+       set xmtics
+       set noxmtics
+       show xmtics
+
+ The same syntax applies to `x2mtics` (*note x2mtics:: ),  `ymtics`
+ (*note ymtics:: ),  `y2mtics` (*note y2mtics:: ), and  `zmtics`
+ (*note zmtics:: ).
+
+ See also the `set format` (*note format:: ) command.
+
+
+
+File: gnuplot.info, Node: xrange, Prev: xmtics, Up: set-show, Next: xtics
+
+ The `set xrange` command sets the horizontal range that will be displayed.
+ A similar command exists for each of the other axes, as well as for the
+ polar radius r and the parametric variables t, u, and v.
+
+ Syntax:
+       set xrange [{{<min>}:{<max>}}] {{no}reverse} {{no}writeback}
+       show xrange
+
+ where <min> and <max> terms are constants, expressions or an asterisk to set
+ autoscaling.  If the data are time/date, you must give the range as a quoted
+ string according to the `set timefmt` (*note timefmt:: ) format.  Any value
+ omitted will not be changed.
+
+ The same syntax applies to `yrange` (*note yrange:: ),  `zrange`
+ (*note zrange:: ),  `x2range` (*note x2range:: ),  `y2range`
+ (*note y2range:: ), `rrange` (*note rrange:: ),  `trange` (*note trange:: ),
+  `urange` (*note urange:: ) and  `vrange` (*note vrange:: ).
+
+ The `reverse` option reverses the direction of the axis, e.g., `set xrange
+ [0:1] reverse` will produce an axis with 1 on the left and 0 on the right.
+ This is identical to the axis produced by `set xrange [1:0]`, of course.
+ `reverse` is intended primarily for use with `autoscale`
+ (*note autoscale:: ).
+
+ The `writeback` option essentially saves the range found by `autoscale` in
+ the buffers that would be filled by `set xrange`.  This is useful if you wish
+ to plot several functions together but have the range determined by only
+ some of them.  The `writeback` operation is performed during the `plot`
+ (*note plot:: ) execution, so it must be specified before that command.  For
+ example,
+
+       set xrange [-10:10]
+       set yrange [] writeback
+       plot sin(x)
+       set noautoscale y
+       replot x/2
+
+ results in a yrange of [-1:1] as found only from the range of sin(x); the
+ [-5:5] range of x/2 is ignored.  Executing `show yrange` after each command
+ in the above example should help you understand what is going on.
+
+ In 2-d, `xrange` and `yrange` determine the extent of the axes, `trange`
+ determines the range of the parametric variable in parametric mode or the
+ range of the angle in polar mode.  Similarly in parametric 3-d, `xrange`,
+ `yrange`, and `zrange` govern the axes and `urange` and `vrange` govern the
+ parametric variables.
+
+ In polar mode, `rrange` determines the radial range plotted.  <rmin> acts as
+ an additive constant to the radius, whereas <rmax> acts as a clip to the
+ radius---no point with radius greater than <rmax> will be plotted.  `xrange`
+ and `yrange` are affected---the ranges can be set as if the graph was of
+ r(t)-rmin, with rmin added to all the labels.
+
+ Any range may be partially or totally autoscaled, although it may not make
+ sense to autoscale a parametric variable unless it is plotted with data.
+
+ Ranges may also be specified on the `plot` command line.  A range given on
+ the plot line will be used for that single `plot` command; a range given by
+ a `set` (*note set-show:: ) command will be used for all subsequent plots that
+ do not specify their own ranges.  The same holds true for `splot`
+ (*note splot:: ).
+
+ Examples:
+
+ To set the xrange to the default:
+       set xrange [-10:10]
+
+ To set the yrange to increase downwards:
+       set yrange [10:-10]
+
+ To change zmax to 10 without affecting zmin (which may still be autoscaled):
+       set zrange [:10]
+
+ To autoscale xmin while leaving xmax unchanged:
+       set xrange [*:]
+
+
+File: gnuplot.info, Node: xtics, Prev: xrange, Up: set-show, Next: xzeroaxis
+
+ Fine control of the major (labelled) tics on the x axis is possible with the
+ `set xtics` command.  The tics may be turned off with the `set noxtics`
+ command, and may be turned on (the default state) with `set xtics`.  Similar
+ commands control the major tics on the y, z, x2 and y2 axes.
+
+ Syntax:
+       set xtics {axis | border} {{no}mirror} {{no}rotate}
+                 {  autofreq
+                  | <incr>
+                  | <start>, <incr> {,<end>}
+                  | ({"<label>"} <pos> {,{"<label>"} <pos>}...) }
+       set noxtics
+       show xtics
+
+ The same syntax applies to `ytics` (*note ytics:: ),  `ztics`
+ (*note ztics:: ),  `x2tics` (*note x2tics:: ) and  `y2tics`
+ (*note y2tics:: ).
+
+ `axis` or `border` (*note border:: ) tells  `gnuplot` (*note gnuplot:: ) to
+ put the tics (both the tics themselves and the accompanying labels) along the
+ axis or the border, respectively. `mirror` tells it to put unlabelled tics at
+ the same positions on the opposite border.  `nomirror` does what you think it
+ does.  `rotate` (*note rotate:: ) asks `gnuplot` to rotate the text through 90
+ degrees, if the underlying terminal driver supports text rotation.  `norotate`
+ cancels this.  The defaults are `border mirror norotate` for tics on the x and
+ y axes, and `border nomirror norotate` for tics on the x2 and y2 axes.  For
+ the z axis, the the `{axis | border}` option is not available and the default
+ is `nomirror`.  If you do want to mirror the z-axis tics, you might want to
+ create a bit more room for them with `set border`.
+
+ `set xtics` with no options restores the default border if xtics are not
+ being displayed;  otherwise it has no effect.  Any previously specified
+ tic frequency or position {and labels} are retained.
+
+ Positions of the tics are calculated automatically by default or if the
+ `autofreq` option is given; otherwise they may be specified in either of
+ two forms:
+
+ The implicit <start>, <incr>, <end> form specifies that a series of tics will
+ be plotted on the axis between the values <start> and <end> with an increment
+ of <incr>.  If <end> is not given, it is assumed to be infinity.  The
+ increment may be negative.  If neither <start> nor <end> is given, <start> is
+ assumed to be negative infinity, <end> is assumed to be positive infinity,
+ and the tics will be drawn at integral multiples of <step>.  If the axis is
+ logarithmic, the increment will be used as a multiplicative factor.
+
+ Examples:
+
+ Make tics at 0, 0.5, 1, 1.5, ..., 9.5, 10.
+       set xtics 0,.5,10
+
+ Make tics at ..., -10, -5, 0, 5, 10, ...
+       set xtics 5
+
+ Make tics at 1, 100, 1e4, 1e6, 1e8.
+       set logscale x; set xtics 1,100,10e8
+
+ The explicit ("<label>" <pos>, ...) form allows arbitrary tic positions or
+ non-numeric tic labels.  A set of tics is a set of positions, each with its
+ own optional label.  Note that the label is a string enclosed by quotes.  It
+ may be a constant string, such as "hello", may contain formatting information
+ for converting the position into its label, such as "%3f clients", or may be
+ empty, "".  See `set format` (*note format:: ) for more information.  If no
+ string is given, the default label (numerical) is used.  In this form, the
+ tics do not need to be listed in numerical order.
+
+ Examples:
+       set xtics ("low" 0, "medium" 50, "high" 100)
+       set xtics (1,2,4,8,16,32,64,128,256,512,1024)
+       set ytics ("bottom" 0, "" 10, "top" 20)
+
+ In the second example, all tics are labelled.  In the third, only the end
+ tics are labelled.
+
+ However they are specified, tics will only be plotted when in range.
+
+ Format (or omission) of the tic labels is controlled by `set format`, unless
+ the explicit text of a labels is included in the `set xtic (`<label>`)` form.
+
+ Minor (unlabelled) tics can be added by the `set mxtics` (*note mxtics:: )
+ command.
+
+ In case of timeseries data, position values must be given as quoted dates
+ or times according to the format `timefmt` (*note timefmt:: ).  If the
+ <start>, <incr>, <end> form is used, <start> and <end> must be given according
+ to `timefmt`, but <incr> must be in seconds.  Times will be written out
+ according to the format given on `set format`, however.
+
+ Examples:
+       set xdata time
+       set timefmt "%d/%m"
+       set format x "%b %d"
+       set xrange ["01/12":"06/12"]
+       set xtics "01/12", 172800, "05/12"
+
+       set xdata time
+       set timefmt "%d/%m"
+       set format x "%b %d"
+       set xrange ["01/12":"06/12"]
+       set xtics ("01/12", "" "03/12", "05/12")
+ Both of these will produce tics "Dec 1", "Dec 3", and "Dec 5", but in the
+ second example the tic at "Dec 3" will be unlabelled.
+
+
+
+File: gnuplot.info, Node: xzeroaxis, Prev: xtics, Up: set-show, Next: y2data
+
+ The `set xzeroaxis` command draws a line at y = 0.  For details, please see
+ `set zeroaxis` (*note zeroaxis:: ).
+
+
+
+File: gnuplot.info, Node: y2data, Prev: xzeroaxis, Up: set-show, Next: y2dtics
+
+ The `set y2data` command sets y2 (right-hand) axis data to timeseries
+ (dates/times).  Please see `set xdata` (*note xdata:: ).
+
+
+
+File: gnuplot.info, Node: y2dtics, Prev: y2data, Up: set-show, Next: y2label
+
+ The `set y2dtics` command changes tics on the y2 (right-hand) axis to days of
+ the week.  Please see `set xdtics` (*note xdtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: y2label, Prev: y2dtics, Up: set-show, Next: y2mtics
+
+ The `set y2dtics` (*note y2dtics:: ) command sets the label for the y2
+ (right-hand) axis. Please see `set xlabel` (*note xlabel:: ).
+
+
+
+File: gnuplot.info, Node: y2mtics, Prev: y2label, Up: set-show, Next: y2range
+
+ The `set y2mtics` command changes tics on the y2 (right-hand) axis to months
+ of the year.  Please see `set xmtics` (*note xmtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: y2range, Prev: y2mtics, Up: set-show, Next: y2tics
+
+ The `set y2range` command sets the vertical range that will be displayed on
+ the y2 (right-hand) axis.  Please see `set xrange` (*note xrange:: ) for
+ details.
+
+
+
+File: gnuplot.info, Node: y2tics, Prev: y2range, Up: set-show, Next: y2zeroaxis
+
+ The `set y2tics` command controls major (labelled) tics on the y2 (right-hand)
+ axis.  Please see `set xtics` (*note xtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: y2zeroaxis, Prev: y2tics, Up: set-show, Next: ydata
+
+ The `set y2zeroaxis` command draws a line at the origin of the y2 (right-hand)
+ axis (x2 = 0).  For details, please see `set zeroaxis` (*note zeroaxis:: ).
+
+
+
+File: gnuplot.info, Node: ydata, Prev: y2zeroaxis, Up: set-show, Next: ydtics
+
+ Sets y-axis data to timeseries (dates/times).  Please see `set xdata`
+ (*note xdata:: ).
+
+
+
+File: gnuplot.info, Node: ydtics, Prev: ydata, Up: set-show, Next: ylabel
+
+ The `set ydtics` command changes tics on the y axis to days of the week.
+ Please see `set xdtics` (*note xdtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: ylabel, Prev: ydtics, Up: set-show, Next: ymtics
+
+ This command sets the label for the y axis.  Please see `set xlabel`
+ (*note xlabel:: ).
+
+
+
+File: gnuplot.info, Node: ymtics, Prev: ylabel, Up: set-show, Next: yrange
+
+ The `set ymtics` command changes tics on the y axis to months of the year.
+ Please see `set xmtics` (*note xmtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: yrange, Prev: ymtics, Up: set-show, Next: ytics
+
+ The `set yrange` command sets the vertical range that will be displayed on
+ the y axis.  Please see `set xrange` (*note xrange:: ) for details.
+
+
+
+File: gnuplot.info, Node: ytics, Prev: yrange, Up: set-show, Next: yzeroaxis
+
+ The `set ytics` command controls major (labelled) tics on the y axis.
+ Please see `set xtics` (*note xtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: yzeroaxis, Prev: ytics, Up: set-show, Next: zdata
+
+ The `set yzeroaxis` command draws a line at x = 0.  For details, please see
+ `set zeroaxis` (*note zeroaxis:: ).
+
+
+
+File: gnuplot.info, Node: zdata, Prev: yzeroaxis, Up: set-show, Next: zdtics
+
+ Set zaxis date to timeseries (dates/times).  Please see `set xdata`
+ (*note xdata:: ).
+
+
+
+File: gnuplot.info, Node: zdtics, Prev: zdata, Up: set-show, Next: zero
+
+ The `set zdtics` command changes tics on the z axis to days of the week.
+ Please see `set xdtics` (*note xdtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: zero, Prev: zdtics, Up: set-show, Next: zeroaxis
+
+ The `zero` value is the default threshold for values approaching 0.0.
+
+ Syntax:
+       set zero <expression>
+       show zero
+
+ `gnuplot` (*note gnuplot:: ) will not plot a point if its imaginary part is
+ greater in magnitude than the `zero` threshold.  This threshold is also used
+ in various other parts of `gnuplot` as a (crude) numerical-error
+ threshold.  The default `zero` value is 1e-8.  `zero` values larger than 1e-3
+ (the reciprocal of the number of pixels in a typical bitmap display) should
+ probably be avoided, but it is not unreasonable to set `zero` to 0.0.
+
+
+
+File: gnuplot.info, Node: zeroaxis, Prev: zero, Up: set-show, Next: zlabel
+
+ The x axis may be drawn by `set xzeroaxis` (*note xzeroaxis:: ) and removed by
+ set noxzeroaxis. Similar commands behave similarly for the y, x2, and y2
+ axes.
+
+ Syntax:
+       set {x|x2|y|y2|}zeroaxis { {linestyle | ls <line_style>}
+                                  | { linetype | lt <line_type>}
+                                    { linewidth | lw <line_width>}}
+       set no{x|x2|y|y2|}zeroaxis
+       show {x|y|}zeroaxis
+
+
+ By default, these options are off.  The selected zero axis is drawn
+ with a line of type <line_type> and width <line_width> (if supported
+ by the terminal driver currently in use), or a user-defined style
+ <line_style>.
+
+ If no linetype is specified, any zero axes selected will be drawn
+ using the axis linetype (linetype 0).
+
+ `set zeroaxis l` is equivalent to `set xzeroaxis l; set yzeroaxis l`. `set
+ nozeroaxis` is equivalent to `set noxzeroaxis; set noyzeroaxis`.
+
+
+File: gnuplot.info, Node: zlabel, Prev: zeroaxis, Up: set-show, Next: zmtics
+
+ This command sets the label for the z axis.  Please see `set xlabel`
+ (*note xlabel:: ).
+
+
+
+File: gnuplot.info, Node: zmtics, Prev: zlabel, Up: set-show, Next: zrange
+
+ The `set zmtics` command changes tics on the z axis to months of the year.
+ Please see `set xmtics` (*note xmtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: zrange, Prev: zmtics, Up: set-show, Next: ztics
+
+ The `set zrange` command sets the range that will be displayed on the z axis.
+ The zrange is used only by `splot` (*note splot:: ) and is ignored by  `plot`
+ (*note plot:: ).  Please see set xrange` for details.
+
+
+
+File: gnuplot.info, Node: ztics, Prev: zrange, Up: set-show
+
+ The `set ztics` command controls major (labelled) tics on the z axis.
+ Please see `set xtics` (*note xtics:: ) for details.
+
+
+
+File: gnuplot.info, Node: shell, Prev: set-show, Up: Commands, Next: splot
+
+ The `shell` command spawns an interactive shell.  To return to `gnuplot`
+ (*note gnuplot:: ), type `logout` if using VMS, `exit` (*note exit:: ) or the
+ END-OF-FILE character if using Unix, `endcli` if using AmigaOS, or `exit` if
+ using MS-DOS or OS/2.
+
+ A single shell command may be spawned by preceding it with the ! character
+ ($ if using VMS) at the beginning of a command line.  Control will return
+ immediately to `gnuplot` after this command is executed.  For example, in
+ Unix, AmigaOS, MS-DOS or OS/2,
+
+       ! dir
+
+ prints a directory listing and then returns to `gnuplot`.
+
+ On an Atari, the `!` command first checks whether a shell is already loaded
+ and uses it, if available.  This is practical if `gnuplot` is run from
+ `gulam`, for example.
+
+
+File: gnuplot.info, Node: splot, Prev: shell, Up: Commands, Next: data-file
+
+ `splot` is the command for drawing 3-d plots (well, actually projections on
+ a 2-d surface, but you knew that).  It can create a plot from functions or
+ a data file in a manner very similar to the `plot` (*note plot:: ) command.
+
+ See `plot` for features common to the `plot` command; only differences are
+ discussed in detail here.  Note specifically that the `binary`
+ (*note binary:: ) and  `matrix` (*note matrix:: ) options (discussed under
+ "datafile-modifiers") are not available for `plot`.
+
+ Syntax:
+       splot {<ranges>}
+             <function> | "<datafile>" {datafile-modifiers}}
+             {<title-spec>} {with <style>}
+             {, {definitions,} <function> ...}
+
+ where either a <function> or the name of a data file enclosed in quotes is
+ supplied.  The function can be a mathematical expression, or a triple of
+ mathematical expressions in parametric mode.
+
+ By default `splot` draws the xy plane completely below the plotted data.
+ The offset between the lowest ztic and the xy plane can be changed by `set
+ ticslevel`.  The orientation of a `splot` projection is controlled by
+ `set view` (*note view:: ).  See set view and nd `set ticslevel`
+ (*note ticslevel:: ) for more information.
+
+ The syntax for setting ranges on the `splot` command is the same as for
+ `plot`.  In non-parametric mode, the order in which ranges must be given is
+ `xrange` (*note xrange:: ),  `yrange` (*note yrange:: ), and  `zrange`
+ (*note zrange:: ).  In parametric mode, the order is  `urange`
+ (*note urange:: ), `vrange` (*note vrange:: ), xrange, yrange, and zrange.
+
+ The `title` (*note title:: ) option is the same as in plot.  The operation of
+ of `with` (*note with:: ) is also the same as in `plot`, except that the
+ plotting styles available to `splot` are limited to `lines` (*note lines:: ),
+  `points` (*note points:: ),  `linespoints` (*note linespoints:: ),  `dots`
+ (*note dots:: ), and  `impulses` (*note impulses:: );  the error-bar
+ capabilities of `plot` are not available for `splot`.
+
+ The datafile options have more differences.
+
+* Menu:
+
+* data-file::
+* grid_data::
+* splot_overview::
+
+
+File: gnuplot.info, Node: data-file, Prev: splot, Up: splot, Next: binary
+
+ As for `plot` (*note plot:: ), discrete data contained in a file can be
+ displayed by specifying the name of the data file, enclosed in quotes,  on the
+ `splot` (*note splot:: ) command line.
+
+ Syntax:
+       splot '<file_name>' {binary | matrix}
+                           {index <index list>}
+                           {every <every list>}
+                           {using <using list>}
+
+ The special filenames `""` and `"-"` are permitted, as in `plot`.
+
+ In brief, `binary` (*note binary:: ) and  `matrix` (*note matrix:: ) indicate
+ that the the data are in a special form, `index` (*note index:: ) selects
+ which data sets in a multi-data-set file are to be plotted, `every`
+ (*note every:: ) specifies which datalines (subsets) within a single data set
+ are to be plotted, and `using` (*note using:: ) determines how the columns
+ within a single record are to be interpreted.
+
+ The options `index` and `every` behave the same way as with `plot`;  `using`
+ does so also, except that the `using` list must provide three entries
+ instead of two.
+
+ The `plot` options `thru` (*note thru:: ) and  `smooth` (*note smooth:: ) are
+ not available for splot, but `cntrparams` and `dgrid3d` (*note dgrid3d:: )
+ provide limited smoothing cabilities.
+
+ Data file organization is essentially the same as for `plot`, except that
+ each point is an (x,y,z) triple.  If only a single value is provided, it
+ will be used for z, the datablock number will be used for y, and the index
+ of the data point in the datablock will be used for x.  If two values are
+ provided, `gnuplot` (*note gnuplot:: ) gives you an error message.  Three
+ values are interpreted as an (x,y,z) triple.  Additional values are generally
+ used as errors, which can be used by `fit` (*note fit:: ).
+
+ Single blank records separate datablocks in a `splot` datafile; `splot`
+ treats datablocks as the equivalent of function y-isolines.  No line will
+ join points separated by a blank record.  If all datablocks contain the same
+ number of points, `gnuplot` will draw cross-isolines between datablocks,
+ connecting corresponding points.  This is termed "grid data", and is required
+ for drawing a surface, for contouring (`set contour` (*note contour:: )) and
+ hidden-line removal (`set hidden3d` (*note hidden3d:: )). See also splot grid
+ data
+
+ It is no longer necessary to specify `parametric` (*note parametric:: ) mode
+ for three-column `splot`s.
+
+
+* Menu:
+
+* binary::
+* example datafile::
+* matrix::
+
+
+File: gnuplot.info, Node: binary, Prev: data-file, Up: data-file, Next: 
example datafile
+
+ `splot` (*note splot:: ) can read binary files written with a specific format
+ (and on a system with a compatible binary file representation.)
+
+ In previous versions, `gnuplot` (*note gnuplot:: ) dynamically detected binary
+ data files.  It is now necessary to specify the keyword `binary` directly
+ after the filename.
+
+ Single precision floats are stored in a binary file as follows:
+
+       <N+1>  <y0>   <y1>   <y2>  ...  <yN>
+        <x0> <z0,0> <z0,1> <z0,2> ... <z0,N>
+        <x1> <z1,0> <z1,1> <z1,2> ... <z1,N>
+         :      :      :      :   ...    :
+
+ which are converted into triplets:
+       <x0> <y0> <z0,0>
+       <x0> <y1> <z0,1>
+       <x0> <y2> <z0,2>
+        :    :     :
+       <x0> <yN> <z0,N>
+
+       <x1> <y0> <z1,0>
+       <x1> <y1> <z1,1>
+        :    :     :
+
+ These triplets are then converted into `gnuplot` iso-curves and then
+ `gnuplot` proceeds in the usual manner to do the rest of the plotting.
+
+ A collection of matrix and vector manipulation routines (in C) is provided
+ in `binary.c`.  The routine to write binary data is
+
+       int fwrite_matrix(file,m,nrl,nrl,ncl,nch,row_title,column_title)
+
+ An example of using these routines is provided in the file `bf_test.c`, which
+ generates binary files for the demo file `demo/binary.dem`.
+
+ The `index` (*note index:: ) keyword is not supported, since the file format
+ allows only one surface per file.  The `every` (*note every:: ) and  `using`
+ (*note using:: ) filters are supported.  using operates as if the data were
+ read in the above triplet form.
+
+
+
+File: gnuplot.info, Node: example datafile, Prev: binary, Up: data-file, Next: 
matrix
+
+ A simple example of plotting a 3-d data file is
+
+       splot 'datafile.dat'
+
+ where the file "datafile.dat" might contain:
+
+       # The valley of the Gnu.
+          0 0 10
+          0 1 10
+          0 2 10
+
+          1 0 10
+          1 1 5
+          1 2 10
+
+          2 0 10
+          2 1 1
+          2 2 10
+
+          3 0 10
+          3 1 0
+          3 2 10
+
+ Note that "datafile.dat" defines a 4 by 3 grid ( 4 rows of 3 points each ).
+ Rows (datablocks) are separated by blank records.
+
+ Note also that the x value is held constant within each dataline.  If you
+ instead keep y constant, and plot with hidden-line removal enabled, you will
+ find that the surface is drawn 'inside-out'.
+
+ Actually for grid data it is not necessary to keep the x values constant
+ within a datablock, nor is it necessary to keep the same sequence of y
+ values.  `gnuplot` (*note gnuplot:: ) requires only that the number of points
+ be the same for each datablock.  However since the surface mesh, from which
+ contours are derived, connects sequentially corresponding points, the effect
+ of an irregular grid on a surface plot is unpredictable and should be
+ examined on a case-by-case basis.
+
+
+
+File: gnuplot.info, Node: matrix, Prev: example datafile, Up: data-file
+
+ The `matrix` flag indicates that the ASCII data are stored in matrix format.
+ The z-values are read in a row at a time, i. e.,
+       z11 z12 z13 z14 ...
+       z21 z22 z23 z24 ...
+       z31 z32 z33 z34 ...
+ and so forth.  The row and column indices are used for the x- and y-values.
+
+
+File: gnuplot.info, Node: grid_data, Prev: data-file, Up: splot, Next: 
splot_overview
+
+ The 3D routines are designed for points in a grid format, with one sample,
+ datapoint, at each mesh intersection; the datapoints may originate from
+ either evaluating a function, see `set isosamples` (*note isosamples:: ), or
+ reading a datafile, see `splot datafile` (*note data-file:: ).  The term
+ "isoline" is applied to the mesh lines for both functions and data.  Note that
+ the mesh need not be rectangular in x and y, as it may be parameterized in u
+ and v, see `set isosamples`.
+
+ However, `gnuplot` (*note gnuplot:: ) does not require that format.  In the
+ case of functions, 'samples' need not be equal to 'isosamples', i.e., not
+ every x-isoline sample need intersect a y-isoline. In the case of data files,
+ if there are an equal number of scattered data points in each datablock, then
+ "isolines" will connect the points in a datablock, and "cross-isolines" will
+ connect the corresponding points in each datablock to generate a
+ "surface".  In either case, contour and hidden3d modes may give different
+ plots than if the points were in the intended format.  Scattered data can be
+ converted to a {different} grid format with `set dgrid3d` (*note dgrid3d:: ).
+
+ The contour code tests for z intensity along a line between a point on a
+ y-isoline and the corresponding point in the next y-isoline.  Thus a `splot`
+ (*note splot:: ) contour of a surface with samples on the x-isolines that do
+ not coincide with a y-isoline intersection will ignore such samples. Try:
+        set xrange [-pi/2:pi/2]; set yrange [-pi/2:pi/2]        set function
+ style lp        set contour        set isosamples 10,10; set samples 10,10;
+        splot cos(x)*cos(y)        set samples 4,10; replot        set samples
+ 10,4; replot
+
+
+
+File: gnuplot.info, Node: splot_overview, Prev: grid_data, Up: splot
+
+ `splot` (*note splot:: ) can display a surface as a collection of points, or
+ by connecting those points.  As with `plot` (*note plot:: ), the points may be
+ read from a data file or result from evaluation of a function at specified
+ intervals, see `set isosamples`.  The surface may be approximated by
+ connecting the points with straight line segments, see `set surface`
+ (*note surface:: ), in which case the surface can be made opaque with `set
+ hidden3d.`  The orientation from which the 3d surface is viewed can be changed
+ with `set view` (*note view:: ).
+
+ Additionally, for points in a grid format, `splot` can interpolate points
+ having a common amplitude (see `set contour` (*note contour:: )) and can then
+ connect those new points to display contour lines, either directly with
+ straight-line segments or smoothed lines (see `set cntrparams`).  Functions
+ are already evaluated in a grid format, determined by `set isosamples`
+ (*note isosamples:: ) and  `set samples` (*note samples:: ), while file data
+ must either be in a grid format, as described in `data-file`
+ (*note data-file:: ), or be used to generate a grid (see `set dgrid3d`
+ (*note dgrid3d:: )).
+
+ Contour lines may be displayed either on the surface or projected onto the
+ base.  The base projections of the contour lines may be written to a
+ file, and then read with `plot`, to take advantage of `plot`'s additional
+ formatting capabilities.
+
+
+File: gnuplot.info, Node: test, Prev: splot, Up: Commands, Next: update
+
+ `test` creates a display of line and point styles and other useful things
+ appropriate for the terminal you are using.
+
+ Syntax:
+       test
+
+
+File: gnuplot.info, Node: update, Prev: test, Up: Commands
+
+ This command writes the current values of the fit parameters into the given
+ file, formatted as an initial-value file (as described in the `fit`s
+ (*note fit:: )ection). This is useful for saving the current values for later
+ use or for restarting a converged or stopped fit.
+
+ Syntax:
+       update <filename> {<filename>}
+
+ If a second filename is supplied, the updated values are written to this
+ file, and the original parameter file is left unmodified.
+
+ Otherwise, if the file already exists, `gnuplot` (*note gnuplot:: ) first
+ renames it by appending `.old` and then opens a new file.  That is, "`update
+ 'fred'`" behaves the same as "`!rename fred fred.old; update 'fred.old'
+ 'fred'`". [On DOS and other systems that use the twelve-character
+ "filename.ext" naming convention, "ext" will be "`old`" and "filename" will be
+ related (hopefully recognizably) to the initial name.  Renaming is not done at
+ all on VMS systems, since they use file-versioning.]
+
+ Please see `fit` for more information.
+
+
+File: gnuplot.info, Node: Graphical User Interfaces, Prev: Commands, Up: Top, 
Next: Bugs
+
+ Several graphical user interfaces have been written for `gnuplot`
+ (*note gnuplot:: ) and one for win32 is included in this distribution.  In
+ addition, there is a Macintosh interface at
+        ftp://ftp.ee.gatech.edu/pub/mac/gnuplot and several X11 interfaces
+ include three Tcl/Tk located at the usual Tcl/Tk repositories.
+
+
+
+File: gnuplot.info, Node: Bugs, Prev: Graphical User Interfaces, Up: Top, 
Next: Old_bugs
+
+ Floating point exceptions (floating point number too large/small, divide by
+ zero, etc.) may occasionally be generated by user defined functions.  Some of
+ the demos in particular may cause numbers to exceed the floating point range.
+ Whether the system ignores such exceptions (in which case `gnuplot`
+ (*note gnuplot:: ) labels the corresponding point as undefined) or aborts
+ `gnuplot` depends on the compiler/runtime environment.
+
+ The bessel functions do not work for complex arguments.
+
+ The gamma function does not work for complex arguments.
+
+ As of `gnuplot` version 3.7, all development has been done using ANSI C.
+ With current operating system, compiler, and library releases, the OS
+ specific bugs documented in release 3.5, now relegated to `old_bugs`, may
+ no longer be relevant.
+
+ Bugs reported since the current release may be located via the official
+ distribution site:
+        ftp://ftp.dartmouth.edu/pub/gnuplot
+       http://www.cs.dartmouth.edu/gnuplot_info.html
+
+ Please e-mail any bugs to bug-gnuplot@dartmouth.edu.
+
+* Menu:
+
+* Old_bugs::
+
+
+File: gnuplot.info, Node: Old_bugs, Prev: Bugs, Up: Bugs
+
+ There is a bug in the stdio library for old Sun operating systems (SunOS
+ Sys4-3.2).  The "%g" format for 'printf' sometimes incorrectly prints numbers
+ (e.g., 200000.0 as "2").  Thus, tic mark labels may be incorrect on a Sun4
+ version of `gnuplot` (*note gnuplot:: ).  A work-around is to rescale the data
+ or use the set format` command to change the tic mark format to "%7.0f" or
+ some other appropriate format.  This appears to have been fixed in SunOS 4.0.
+
+ Another bug: On a Sun3 under SunOS 4.0, and on Sun4's under Sys4-3.2 and
+ SunOS 4.0, the 'sscanf' routine incorrectly parses "00 12" with the format
+ "%f %f" and reads 0 and 0 instead of 0 and 12.  This affects data input.  If
+ the data file contains x coordinates that are zero but are specified like
+ '00', '000', etc, then you will read the wrong y values.  Check any data
+ files or upgrade the SunOS.  It appears to have been fixed in SunOS 4.1.1.
+
+ Suns appear to overflow when calculating exp(-x) for large x, so `gnuplot`
+ gets an undefined result.  One work-around is to make a user-defined function
+ like e(x) = x<-500 ? 0 : exp(x).  This affects plots of Gaussians (exp(-x*x))
+ in particular, since x*x grows quite rapidly.
+
+ Microsoft C 5.1 has a nasty bug associated with the %g format for 'printf'.
+ When any of the formats "%.2g", "%.1g", "%.0g", "%.g" are used, 'printf' will
+ incorrectly print numbers in the range 1e-4 to 1e-1.  Numbers that should be
+ printed in the %e format are incorrectly printed in the %f format, with the
+ wrong number of zeros after the decimal point.  To work around this problem,
+ use the %e or %f formats explicitly.
+
+ `gnuplot`, when compiled with Microsoft C, did not work correctly on two VGA
+ displays that were tested.  The CGA, EGA and VGA drivers should probably be
+ rewritten to use the Microsoft C graphics library.  `gnuplot` compiled with
+ Borland C++ uses the Turbo C graphics drivers and does work correctly with
+ VGA displays.
+
+ VAX/VMS 4.7 C compiler release 2.4 also has a poorly implemented %g format
+ for 'printf'.  The numbers are printed numerically correct, but may not be in
+ the requested format.  The K&R second edition says that for the %g format, %e
+ is used if the exponent is less than -4 or greater than or equal to the
+ precision.  The VAX uses %e format if the exponent is less than -1.  The VAX
+ appears to take no notice of the precision when deciding whether to use %e or
+ %f for numbers less than 1.  To work around this problem, use the %e or %f
+ formats explicitly.  From the VAX C 2.4 release notes: e,E,f,F,g,G  Result
+ will always contain a decimal  point.  For g and G, trailing zeros will not
+ be removed from the result.
+
+ VAX/VMS 5.2 C compiler release 3.0 has a slightly better implemented %g
+ format than release 2.4, but not much.  Trailing decimal points are now
+ removed, but trailing zeros are still not removed from %g numbers in
+ exponential format.
+
+ The two preceding problems are actually in the libraries rather than in the
+ compilers.  Thus the problems will occur whether `gnuplot` is built using
+ either the DEC compiler or some other one (e.g. the latest gcc).
+
+ ULTRIX X11R3 has a bug that causes the X11 driver to display "every other"
+ graph.  The bug seems to be fixed in DEC's release of X11R4 so newer releases
+ of ULTRIX don't seem to have the problem.  Solutions for older sites include
+ upgrading the X11 libraries (from DEC or direct from MIT) or defining
+ ULTRIX_KLUDGE when compiling the x11.trm file.  Note that the kludge is not
+ an ideal fix, however.
+
+ The constant HUGE was incorrectly defined in the NeXT OS 2.0 operating
+ system.  HUGE should be set to 1e38 in plot.h. This error has been corrected
+ in the 2.1 version of NeXT OS.
+
+ Some older models of HP plotters do not have a page eject command 'PG'.  The
+ current HPGL driver uses this command in HPGL_reset.  This may need to be
+ removed for these plotters.  The current PCL5 driver uses HPGL/2 for text as
+ well as graphics.  This should be modified to use scalable PCL fonts.
+
+ On the Atari version, it is not possible to send output directly to the
+ printer (using `/dev/lp` as output file), since CRs are added to LFs in
+ binary output.  As a work-around, write the output to a file and copy it to
+ the printer afterwards using a shell command.
+
+ On AIX 4, the literal 'NaNq' in a datafile causes the special internal value
+ 'not-a-number' to be stored, rather than setting an internal 'undefined'
+ flag.  A workaround is to use `set missing 'NaNq'`.
+
+ There may be an up-to-date list of bugs since the release on the WWW page:
+       http://www.cs.dartmouth.edu/gnuplot_info.html
+
+ Please report any bugs to bug-gnuplot@dartmouth.edu.
diff --git a/gpelcard.tex b/gpelcard.tex
new file mode 100644
index 0000000..779c832
--- /dev/null
+++ b/gpelcard.tex
@@ -0,0 +1,491 @@
+
+%% Time-stamp: <2002/12/13 16:41:13 bruce>
+
+%% This document is copyright (C) 1998-2002 Bruce Ravel 
<ravel@phys.washington.edu>
+%% This page covers version 0.6.0 of gnuplot-mode.
+
+%% This document is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% properly describing the software it documents.
+
+%% Permission is granted to make and distribute copies of this
+%% document in electronic form provided the copyright notice and this
+%% permission are preserved on all copies.
+
+
+\documentclass[twocolumn]{article}
+\usepackage{fancybox}
+
+\setlength{\parindent}{0truecm}
+\setlength{\parskip}{1ex}
+\setlength{\hoffset}{-0.5truecm}
+\setlength{\voffset}{0truecm}
+\setlength{\topmargin}{-2.5truecm}
+\setlength{\marginparsep}{0truecm}
+\setlength{\marginparwidth}{0truecm}
+\setlength{\textheight}{25.5truecm}
+\setlength{\textwidth}{17truecm}
+\setlength{\oddsidemargin}{0truecm}
+\setlength{\evensidemargin}{1.2truecm}
+\setlength{\columnsep}{1.4truecm}
+
+\newenvironment{Boxedminipage}%
+{\begin{Sbox}\begin{minipage}}%
+  {\end{minipage}\end{Sbox}\Ovalbox{\TheSbox}}
+\newenvironment{SqBoxedminipage}%
+{\begin{Sbox}\begin{minipage}}%
+  {\end{minipage}\end{Sbox}\fbox{\TheSbox}}
+
+\def\version{{0.6.0}}
+\def\revised{{17 May, 2002}}
+\def\file#1{{\texttt{`#1'}}}
+\def\key#1{{\textrm \leavevmode\hbox{%
+  \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{%
+    \vbox{\hrule\kern-0.4pt
+     \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}%
+    \kern-0.4pt\hrule}%
+  \kern-.06em\raise0.4pt\hbox{$\rangle$}}}}
+\def\variable#1#2#3{{
+    \vspace{-0.2truecm}
+    \begin{flushright}
+      \begin{minipage}[h]{0.97\linewidth}
+        \vspace{-0.2truecm}
+        \textbf{#1}\hfill[\texttt{#2}]
+        \begin{flushright}
+          \begin{minipage}[h]{0.93\linewidth}
+            \vspace{-0.2truecm}
+            #3
+          \end{minipage}
+        \end{flushright}
+      \end{minipage}
+    \end{flushright}
+    }}
+\def\command#1#2{{
+    \vspace{-0.2truecm}
+    \begin{flushright}
+      \begin{minipage}[h]{0.97\linewidth}
+        \vspace{-0.2truecm}
+        \textbf{#1}\hfill
+        \begin{flushright}
+          \begin{minipage}[h]{0.93\linewidth}
+            \vspace{-0.4truecm}
+            #2
+          \end{minipage}
+        \end{flushright}
+      \end{minipage}
+    \end{flushright}
+    }}
+\def\Star{{$\star$}}
+
+
+\begin{document}
+
+\small
+
+\thispagestyle{empty}
+
+\begin{center}
+  \begin{Boxedminipage}{0.75\linewidth}
+    \begin{center}
+      \vspace{0.01\textheight}
+      {\Large Quick Reference for}\\
+      \vspace{0.007\textheight}
+      {\Large gnuplot-mode}
+      \vspace{0.01\textheight}
+    \end{center}
+  \end{Boxedminipage}
+\end{center}
+
+\vspace{3ex}
+
+This card describes the features of gnuplot-mode for Emacs.
+Gnuplot-mode is intended for composing scripts for the
+\textsc{gnuplot} plotting program.  It offers functions for sending
+commands or entire scripts to the \textsc{gnuplot} program as well as
+various functions to aid in composing scripts.  It works with any
+version of \textsc{gnuplot} from 3.5 to 3.8.  See the comments in the
+file \file{gnuplot.el} for instructions on installing gnuplot-mode.
+
+\vspace{2ex}
+
+\begin{minipage}[h]{\linewidth}
+  \begin{center}
+    \centerline{{\large\textbf{gnuplot-mode key sequences}}}
+    \vspace{0.2ex}
+    \begin{tabular}[h]{cl}
+      \hline \hline
+      \\[-1ex]
+      \multicolumn{2}{l}{~\quad\textbf{Gnuplot-mode buffer}}\\[0.5ex]
+      \textrm{key} & \quad description \\
+      \hline
+      \texttt{C-c C-l} & send a line to gnuplot \\
+      \texttt{C-c C-v} & send a line and move forward 1 line\\
+      \texttt{C-c C-r} & send the region to gnuplot \\
+      \texttt{C-c C-b} & send the buffer to gnuplot \\
+      \texttt{C-c C-f} & send a file to gnuplot \\
+      & \\[-1.5ex]
+      \texttt{M-\key{tab}} & complete keyword at point \\
+      \texttt{C-c C-i} & insert filename at point \\
+      \texttt{C-c C-j} & jump to next statement \\
+      \texttt{C-c C-n} & negate set option at point \\
+      \texttt{C-c C-c} & comment region \\
+      \texttt{C-c C-o} & set arguments of command at point \\
+      \texttt{S-mouse-2} & set arguments of command under mouse \\
+      \texttt{C-c C-h} & get help from the gnuplot info file \\
+      \texttt{C-c C-e} & look at the gnuplot process buffer \\
+      & \\[-1.5ex]
+      \texttt{C-c C-k} & kill the gnuplot process \\
+      \texttt{C-c C-u} & submit a bug report about gnuplot-mode \\
+      \texttt{C-c C-z} & customize gnuplot-mode \\
+      \hline
+      \\[-1ex]
+      \multicolumn{2}{l}{~\quad\textbf{Gnuplot process buffer}}\\[0.5ex]
+      \textrm{key} & \quad description \\
+      \hline
+      \texttt{M-C-p}   & plot script \\
+      \texttt{M-C-f}   & load file containing script \\
+      \hline \hline
+    \end{tabular}
+  \end{center}
+\end{minipage}
+
+\vspace{4ex}
+
+\centerline{{\large\textbf{Starting gnuplot-mode}}}
+\vspace{2ex}
+
+\command{M-x gnuplot-mode}{Start gnuplot-mode in the current buffer.}
+%
+\command{M-x gnuplot-make-buffer}{Open a new buffer in gnuplot-mode}
+
+
+
+\vfill
+
+\begin{Boxedminipage}{1.05\linewidth}
+  \begin{center}
+    \footnotesize{Gnuplot-mode homepage} \\
+    \scriptsize{%%
+      
\texttt{http://feff.phys.washington.edu/\char126ravel/software/gnuplot-mode/}}
+  \end{center}
+\end{Boxedminipage}
+\begin{flushleft}
+  {\footnotesize
+    This page {\copyright} 1998-2002 Bruce Ravel \hfill revised \revised \\
+    \texttt{<ravel@phys.washington.edu>} \\ %% \hfill printed \today \\
+    This page covers version {\version} of gnuplot-mode.
+
+    Permission is granted to make and distribute copies of this quick
+    reference provided the copyright notice and this permission are
+    preserved on all copies.}
+\end{flushleft}
+%%\vfil
+\pagebreak
+\centerline{{\large\textbf{Setting up gnuplot-mode}}}
+\vspace{2ex}
+
+Put the lines in the box below in your \file{.emacs} file or in the
+system wide start-up file to enable gnuplot-mode.  The first two lines
+make Emacs recognize the functions described in the ``Starting
+gnuplot-mode'' section on this page.  The third line causes Emacs to
+put all files ending in \file{.gp} into gnuplot-mode.  The final line
+defines a hotkey -- in this case \key{F9} -- for starting
+gnuplot-mode.
+
+\begin{SqBoxedminipage}{\linewidth}
+\begin{Verbatim}
+  (autoload 'gnuplot-mode "gnuplot"
+            "gnuplot major mode" t)
+  (autoload 'gnuplot-make-buffer "gnuplot"
+            "open a buffer in gnuplot mode" t)
+  (setq auto-mode-alist
+        (append '(("\\.gp$" . gnuplot-mode))
+                auto-mode-alist))
+  (global-set-key [(f9)] 'gnuplot-make-buffer)
+\end{Verbatim}%%$
+\end{SqBoxedminipage}
+
+
+\vspace{4ex}
+
+\begin{description}
+\item[Using the gnuplot-process buffer] \hfill \\
+  The process buffer contains an active \textsc{gnuplot} command line
+  for interacting with \textsc{gnuplot} directly.  The \texttt{M-C-p}
+  and \texttt{M-C-f} key sequences will plot using the contents of
+  the gnuplot script buffer.
+\item[Using the GUI to set command arguments] \hfill \\
+  \texttt{C-c C-c} and \texttt{S-mouse-2} are used to invoke the
+  graphical tool for setting command arguments.  Use text fields and
+  option menus to choose appropriate values.  Menus and buttons are
+  activated with the middle mouse button.  A few plot options may not
+  be fully supported.
+\item[Customizing variables] \hfill \\
+  The graphical customization tool for variables can be invoked using
+  \texttt{C-c C-z}.  Descriptions of the variables relevant to
+  gnuplot-mode can be obtained by using \texttt{gnuplot} as the
+  regular expression for \texttt{M-x apropos}.
+\item[On-line help] \hfill \\
+  Keyword completion and on-line help require that the
+  \textsc{gnuplot} info file be available and that the info-look
+  package be installed.  The info file can be made from the
+  documentation supplied with the \textsc{gnuplot} distribution and
+  the info-look package is a standard part of Emacs 20.  Users of
+  XEmacs or Emacs 19 should download \file{info-look.el} from the
+  gnuplot-mode homepage.
+\item[Using pm3d] \hfill \\
+  All features of the pm3d patch to \textsc{gnuplot} should be
+  available when using gnuplot-mode.  One particularly useful feature
+  of pm3d is the ability to push a cursor position into the
+  clipboard.  This is done by double-clicking \texttt{mouse-1} in the
+  plot window, then doing \texttt{M-x yank-clipboard-selection}
+  (usually bound to \texttt{mouse-2}) in the gnuplot script buffer.
+\end{description}
+
+
+
+\vfill
+\pagebreak
+
+%%% end of first column
+
+\begin{center}
+  \begin{Boxedminipage}{0.75\linewidth}
+    \begin{center}
+      {\large User configurable variables}
+    \end{center}
+  \end{Boxedminipage}
+\end{center}
+
+
+\variable{gnuplot-program}{gnuplot}{The name of the gnuplot
+  executable.}
+%
+\variable{gnuplot-process-name}{*gnuplot*}{The name of the gnuplot
+  process and process buffer.}
+%
+\variable{gnuplot-gnuplot-buffer}{plot.gp}{The name of the gnuplot
+  scratch buffer opened by \texttt{gnuplot-make-buffer}.}
+%
+%
+\variable{gnuplot-display-process}{'window}{Determines how to display
+  the gnuplot process buffer, either 'frame, 'window, or nil}
+%
+\variable{gnuplot-info-display}{'window}{Determines how
+  `gnuplot-get-help' displays the info file, either 'frame, 'window,
+  or nil}
+%
+\variable{gnuplot-echo-command-line-flag}{t}{If lines that you send to
+  gnuplot from the gnuplot-mode buffer are not appearing at the
+  gnuplot prompt in the process buffer, set this to nil and restart
+  emacs.}
+%
+\variable{gnuplot-delay}{0.01}{Time in seconds to allow the gnuplot
+  display to update.  Increase this number if the prompts and lines
+  are displayed out of order.}
+%
+\variable{gnuplot-quote-character}{'}{Quotation character used when
+  inserting a filename into the script (single, double, or no quote).}
+
+\variable{gnuplot-buffer-max-size}{1000}{The maximum size in lines of
+the gnuplot buffer.  Excess lines are trimmed.  0 means to never trim.}
+
+%%\vspace{1ex}
+\begin{center}
+  \begin{Boxedminipage}{0.75\linewidth}
+    \begin{center}
+      {\large Hook variables}
+    \end{center}
+  \end{Boxedminipage}
+\end{center}
+
+\variable{gnuplot-mode-hook}{nil}{Functions run when gnuplot minor
+  mode is entered.}
+%
+\variable{gnuplot-load-hook}{nil}{Functions run when gnuplot.el is
+  first loaded.}
+%
+\variable{gnuplot-after-plot-hook}{nil}{Functions run after gnuplot
+  plots an entire buffer.  See the doc string for
+  \texttt{gnuplot-recently-sent}.}
+%
+\variable{gnuplot-comint-setup-hook}{nil}{Functions run after setting
+  up the gnuplot process buffer in comint mode.}
+%
+\variable{gnuplot-info-hook}{nil}{Functions run before setting up
+  info-look in the gnuplot-mode buffer.}
+%
+
+
+
+\vfill\eject
+
+
+\begin{center}
+  \begin{Boxedminipage}{0.75\linewidth}
+    \begin{center}
+      {\large Insertion variables}
+    \end{center}
+  \end{Boxedminipage}
+\end{center}
+
+\noindent These variables control the \texttt{Insertions} pull-down
+menu, which can be used to insert \textsc{gnuplot} commands into the
+script.  The various sub-menu variables can be used to customize which
+commands appear in the \texttt{Insertions} menu.
+
+\vspace{2ex}
+%
+\variable{gnuplot-insertions-menu-flag}{t}{Non-nil means to display
+  the \texttt{Insertions} menu in the menubar.}
+%
+\variable{gnuplot-insertions-show-help-flag}{nil}{Non-nil means to
+  display help from info file when using the \texttt{Insertions}
+  menu.}
+%
+\variable{gnuplot-insertions-adornments}{\Star}{Contents of the
+  \texttt{adornments} sub-menu.}
+%
+\variable{gnuplot-insertions-plot-options}{\Star}{Contents of the
+  \texttt{plot-options} sub-menu.}
+%
+\variable{gnuplot-insertions-terminal}{\Star}{Contents of the
+  \texttt{terminal} sub-menu.}
+%
+\variable{gnuplot-insertions-x-axis}{\Star}{Contents of the \texttt{x
+    axis} sub-menu.}
+%
+\variable{gnuplot-insertions-x2-axis}{\Star}{Contents of the \texttt{x2
+    axis} sub-menu.}
+%
+\variable{gnuplot-insertions-y-axis}{\Star}{Contents of the \texttt{y
+    axis} sub-menu.}
+%
+\variable{gnuplot-insertions-y2-axis}{\Star}{Contents of the \texttt{y2
+    axis} sub-menu.}
+%
+\variable{gnuplot-insertions-z-axis}{\Star}{Contents of the \texttt{z
+    axis} sub-menu.}
+%
+\variable{gnuplot-insertions-parametric-plots}{\Star}{Contents of the
+  \texttt{parametric plots} sub-menu.}
+%
+\variable{gnuplot-insertions-polar-plots}{\Star}{Contents of the
+  \texttt{polar plots} sub-menu.}
+%
+\variable{gnuplot-insertions-surface-plots}{\Star}{Contents of the
+  \texttt{surface plots} sub-menu.}
+
+
+
+\begin{center}
+  \begin{Boxedminipage}{0.75\linewidth}
+    \begin{center}
+      {\large Toolbar variables}
+    \end{center}
+  \end{Boxedminipage}
+\end{center}
+
+\noindent These variables control the use and location of the
+toolbar in XEmacs.  The toolbar has buttons equivalent to the key
+sequences \texttt{C-c C-l}, \texttt{C-c C-r}, \texttt{C-c C-b},
+\texttt{C-c C-e}, and \texttt{C-c C-h}.
+
+\vspace{2ex}
+
+%
+\variable{gnuplot-display-toolbar-flag}{nil}{Non-nil means to display
+  a toolbar if using XEmacs.}
+%
+\variable{gnuplot-use-toolbar}{left-toolbar}{Location of XEmacs
+  toolbar.  Valid values are \texttt{left-toolbar},
+  \texttt{right-toolbar}, \texttt{top-toolbar}, \texttt{bottom-toolbar},
+  \texttt{default-toolbar} and nil.}
+%
+
+\begin{center}
+  \begin{Boxedminipage}{0.75\linewidth}
+    \begin{center}
+      {\large Set Arguments}
+    \end{center}
+  \end{Boxedminipage}
+\end{center}
+
+\noindent These variables control the behavior of the graphical
+interface to setting command arguments.  \texttt{C-c C-c} with point
+over a command or \texttt{S-mouse-2} with the mouse cursor over a
+command will cause a small frame to pop open with which you can set
+command arguments.  Green button with bold text are bound to pup-up
+menus --- use the mouse-2 to select an item from the menu.  Grey fields
+are for filling in strings or numbers.  Hit the \textbf{[Set Options]}
+button with \texttt{mouse-2} to insert command arguments into the
+script.  You can also use the \key{tab} key to move among the widgets
+and \key{ret} to push the buttons.
+
+\vspace{2ex}
+%
+\variable{gnuplot-gui-popup-flag}{nil}{When non-nil an argument
+setting frame will pop open whenever the \texttt{Insertions} menu is
+used.}
+%
+\variable{gnuplot-gui-plot-splot-fit-style}{'simple}{\texttt{'simple}
+  or \texttt{'complete} -- describes the extent of the list of
+  properties of for plot, splot, and fit in the GUI.}
+%
+\variable{gnuplot-gui-frame-plist}{\Star}{Property list of parameters
+  controlling the argument setting frame.  Used by XEmacs.}
+%
+\variable{gnuplot-gui-frame-parameters}{\Star}{List of parameters
+  controlling the argument setting frame.  Used by Emacs.}
+%
+\variable{gnuplot-gui-fontname-list}{\Star}{List of font available on your
+  computer to the terminal drivers.}
+%
+
+
+\begin{center}
+  \begin{Boxedminipage}{0.75\linewidth}
+    \begin{center}
+      {\large Faces}
+    \end{center}
+  \end{Boxedminipage}
+\end{center}
+
+\noindent These are various faces defined for use with gnuplot-mode.
+\vspace{2ex}
+
+%
+\variable{gnuplot-prompt-face}{firebrick}{Color of gnuplot prompt (on a
+  light background) in process buffer.  Bold and underlined on a
+  monochrome display.}
+%
+\variable{gnuplot-gui-menu-face}{dark olive green}{Color of menu
+  buttons (on a light background) in the argument setting frame.
+  Italic on a monochrome display.}
+%
+\variable{gnuplot-gui-button-face}{sienna}{Color of push buttons (on a
+  light background) in the argument setting frame.  Italic on a
+  monochrome display.}
+%
+\variable{gnuplot-gui-label-face}{dark slate blue}{Color of buttons (on
+  a light background) used to set label lists in the argument setting
+  frame.  Italic on a monochrome display.}
+%
+
+\vfill
+\hrule
+\vspace{0.5ex}
+\begin{flushleft}
+  \footnotesize{Variables marked with {\Star} have default values that
+    are too long to print here.}
+\end{flushleft}
+
+\end{document}
+
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/info-look.20.2.el b/info-look.20.2.el
new file mode 100644
index 0000000..c13b679
--- /dev/null
+++ b/info-look.20.2.el
@@ -0,0 +1,527 @@
+;;; info-look.el --- major-mode-sensitive Info index lookup facility.
+;; An older version of this was known as libc.el.
+
+;; Copyright (C) 1995, 1996, 1997 Ralph Schleicher.
+
+;; Author: Ralph Schleicher <rs@purple.UL.BaWue.DE>
+;; Keywords: help languages
+
+;; This file is not part of GNU Emacs. (but is slightly modified from
+;; a file that is a part of GNU Emacs -- see below)
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;; Bruce Ravel <ravel@phys.washington.edu> made two chanegs to this
+;; file:
+;;  1. Added a check for XEmacs
+;;  2. Added (format "%s" (match-string 1)) in function
+;;     `info-lookup-make-completions' so that text properties are not
+;;     grabbed.
+
+;;; Code:
+
+(require 'info)
+;; next two lines added by Bruce Ravel <ravel@phys.washington.edu> to
+;; make this file compile properly under XEmacs.
+(eval-and-compile
+  (if (string-match "XEmacs" emacs-version)
+      (require 'overlay)))
+
+(defvar info-lookup-mode nil
+  "*Symbol of the current buffer's help mode.
+Provide help according to the buffer's major mode if value is nil.
+Automatically becomes buffer local when set in any fashion.")
+(make-variable-buffer-local 'info-lookup-mode)
+
+(defvar info-lookup-other-window-flag t
+  "*Non-nil means pop up the Info buffer in another window.")
+
+(defvar info-lookup-highlight-face 'highlight
+  "*Face for highlighting looked up help items.
+Setting this variable to nil disables highlighting.")
+
+(defvar info-lookup-highlight-overlay nil
+  "Overlay object used for highlighting.")
+
+(defvar info-lookup-history nil
+  "History of previous input lines.")
+
+(defvar info-lookup-alist '((symbol . info-lookup-symbol-alist)
+                           (file . info-lookup-file-alist))
+  "*Alist of known help topics.
+Cons cells are of the form
+
+    (HELP-TOPIC . VARIABLE)
+
+HELP-TOPIC is the symbol of a help topic.
+VARIABLE is a variable storing HELP-TOPIC's public data.
+ Value is an alist with elements of the form
+
+    (HELP-MODE REGEXP IGNORE-CASE DOC-SPEC PARSE-RULE OTHER-MODES)
+
+HELP-MODE is a mode's symbol.
+REGEXP is a regular expression matching those help items whose
+ documentation can be looked up via DOC-SPEC.
+IGNORE-CASE is non-nil if help items are case insensitive.
+DOC-SPEC is a list of documentation specifications of the form
+
+    (INFO-NODE TRANS-FUNC PREFIX SUFFIX)
+
+INFO-NODE is the name (including file name part) of an Info index.
+TRANS-FUNC is a function translating index entries into help items;
+ nil means add only those index entries matching REGEXP, a string
+ means prepend string to the first word of all index entries.
+PREFIX and SUFFIX are parts of a regular expression.  If one of
+ them is non-nil then search the help item's Info node for the
+ first occurrence of the regular expression `PREFIX ITEM SUFFIX'.
+ ITEM will be highlighted with `info-lookup-highlight-face' if this
+ variable is not nil.
+PARSE-RULE is either the symbol name of a function or a regular
+ expression for guessing the default help item at point.  Fuzzy
+ regular expressions like \"[_a-zA-Z0-9]+\" do a better job if
+ there are no clear delimiters; do not try to write too complex
+ expressions.  PARSE-RULE defaults to REGEXP.
+OTHER-MODES is a list of cross references to other help modes.")
+
+(defsubst info-lookup->topic-value (topic)
+  (symbol-value (cdr (assoc topic info-lookup-alist))))
+
+(defsubst info-lookup->mode-value (topic mode)
+  (assoc mode (info-lookup->topic-value topic)))
+
+(defsubst info-lookup->regexp (topic mode)
+  (nth 1 (info-lookup->mode-value topic mode)))
+
+(defsubst info-lookup->ignore-case (topic mode)
+  (nth 2 (info-lookup->mode-value topic mode)))
+
+(defsubst info-lookup->doc-spec (topic mode)
+  (nth 3 (info-lookup->mode-value topic mode)))
+
+(defsubst info-lookup->parse-rule (topic mode)
+  (nth 4 (info-lookup->mode-value topic mode)))
+
+(defsubst info-lookup->other-modes (topic mode)
+  (nth 5 (info-lookup->mode-value topic mode)))
+
+(defvar info-lookup-cache nil
+  "Cache storing data maintained automatically by the program.
+Value is an alist with cons cell of the form
+
+    (HELP-TOPIC . ((HELP-MODE INITIALIZED COMPLETIONS REFER-MODES) ...))
+
+HELP-TOPIC is the symbol of a help topic.
+HELP-MODE is a mode's symbol.
+INITIALIZED is nil if HELP-MODE is uninitialized, t if
+ HELP-MODE is initialized, and `0' means HELP-MODE is
+ initialized but void.
+COMPLETIONS is an alist of documented help items.
+REFER-MODES is a list of other help modes to use.")
+
+(defsubst info-lookup->cache (topic)
+  (or (assoc topic info-lookup-cache)
+      (car (setq info-lookup-cache
+                (cons (cons topic nil)
+                      info-lookup-cache)))))
+
+(defsubst info-lookup->topic-cache (topic)
+  (cdr (info-lookup->cache topic)))
+
+(defsubst info-lookup->mode-cache (topic mode)
+  (assoc mode (info-lookup->topic-cache topic)))
+
+(defsubst info-lookup->initialized (topic mode)
+  (nth 1 (info-lookup->mode-cache topic mode)))
+
+(defsubst info-lookup->completions (topic mode)
+  (or (info-lookup->initialized topic mode)
+      (info-lookup-setup-mode topic mode))
+  (nth 2 (info-lookup->mode-cache topic mode)))
+
+(defsubst info-lookup->refer-modes (topic mode)
+  (or (info-lookup->initialized topic mode)
+      (info-lookup-setup-mode topic mode))
+  (nth 3 (info-lookup->mode-cache topic mode)))
+
+(defsubst info-lookup->all-modes (topic mode)
+  (cons mode (info-lookup->refer-modes topic mode)))
+
+(defvar info-lookup-symbol-alist
+  '((autoconf-mode
+     "A[CM]_[_A-Z0-9]+" nil
+     (("(autoconf)Macro Index" "AC_"
+       "^[ \t]+- \\(Macro\\|Variable\\): .*\\<" "\\>")
+      ("(automake)Index" nil
+       "^[ \t]*`" "'"))
+     ;; Autoconf symbols are M4 macros.  Thus use M4's parser.
+     ignore
+     (m4-mode))
+    (bison-mode
+     "[:;|]\\|%\\([%{}]\\|[_a-z]+\\)\\|YY[_A-Z]+\\|yy[_a-z]+" nil
+     (("(bison)Index" nil
+       "`" "'"))
+     "[:;|]\\|%\\([%{}]\\|[_a-zA-Z][_a-zA-Z0-9]*\\)"
+     (c-mode))
+    (c-mode
+     "\\(struct \\|union \\|enum \\)?[_a-zA-Z][_a-zA-Z0-9]*" nil
+     (("(libc)Function Index" nil
+       "^[ \t]+- \\(Function\\|Macro\\): .*\\<" "\\>")
+      ("(libc)Variable Index" nil
+       "^[ \t]+- \\(Variable\\|Macro\\): .*\\<" "\\>")
+      ("(libc)Type Index" nil
+       "^[ \t]+- Data Type: \\<" "\\>")
+      ("(termcap)Var Index" nil
+       "^[ \t]*`" "'"))
+     info-lookup-guess-c-symbol)
+    (m4-mode
+     "[_a-zA-Z][_a-zA-Z0-9]*" nil
+     (("(m4)Macro index"))
+     "[_a-zA-Z0-9]+")
+    (makefile-mode
+     "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z][_a-zA-Z0-9-]*" nil
+     (("(make)Name Index" nil
+       "^[ \t]*`" "'"))
+     "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z0-9-]+")
+    (texinfo-mode
+     "@\\([a-zA-Z]+\\|[^a-zA-Z]\\)" nil
+     (("(texinfo)Command and Variable Index"
+       ;; Ignore Emacs commands and prepend a `@'.
+       (lambda (item)
+        (if (string-match "^\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\( .*\\)?$" item)
+            (concat "@" (match-string 1 item))))
+       "`" "'"))))
+  "*Alist of help specifications for symbol names.
+See the documentation of the variable `info-lookup-alist' for more details.")
+
+(defvar info-lookup-file-alist
+  '((c-mode
+     "[_a-zA-Z0-9./+-]+" nil
+     (("(libc)File Index"))))
+  "*Alist of help specifications for file names.
+See the documentation of the variable `info-lookup-alist' for more details.")
+
+;;;###autoload
+(defun info-lookup-reset ()
+  "Throw away all cached data.
+This command is useful if the user wants to start at the beginning without
+quitting Emacs, for example, after some Info documents were updated on the
+system."
+  (interactive)
+  (setq info-lookup-cache nil))
+
+;;;###autoload
+(defun info-lookup-symbol (symbol &optional mode)
+  "Display the documentation of a symbol.
+If called interactively, SYMBOL will be read from the mini-buffer.
+Prefix argument means unconditionally insert the default symbol name
+into the mini-buffer so that it can be edited.
+The default symbol is the one found at point."
+  (interactive
+   (info-lookup-interactive-arguments 'symbol))
+  (info-lookup 'symbol symbol mode))
+
+;;;###autoload
+(defun info-lookup-file (file &optional mode)
+  "Display the documentation of a file.
+If called interactively, FILE will be read from the mini-buffer.
+Prefix argument means unconditionally insert the default file name
+into the mini-buffer so that it can be edited.
+The default file name is the one found at point."
+  (interactive
+   (info-lookup-interactive-arguments 'file))
+  (info-lookup 'file file mode))
+
+(defun info-lookup-interactive-arguments (topic)
+  "Return default value and help mode for help topic TOPIC."
+  (let* ((mode (if (info-lookup->mode-value
+                   topic (or info-lookup-mode major-mode))
+                  (or info-lookup-mode major-mode)
+                (info-lookup-change-mode topic)))
+        (completions (info-lookup->completions topic mode))
+        (default (info-lookup-guess-default topic mode))
+        (input (if (or current-prefix-arg (not (assoc default completions)))
+                   default))
+        (completion-ignore-case (info-lookup->ignore-case topic mode))
+        (enable-recursive-minibuffers t)
+        (value (completing-read
+                (if (and default (not input))
+                    (format "Describe %s (default %s): " topic default)
+                  (format "Describe %s: " topic))
+                completions nil nil input 'info-lookup-history)))
+    (list (if (equal value "") default value) mode)))
+
+(defun info-lookup-change-mode (topic)
+  (let* ((completions (mapcar (lambda (arg)
+                               (cons (symbol-name (car arg)) (car arg)))
+                             (info-lookup->topic-value topic)))
+        (mode (completing-read
+               (format "Use %s help mode: " topic)
+               completions nil t nil 'info-lookup-history)))
+    (or (setq mode (cdr (assoc mode completions)))
+       (error "No %s help available" topic))
+    (or (info-lookup->mode-value topic mode)
+       (error "No %s help available for `%s'" topic mode))
+    (setq info-lookup-mode mode)))
+
+(defun info-lookup (topic item mode)
+  "Display the documentation of a help item."
+  (if (not mode)
+      (setq mode (or info-lookup-mode major-mode)))
+  (or (info-lookup->mode-value topic mode)
+      (error "No %s help available for `%s'" topic mode))
+  (let ((entry (or (assoc (if (info-lookup->ignore-case topic mode)
+                             (downcase item) item)
+                         (info-lookup->completions topic mode))
+                  (error "Not documented as a %s: %s" topic (or item ""))))
+       (modes (info-lookup->all-modes topic mode))
+       (window (selected-window))
+       found doc-spec node prefix suffix)
+    (if (not info-lookup-other-window-flag)
+       (info)
+      (save-window-excursion (info))
+      (switch-to-buffer-other-window "*info*"))
+    (while (and (not found) modes)
+      (setq doc-spec (info-lookup->doc-spec topic (car modes)))
+      (while (and (not found) doc-spec)
+       (setq node (nth 0 (car doc-spec))
+             prefix (nth 2 (car doc-spec))
+             suffix (nth 3 (car doc-spec)))
+       (condition-case nil
+           (progn
+             (Info-goto-node node)
+             (Info-menu (or (cdr entry) item))
+             (setq found t)
+             (if (or prefix suffix)
+                 (let ((case-fold-search
+                        (info-lookup->ignore-case topic (car modes)))
+                       (buffer-read-only nil))
+                   (goto-char (point-min))
+                   (re-search-forward
+                    (concat prefix (regexp-quote item) suffix))
+                   (goto-char (match-beginning 0))
+                   (and window-system info-lookup-highlight-face
+                        ;; Search again for ITEM so that the first
+                        ;; occurence of ITEM will be highlighted.
+                        (re-search-forward (regexp-quote item))
+                        (let ((start (match-beginning 0))
+                              (end (match-end 0)))
+                          (if (overlayp info-lookup-highlight-overlay)
+                              (move-overlay info-lookup-highlight-overlay
+                                            start end (current-buffer))
+                            (setq info-lookup-highlight-overlay
+                                  (make-overlay start end))))
+                        (overlay-put info-lookup-highlight-overlay
+                                     'face info-lookup-highlight-face)))))
+         (error nil))
+       (setq doc-spec (cdr doc-spec)))
+      (setq modes (cdr modes)))
+    ;; Don't leave the Info buffer if the help item couldn't be looked up.
+    (if (and info-lookup-other-window-flag found)
+       (select-window window))))
+
+(defun info-lookup-setup-mode (topic mode)
+  "Initialize the internal data structure."
+  (or (info-lookup->initialized topic mode)
+      (let (cell data (initialized 0) completions refer-modes)
+       (if (not (info-lookup->mode-value topic mode))
+           (message "No %s help available for `%s'" topic mode)
+         ;; Recursively setup cross references.
+         ;; But refer only to non-void modes.
+         (mapcar (lambda (arg)
+                   (or (info-lookup->initialized topic arg)
+                       (info-lookup-setup-mode topic arg))
+                   (and (eq (info-lookup->initialized topic arg) t)
+                        (setq refer-modes (cons arg refer-modes))))
+                 (info-lookup->other-modes topic mode))
+         (setq refer-modes (nreverse refer-modes))
+         ;; Build the full completion alist.
+         (setq completions
+               (nconc (info-lookup-make-completions topic mode)
+                      (apply 'append
+                             (mapcar (lambda (arg)
+                                       (info-lookup->completions topic arg))
+                                     refer-modes))))
+         (setq initialized t))
+       ;; Update `info-lookup-cache'.
+       (setq cell (info-lookup->mode-cache topic mode)
+             data (list initialized completions refer-modes))
+       (if (not cell)
+           (setcdr (info-lookup->cache topic)
+                   (cons (cons mode data) (info-lookup->topic-cache topic)))
+         (setcdr cell data))
+       initialized)))
+
+(defun info-lookup-make-completions (topic mode)
+  "Create a unique alist from all index entries."
+  (condition-case nil
+      (let ((doc-spec (info-lookup->doc-spec topic mode))
+           (regexp (concat "^\\(" (info-lookup->regexp topic mode)
+                           "\\)\\([ \t].*\\)?$"))
+           node trans entry item prefix result)
+       (save-window-excursion
+         (info)
+         (while doc-spec
+           (setq node (nth 0 (car doc-spec))
+                 trans (cond ((eq (nth 1 (car doc-spec)) nil)
+                              (lambda (arg)
+                                (if (string-match regexp arg)
+                                    (match-string 1 arg))))
+                             ((stringp (nth 1 (car doc-spec)))
+                              (setq prefix (nth 1 (car doc-spec)))
+                              (lambda (arg)
+                                (if (string-match "^\\([^: \t\n]+\\)" arg)
+                                    (concat prefix (match-string 1 arg)))))
+                             (t (nth 1 (car doc-spec)))))
+           (message "Processing Info node \"%s\"..." node)
+           (Info-goto-node node)
+           (goto-char (point-min))
+           (and (search-forward "\n* Menu:" nil t)
+                (while (re-search-forward "\n\\* \\([^:\t\n]*\\):" nil t)
+                  ;; Bruce Ravel added format
+                  ;; w/o format, this grabs text properties
+                  (setq entry (format "%s" (match-string 1))
+                        item (funcall trans entry))
+                  (and (info-lookup->ignore-case topic mode)
+                       (setq item (downcase item)))
+                  (and (string-equal entry item)
+                       (setq entry nil))
+                  (or (assoc item result)
+                      (setq result (cons (cons item entry) result)))))
+           (message "Processing Info node \"%s\"... done" node)
+           (setq doc-spec (cdr doc-spec)))
+         (Info-directory))
+       result)
+    (error nil)))
+
+(defun info-lookup-guess-default (topic mode)
+  "Pick up default item at point (with favor to look back).
+Return nil if there is nothing appropriate."
+  (let ((modes (info-lookup->all-modes topic mode))
+       (start (point)) guess whitespace)
+    (while (and (not guess) modes)
+      (setq guess (info-lookup-guess-default* topic (car modes))
+           modes (cdr modes))
+      (goto-char start))
+    ;; Collapse whitespace characters.
+    (and guess (concat (delete nil (mapcar (lambda (ch)
+                                            (if (or (char-equal ch ? )
+                                                    (char-equal ch ?\t)
+                                                    (char-equal ch ?\n))
+                                                (if (not whitespace)
+                                                    (setq whitespace ? ))
+                                              (setq whitespace nil) ch))
+                                          guess))))))
+
+(defun info-lookup-guess-default* (topic mode)
+  (let ((case-fold-search (info-lookup->ignore-case topic mode))
+       (rule (or (info-lookup->parse-rule topic mode)
+                 (info-lookup->regexp topic mode)))
+       (start (point)) end regexp subexp result)
+    (if (symbolp rule)
+       (setq result (funcall rule))
+      (if (consp rule)
+         (setq regexp (car rule)
+               subexp (cdr rule))
+       (setq regexp rule
+             subexp 0))
+      (skip-chars-backward " \t\n") (setq end (point))
+      (while (and (re-search-backward regexp nil t)
+                 (looking-at regexp)
+                 (>= (match-end 0) end))
+       (setq result (match-string subexp)))
+      (if (not result)
+         (progn
+           (goto-char start)
+           (skip-chars-forward " \t\n")
+           (and (looking-at regexp)
+                (setq result (match-string subexp))))))
+    result))
+
+(defun info-lookup-guess-c-symbol ()
+  "Get the C symbol at point."
+  (condition-case nil
+      (progn
+       (backward-sexp)
+       (let ((start (point)) prefix name)
+         ;; Test for a leading `struct', `union', or `enum' keyword
+         ;; but ignore names like `foo_struct'.
+         (setq prefix (and (< (skip-chars-backward " \t\n") 0)
+                           (< (skip-chars-backward "_a-zA-Z0-9") 0)
+                           (looking-at "\\(struct\\|union\\|enum\\)\\s ")
+                           (concat (match-string 1) " ")))
+         (goto-char start)
+         (and (looking-at "[_a-zA-Z][_a-zA-Z0-9]*")
+              (setq name (match-string 0)))
+         ;; Caveat!  Look forward if point is at `struct' etc.
+         (and (not prefix)
+              (or (string-equal name "struct")
+                  (string-equal name "union")
+                  (string-equal name "enum"))
+              (looking-at "[a-z]+\\s +\\([_a-zA-Z][_a-zA-Z0-9]*\\)")
+              (setq prefix (concat name " ")
+                    name (match-string 1)))
+         (and (or prefix name)
+              (concat prefix name))))
+    (error nil)))
+
+;;;###autoload
+(defun info-complete-symbol (&optional mode)
+  "Perform completion on symbol preceding point."
+  (interactive)
+  (info-complete 'symbol
+                (or mode
+                    (if (info-lookup->mode-value
+                         'symbol (or info-lookup-mode major-mode))
+                        (or info-lookup-mode major-mode)
+                      (info-lookup-change-mode 'symbol)))))
+
+;;;###autoload
+(defun info-complete-file (&optional mode)
+  "Perform completion on file preceding point."
+  (interactive
+   (list (if (info-lookup->mode-value
+             'file (or info-lookup-mode major-mode))
+            (or info-lookup-mode major-mode)
+          (info-lookup-change-mode 'file))))
+  (info-complete 'file mode))
+
+(defun info-complete (topic mode)
+  "Try to complete a help item."
+  (barf-if-buffer-read-only)
+  (if (not mode)
+      (setq mode (or info-lookup-mode major-mode)))
+  (or (info-lookup->mode-value topic mode)
+      (error "No %s completion available for `%s'" topic mode))
+  (let ((modes (info-lookup->all-modes topic mode))
+       (start (point)) try completion)
+    (while (and (not try) modes)
+      (setq mode (car modes)
+           modes (cdr modes)
+           try (info-lookup-guess-default* topic mode))
+      (goto-char start))
+    (and (not try)
+        (error "Found no %s to complete" topic))
+    (setq completion (try-completion
+                     try (info-lookup->completions topic mode)))
+    (cond ((not completion)
+          (ding))
+         ((stringp completion)
+          (delete-region (- start (length try)) start)
+          (insert completion)))))
+
+(provide 'info-look)
+
+;;; info-look.el ends here
diff --git a/info-look.20.3.el b/info-look.20.3.el
new file mode 100644
index 0000000..1089260
--- /dev/null
+++ b/info-look.20.3.el
@@ -0,0 +1,758 @@
+;;; info-look.el --- major-mode-sensitive Info index lookup facility.
+;; An older version of this was known as libc.el.
+
+;; Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+;; Author: Ralph Schleicher <rs@purple.UL.BaWue.DE>
+;; Keywords: help languages
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Code:
+
+(require 'info)
+(eval-and-compile
+  (condition-case nil
+      (require 'custom)
+    (error
+     (defmacro defgroup (&rest arg)
+       nil)
+     (defmacro defcustom (symbol value doc &rest arg)
+       `(defvar ,symbol ,value ,doc ,@arg)))))
+
+(defgroup info-lookup nil
+  "Major mode sensitive help agent."
+  :group 'help :group 'languages)
+
+(defvar info-lookup-mode nil
+  "Symbol of the current buffer's help mode.
+Help is provided according to the buffer's major mode if value is nil.
+Automatically becomes buffer local when set in any fashion.")
+(make-variable-buffer-local 'info-lookup-mode)
+
+(defcustom info-lookup-other-window-flag t
+  "Non-nil means pop up the Info buffer in another window."
+  :group 'info-lookup :type 'boolean)
+
+(defcustom info-lookup-highlight-face 'highlight
+  "Face for highlighting looked up help items.
+Setting this variable to nil disables highlighting."
+  :group 'info-lookup :type 'face)
+
+(defvar info-lookup-highlight-overlay nil
+  "Overlay object used for highlighting.")
+
+(defcustom info-lookup-file-name-alist
+  '(("\\`configure\\.in\\'" . autoconf-mode)
+    ("\\`aclocal\\.m4\\'" . autoconf-mode)
+    ("\\`acsite\\.m4\\'" . autoconf-mode)
+    ("\\`acinclude\\.m4\\'" . autoconf-mode))
+  "Alist of file names handled specially.
+List elements are cons cells of the form
+
+    (REGEXP . MODE)
+
+If a file name matches REGEXP, then use help mode MODE instead of the
+buffer's major mode."
+  :group 'info-lookup :type '(repeat (cons (string :tag "Regexp")
+                                          (symbol :tag "Mode"))))
+
+(defvar info-lookup-history nil
+  "History of previous input lines.")
+
+(defvar info-lookup-alist nil
+  "Alist of known help topics.
+Cons cells are of the form
+
+    (HELP-TOPIC . HELP-DATA)
+
+HELP-TOPIC is the symbol of a help topic.
+HELP-DATA is a HELP-TOPIC's public data set.
+ Value is an alist with elements of the form
+
+    (HELP-MODE REGEXP IGNORE-CASE DOC-SPEC PARSE-RULE OTHER-MODES)
+
+HELP-MODE is a mode's symbol.
+REGEXP is a regular expression matching those help items whose
+ documentation can be looked up via DOC-SPEC.
+IGNORE-CASE is non-nil if help items are case insensitive.
+DOC-SPEC is a list of documentation specifications of the form
+
+    (INFO-NODE TRANS-FUNC PREFIX SUFFIX)
+
+INFO-NODE is the name (including file name part) of an Info index.
+TRANS-FUNC is a function translating index entries into help items;
+ nil means add only those index entries matching REGEXP, a string
+ means prepend string to the first word of all index entries.
+PREFIX and SUFFIX are parts of a regular expression.  If one of
+ them is non-nil then search the help item's Info node for the
+ first occurrence of the regular expression `PREFIX ITEM SUFFIX'.
+ ITEM will be highlighted with `info-lookup-highlight-face' if this
+ variable is not nil.
+PARSE-RULE is either the symbol name of a function or a regular
+ expression for guessing the default help item at point.  Fuzzy
+ regular expressions like \"[_a-zA-Z0-9]+\" do a better job if
+ there are no clear delimiters; do not try to write too complex
+ expressions.  PARSE-RULE defaults to REGEXP.
+OTHER-MODES is a list of cross references to other help modes.")
+
+(defsubst info-lookup->topic-value (topic)
+  (cdr (assoc topic info-lookup-alist)))
+
+(defsubst info-lookup->mode-value (topic mode)
+  (assoc mode (info-lookup->topic-value topic)))
+
+(defsubst info-lookup->regexp (topic mode)
+  (nth 1 (info-lookup->mode-value topic mode)))
+
+(defsubst info-lookup->ignore-case (topic mode)
+  (nth 2 (info-lookup->mode-value topic mode)))
+
+(defsubst info-lookup->doc-spec (topic mode)
+  (nth 3 (info-lookup->mode-value topic mode)))
+
+(defsubst info-lookup->parse-rule (topic mode)
+  (nth 4 (info-lookup->mode-value topic mode)))
+
+(defsubst info-lookup->other-modes (topic mode)
+  (nth 5 (info-lookup->mode-value topic mode)))
+
+(eval-and-compile
+  (mapcar (lambda (keyword)
+           (or (boundp keyword)
+               (set keyword keyword)))
+         '(:topic :mode :regexp :ignore-case
+           :doc-spec :parse-rule :other-modes)))
+
+(defun info-lookup-add-help (&rest arg)
+  "Add or update a help specification.
+Function arguments are one or more options of the form
+
+    KEYWORD ARGUMENT
+
+KEYWORD is either `:topic', `:mode', `:regexp', `:ignore-case',
+ `:doc-spec', `:parse-rule', or `:other-modes'.
+ARGUMENT has a value as explained in the documentation of the
+ variable `info-lookup-alist'.
+
+If no topic or mode option has been specified, then the help topic defaults
+to `symbol', and the help mode defaults to the current major mode."
+  (apply 'info-lookup-add-help* nil arg))
+
+(defun info-lookup-maybe-add-help (&rest arg)
+  "Add a help specification iff no one is defined.
+See the documentation of the function `info-lookup-add-help'
+for more details."
+  (apply 'info-lookup-add-help* t arg))
+
+(defun info-lookup-add-help* (maybe &rest arg)
+  (let (topic mode regexp ignore-case doc-spec
+             parse-rule other-modes keyword value)
+    (setq topic 'symbol
+         mode major-mode
+         regexp "\\w+")
+    (while arg
+      (setq keyword (car arg))
+      (or (symbolp keyword)
+         (error "Junk in argument list \"%S\"" arg))
+      (setq arg (cdr arg))
+      (and (null arg)
+          (error "Keyword \"%S\" is missing an argument" keyword))
+      (setq value (car arg)
+           arg (cdr arg))
+      (cond ((eq keyword :topic)
+            (setq topic value))
+           ((eq keyword :mode)
+            (setq mode value))
+           ((eq keyword :regexp)
+            (setq regexp value))
+           ((eq keyword :ignore-case)
+            (setq ignore-case value))
+           ((eq keyword :doc-spec)
+            (setq doc-spec value))
+           ((eq keyword :parse-rule)
+            (setq parse-rule value))
+           ((eq keyword :other-modes)
+            (setq other-modes value))
+           (t
+            (error "Unknown keyword \"%S\"" keyword))))
+    (or (and maybe (info-lookup->mode-value topic mode))
+       (let* ((data (list regexp ignore-case doc-spec parse-rule other-modes))
+              (topic-cell (or (assoc topic info-lookup-alist)
+                              (car (setq info-lookup-alist
+                                         (cons (cons topic nil)
+                                               info-lookup-alist)))))
+              (mode-cell (assoc mode topic-cell)))
+         (if (null mode-cell)
+             (setcdr topic-cell (cons (cons mode data) (cdr topic-cell)))
+           (setcdr mode-cell data))))
+    nil))
+
+(defvar info-lookup-cache nil
+  "Cache storing data maintained automatically by the program.
+Value is an alist with cons cell of the form
+
+    (HELP-TOPIC . ((HELP-MODE INITIALIZED COMPLETIONS REFER-MODES) ...))
+
+HELP-TOPIC is the symbol of a help topic.
+HELP-MODE is a mode's symbol.
+INITIALIZED is nil if HELP-MODE is uninitialized, t if
+ HELP-MODE is initialized, and `0' means HELP-MODE is
+ initialized but void.
+COMPLETIONS is an alist of documented help items.
+REFER-MODES is a list of other help modes to use.")
+
+(defsubst info-lookup->cache (topic)
+  (or (assoc topic info-lookup-cache)
+      (car (setq info-lookup-cache
+                (cons (cons topic nil)
+                      info-lookup-cache)))))
+
+(defun info-lookup->topic-cache (topic)
+  (cdr (info-lookup->cache topic)))
+
+(defun info-lookup->mode-cache (topic mode)
+  (assoc mode (info-lookup->topic-cache topic)))
+
+(defun info-lookup->initialized (topic mode)
+  (nth 1 (info-lookup->mode-cache topic mode)))
+
+(defun info-lookup->completions (topic mode)
+  (or (info-lookup->initialized topic mode)
+      (info-lookup-setup-mode topic mode))
+  (nth 2 (info-lookup->mode-cache topic mode)))
+
+(defun info-lookup->refer-modes (topic mode)
+  (or (info-lookup->initialized topic mode)
+      (info-lookup-setup-mode topic mode))
+  (nth 3 (info-lookup->mode-cache topic mode)))
+
+(defun info-lookup->all-modes (topic mode)
+  (cons mode (info-lookup->refer-modes topic mode)))
+
+(defun info-lookup-quick-all-modes (topic mode)
+  (cons mode (info-lookup->other-modes topic mode)))
+
+;;;###autoload
+(defun info-lookup-reset ()
+  "Throw away all cached data.
+This command is useful if the user wants to start at the beginning without
+quitting Emacs, for example, after some Info documents were updated on the
+system."
+  (interactive)
+  (setq info-lookup-cache nil))
+
+;;;###autoload
+(defun info-lookup-symbol (symbol &optional mode)
+  "Display the documentation of a symbol.
+If called interactively, SYMBOL will be read from the mini-buffer.
+Prefix argument means unconditionally insert the default symbol name
+into the mini-buffer so that it can be edited.
+The default symbol is the one found at point."
+  (interactive
+   (info-lookup-interactive-arguments 'symbol))
+  (info-lookup 'symbol symbol mode))
+
+;;;###autoload
+(defun info-lookup-file (file &optional mode)
+  "Display the documentation of a file.
+If called interactively, FILE will be read from the mini-buffer.
+Prefix argument means unconditionally insert the default file name
+into the mini-buffer so that it can be edited.
+The default file name is the one found at point."
+  (interactive
+   (info-lookup-interactive-arguments 'file))
+  (info-lookup 'file file mode))
+
+(defun info-lookup-interactive-arguments (topic)
+  "Return default value and help mode for help topic TOPIC."
+  (let* ((mode (if (info-lookup->mode-value topic (info-lookup-select-mode))
+                  info-lookup-mode
+                (info-lookup-change-mode topic)))
+        (completions (info-lookup->completions topic mode))
+        (default (info-lookup-guess-default topic mode))
+        (input (if (or current-prefix-arg (not (assoc default completions)))
+                   default))
+        (completion-ignore-case (info-lookup->ignore-case topic mode))
+        (enable-recursive-minibuffers t)
+        (value (completing-read
+                (if (and default (not input))
+                    (format "Describe %s (default %s): " topic default)
+                  (format "Describe %s: " topic))
+                completions nil nil input 'info-lookup-history)))
+    (list (if (equal value "") default value) mode)))
+
+(defun info-lookup-select-mode ()
+  (when (and (not info-lookup-mode) (buffer-file-name))
+    (let ((file-name (file-name-nondirectory (buffer-file-name)))
+         (file-name-alist info-lookup-file-name-alist))
+      (while (and (not info-lookup-mode) file-name-alist)
+       (when (string-match (caar file-name-alist) file-name)
+         (setq info-lookup-mode (cdar file-name-alist)))
+       (setq file-name-alist (cdr file-name-alist)))))
+  (or info-lookup-mode (setq info-lookup-mode major-mode)))
+
+(defun info-lookup-change-mode (topic)
+  (let* ((completions (mapcar (lambda (arg)
+                               (cons (symbol-name (car arg)) (car arg)))
+                             (info-lookup->topic-value topic)))
+        (mode (completing-read
+               (format "Use %s help mode: " topic)
+               completions nil t nil 'info-lookup-history)))
+    (or (setq mode (cdr (assoc mode completions)))
+       (error "No %s help available" topic))
+    (or (info-lookup->mode-value topic mode)
+       (error "No %s help available for `%s'" topic mode))
+    (setq info-lookup-mode mode)))
+
+(defun info-lookup (topic item mode)
+  "Display the documentation of a help item."
+  (or mode (setq mode (info-lookup-select-mode)))
+  (or (info-lookup->mode-value topic mode)
+      (error "No %s help available for `%s'" topic mode))
+  (let ((entry (or (assoc (if (info-lookup->ignore-case topic mode)
+                             (downcase item) item)
+                         (info-lookup->completions topic mode))
+                  (error "Not documented as a %s: %s" topic (or item ""))))
+       (modes (info-lookup->all-modes topic mode))
+       (window (selected-window))
+       found doc-spec node prefix suffix doc-found)
+    (if (not info-lookup-other-window-flag)
+       (info)
+      (save-window-excursion (info))
+      (switch-to-buffer-other-window "*info*"))
+    (while (and (not found) modes)
+      (setq doc-spec (info-lookup->doc-spec topic (car modes)))
+      (while (and (not found) doc-spec)
+       (setq node (nth 0 (car doc-spec))
+             prefix (nth 2 (car doc-spec))
+             suffix (nth 3 (car doc-spec)))
+       (when (condition-case error-data
+                 (progn 
+                   (Info-goto-node node)
+                   (setq doc-found t))
+               (error 
+                (message "Cannot access Info node %s" node)
+                (sit-for 1)
+                nil))
+         (condition-case nil
+             (progn
+               (Info-menu (or (cdr entry) item))
+               (setq found t)
+               (if (or prefix suffix)
+                   (let ((case-fold-search
+                          (info-lookup->ignore-case topic (car modes)))
+                         (buffer-read-only nil))
+                     (goto-char (point-min))
+                     (re-search-forward
+                      (concat prefix (regexp-quote item) suffix))
+                     (goto-char (match-beginning 0))
+                     (and window-system info-lookup-highlight-face
+                          ;; Search again for ITEM so that the first
+                          ;; occurence of ITEM will be highlighted.
+                          (re-search-forward (regexp-quote item))
+                          (let ((start (match-beginning 0))
+                                (end (match-end 0)))
+                            (if (overlayp info-lookup-highlight-overlay)
+                                (move-overlay info-lookup-highlight-overlay
+                                              start end (current-buffer))
+                              (setq info-lookup-highlight-overlay
+                                    (make-overlay start end))))
+                          (overlay-put info-lookup-highlight-overlay
+                                       'face info-lookup-highlight-face)))))
+           (error nil)))
+       (setq doc-spec (cdr doc-spec)))
+      (setq modes (cdr modes)))
+    (or doc-found
+       (error "Info documentation for lookup was not found"))
+    ;; Don't leave the Info buffer if the help item couldn't be looked up.
+    (if (and info-lookup-other-window-flag found)
+       (select-window window))))
+
+(defun info-lookup-setup-mode (topic mode)
+  "Initialize the internal data structure."
+  (or (info-lookup->initialized topic mode)
+      (let (cell data (initialized 0) completions refer-modes)
+       (if (not (info-lookup->mode-value topic mode))
+           (message "No %s help available for `%s'" topic mode)
+         ;; Recursively setup cross references.
+         ;; But refer only to non-void modes.
+         (mapcar (lambda (arg)
+                   (or (info-lookup->initialized topic arg)
+                       (info-lookup-setup-mode topic arg))
+                   (and (eq (info-lookup->initialized topic arg) t)
+                        (setq refer-modes (cons arg refer-modes))))
+                 (info-lookup->other-modes topic mode))
+         (setq refer-modes (nreverse refer-modes))
+         ;; Build the full completion alist.
+         (setq completions
+               (nconc (info-lookup-make-completions topic mode)
+                      (apply 'append
+                             (mapcar (lambda (arg)
+                                       (info-lookup->completions topic arg))
+                                     refer-modes))))
+         (setq initialized t))
+       ;; Update `info-lookup-cache'.
+       (setq cell (info-lookup->mode-cache topic mode)
+             data (list initialized completions refer-modes))
+       (if (not cell)
+           (setcdr (info-lookup->cache topic)
+                   (cons (cons mode data) (info-lookup->topic-cache topic)))
+         (setcdr cell data))
+       initialized)))
+
+(defun info-lookup-make-completions (topic mode)
+  "Create a unique alist from all index entries."
+  (let ((doc-spec (info-lookup->doc-spec topic mode))
+       (regexp (concat "^\\(" (info-lookup->regexp topic mode)
+                       "\\)\\([ \t].*\\)?$"))
+       node trans entry item prefix result doc-found
+       (buffer (get-buffer-create " temp-info-look")))
+    (with-current-buffer buffer
+      (Info-mode))
+    (while doc-spec
+      (setq node (nth 0 (car doc-spec))
+           trans (cond ((eq (nth 1 (car doc-spec)) nil)
+                        (lambda (arg)
+                          (if (string-match regexp arg)
+                              (match-string 1 arg))))
+                       ((stringp (nth 1 (car doc-spec)))
+                        (setq prefix (nth 1 (car doc-spec)))
+                        (lambda (arg)
+                          (if (string-match "^\\([^: \t\n]+\\)" arg)
+                              (concat prefix (match-string 1 arg)))))
+                       (t (nth 1 (car doc-spec)))))
+      (with-current-buffer buffer
+       (message "Processing Info node `%s'..." node)
+       (when (condition-case error-data
+                 (progn 
+                   (Info-goto-node node)
+                   (setq doc-found t))
+               (error 
+                (message "Cannot access Info node `%s'" node)
+                (sit-for 1)
+                nil))
+         (condition-case nil
+             (progn
+               (goto-char (point-min))
+               (and (search-forward "\n* Menu:" nil t)
+                    (while (re-search-forward "\n\\* \\([^:\t\n]*\\):" nil t)
+                      (setq entry (match-string 1)
+                            item (funcall trans entry))
+                      (and (info-lookup->ignore-case topic mode)
+                           (setq item (downcase item)))
+                      (and (string-equal entry item)
+                           (setq entry nil))
+                      (or (assoc item result)
+                          (setq result (cons (cons item entry) result))))))
+           (error nil))))
+      (message "Processing Info node `%s'...done" node)
+      (setq doc-spec (cdr doc-spec)))
+    (or doc-found
+       (error "Info documentation for lookup was not found"))
+    result))
+
+(defun info-lookup-guess-default (topic mode)
+  "Pick up default item at point (with favor to look back).
+Return nil if there is nothing appropriate."
+  (let ((modes (info-lookup->all-modes topic mode))
+       (start (point)) guess whitespace)
+    (while (and (not guess) modes)
+      (setq guess (info-lookup-guess-default* topic (car modes))
+           modes (cdr modes))
+      (goto-char start))
+    ;; Collapse whitespace characters.
+    (and guess (concat (delete nil (mapcar (lambda (ch)
+                                            (if (or (char-equal ch ? )
+                                                    (char-equal ch ?\t)
+                                                    (char-equal ch ?\n))
+                                                (if (not whitespace)
+                                                    (setq whitespace ? ))
+                                              (setq whitespace nil) ch))
+                                          guess))))))
+
+(defun info-lookup-guess-default* (topic mode)
+  (let ((case-fold-search (info-lookup->ignore-case topic mode))
+       (rule (or (info-lookup->parse-rule topic mode)
+                 (info-lookup->regexp topic mode)))
+       (start (point)) end regexp subexp result)
+    (if (symbolp rule)
+       (setq result (funcall rule))
+      (if (consp rule)
+         (setq regexp (car rule)
+               subexp (cdr rule))
+       (setq regexp rule
+             subexp 0))
+      (skip-chars-backward " \t\n") (setq end (point))
+      (while (and (re-search-backward regexp nil t)
+                 (looking-at regexp)
+                 (>= (match-end 0) end))
+       (setq result (match-string subexp)))
+      (if (not result)
+         (progn
+           (goto-char start)
+           (skip-chars-forward " \t\n")
+           (and (looking-at regexp)
+                (setq result (match-string subexp))))))
+    result))
+
+(defun info-lookup-guess-c-symbol ()
+  "Get the C symbol at point."
+  (condition-case nil
+      (progn
+       (backward-sexp)
+       (let ((start (point)) prefix name)
+         ;; Test for a leading `struct', `union', or `enum' keyword
+         ;; but ignore names like `foo_struct'.
+         (setq prefix (and (< (skip-chars-backward " \t\n") 0)
+                           (< (skip-chars-backward "_a-zA-Z0-9") 0)
+                           (looking-at "\\(struct\\|union\\|enum\\)\\s ")
+                           (concat (match-string 1) " ")))
+         (goto-char start)
+         (and (looking-at "[_a-zA-Z][_a-zA-Z0-9]*")
+              (setq name (match-string 0)))
+         ;; Caveat!  Look forward if point is at `struct' etc.
+         (and (not prefix)
+              (or (string-equal name "struct")
+                  (string-equal name "union")
+                  (string-equal name "enum"))
+              (looking-at "[a-z]+\\s +\\([_a-zA-Z][_a-zA-Z0-9]*\\)")
+              (setq prefix (concat name " ")
+                    name (match-string 1)))
+         (and (or prefix name)
+              (concat prefix name))))
+    (error nil)))
+
+;;;###autoload
+(defun info-complete-symbol (&optional mode)
+  "Perform completion on symbol preceding point."
+  (interactive)
+  (info-complete 'symbol
+                (or mode
+                    (if (info-lookup->mode-value
+                         'symbol (info-lookup-select-mode))
+                        info-lookup-mode
+                      (info-lookup-change-mode 'symbol)))))
+
+;;;###autoload
+(defun info-complete-file (&optional mode)
+  "Perform completion on file preceding point."
+  (interactive)
+  (info-complete 'file
+                (or mode
+                    (if (info-lookup->mode-value
+                         'file (info-lookup-select-mode))
+                        info-lookup-mode
+                      (info-lookup-change-mode 'file)))))
+
+(defun info-complete (topic mode)
+  "Try to complete a help item."
+  (barf-if-buffer-read-only)
+  (or mode (setq mode (info-lookup-select-mode)))
+  (or (info-lookup->mode-value topic mode)
+      (error "No %s completion available for `%s'" topic mode))
+  (let ((modes (info-lookup-quick-all-modes topic mode))
+       (start (point))
+       try)
+    (while (and (not try) modes)
+      (setq mode (car modes)
+           modes (cdr modes)
+           try (info-lookup-guess-default* topic mode))
+      (goto-char start))
+    (and (not try)
+        (error "Found no %S to complete" topic))
+    (let ((completions (info-lookup->completions topic mode))
+         (completion-ignore-case (info-lookup->ignore-case topic mode))
+         completion)
+      (setq completion (try-completion try completions))
+      (cond ((not completion)
+            (ding)
+            (message "No match"))
+           ((stringp completion)
+            (or (assoc completion completions)
+                (setq completion (completing-read
+                                  (format "Complete %S: " topic)
+                                  completions nil t completion
+                                  info-lookup-history)))
+            (delete-region (- start (length try)) start)
+            (insert completion))
+           (t
+            (message "%s is complete"
+                     (capitalize (prin1-to-string topic))))))))
+
+
+;;; Initialize some common modes.
+
+(info-lookup-maybe-add-help
+ :mode 'c-mode :topic 'symbol
+ :regexp "\\(struct \\|union \\|enum \\)?[_a-zA-Z][_a-zA-Z0-9]*"
+ :doc-spec '(("(libc)Function Index" nil
+             "^[ \t]+- \\(Function\\|Macro\\): .*\\<" "\\>")
+            ("(libc)Variable Index" nil
+             "^[ \t]+- \\(Variable\\|Macro\\): .*\\<" "\\>")
+            ("(libc)Type Index" nil
+             "^[ \t]+- Data Type: \\<" "\\>")
+            ("(termcap)Var Index" nil
+             "^[ \t]*`" "'"))
+ :parse-rule 'info-lookup-guess-c-symbol)
+
+(info-lookup-maybe-add-help
+ :mode 'c-mode :topic 'file
+ :regexp "[_a-zA-Z0-9./+-]+"
+ :doc-spec '(("(libc)File Index")))
+
+(info-lookup-maybe-add-help
+ :mode 'bison-mode
+ :regexp "[:;|]\\|%\\([%{}]\\|[_a-z]+\\)\\|YY[_A-Z]+\\|yy[_a-z]+"
+ :doc-spec '(("(bison)Index" nil
+             "`" "'"))
+ :parse-rule "[:;|]\\|%\\([%{}]\\|[_a-zA-Z][_a-zA-Z0-9]*\\)"
+ :other-modes '(c-mode))
+
+(info-lookup-maybe-add-help
+ :mode 'makefile-mode
+ :regexp "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z][_a-zA-Z0-9-]*"
+ :doc-spec '(("(make)Name Index" nil
+             "^[ \t]*`" "'"))
+ :parse-rule "\\$[^({]\\|\\.[_A-Z]*\\|[_a-zA-Z0-9-]+")
+
+(info-lookup-maybe-add-help
+ :mode 'texinfo-mode
+ :regexp "@\\([a-zA-Z]+\\|[^a-zA-Z]\\)"
+ :doc-spec '(("(texinfo)Command and Variable Index"
+             ;; Ignore Emacs commands and prepend a `@'.
+             (lambda (item)
+               (if (string-match "^\\([a-zA-Z]+\\|[^a-zA-Z]\\)\\( .*\\)?$" 
item)
+                   (concat "@" (match-string 1 item))))
+             "`" "'")))
+
+(info-lookup-maybe-add-help
+ :mode 'm4-mode
+ :regexp "[_a-zA-Z][_a-zA-Z0-9]*"
+ :doc-spec '(("(m4)Macro index"))
+ :parse-rule "[_a-zA-Z0-9]+")
+
+(info-lookup-maybe-add-help
+ :mode 'autoconf-mode
+ :regexp "A[CM]_[_A-Z0-9]+"
+ :doc-spec '(("(autoconf)Macro Index" "AC_"
+             "^[ \t]+- \\(Macro\\|Variable\\): .*\\<" "\\>")
+            ("(automake)Index" nil
+             "^[ \t]*`" "'"))
+ ;; Autoconf symbols are M4 macros.  Thus use M4's parser.
+ :parse-rule 'ignore
+ :other-modes '(m4-mode))
+
+(info-lookup-maybe-add-help
+ :mode 'awk-mode
+ :regexp "[_a-zA-Z]+"
+ :doc-spec '(("(gawk)Index"
+             (lambda (item)
+               (let ((case-fold-search nil))
+                 (cond
+                  ;; `BEGIN' and `END'.
+                  ((string-match "^\\([A-Z]+\\) special pattern\\b" item)
+                   (match-string 1 item))
+                  ;; `if', `while', `do', ...
+                  ((string-match "^\\([a-z]+\\) statement\\b" item)
+                   (if (not (string-equal (match-string 1 item) "control"))
+                       (match-string 1 item)))
+                  ;; `NR', `NF', ...
+                  ((string-match "^[A-Z]+$" item)
+                   item)
+                  ;; Built-in functions (matches to many entries).
+                  ((string-match "^[a-z]+$" item)
+                   item))))
+             "`" "\\([ \t]*([^)]*)\\)?'")))
+
+(info-lookup-maybe-add-help
+ :mode 'perl-mode
+ :regexp "[$@%][^a-zA-Z]\\|\\$\\^[A-Z]\\|[$@%]?[a-zA-Z][_a-zA-Z0-9]*"
+ :doc-spec '(("(perl5)Function Index"
+             (lambda (item)
+               (if (string-match "^\\([a-zA-Z0-9]+\\)" item)
+                   (match-string 1 item)))
+             "^" "\\b")
+            ("(perl5)Variable Index"
+             (lambda (item)
+               ;; Work around bad formatted array variables.
+               (let ((sym (cond ((or (string-match "^\\$\\(.\\|@@\\)$" item)
+                                     (string-match "^\\$\\^[A-Z]$" item))
+                                 item)
+                                ((string-match
+                                  "^\\([$%@]\\|@@\\)?[_a-zA-Z0-9]+" item)
+                                 (match-string 0 item))
+                                (t ""))))
+                 (if (string-match "@@" sym)
+                     (setq sym (concat (substring sym 0 (match-beginning 0))
+                                       (substring sym (1- (match-end 0))))))
+                 (if (string-equal sym "") nil sym)))
+             "^" "\\b"))
+ :parse-rule "[$@%]?\\([_a-zA-Z0-9]+\\|[^a-zA-Z]\\)")
+
+(info-lookup-maybe-add-help
+ :mode 'latex-mode
+ :regexp "\\\\\\([a-zA-Z]+\\|[^a-zA-Z]\\)"
+ :doc-spec '(("(latex2e)Command Index" nil
+             "`" "\\({[^}]*}\\)?'")))
+
+(info-lookup-maybe-add-help
+ :mode 'scheme-mode
+ :regexp ;; "\\(\\sw\\|\\s_\\)+"
+ "[^()' \t\n]+"
+ :ignore-case t
+ ;; Aubrey Jaffer's rendition from <URL:ftp://ftp-swiss.ai.mit.edu/pub/scm>
+ :doc-spec '(("(r5rs)Index")))
+
+(info-lookup-maybe-add-help
+ :mode 'emacs-lisp-mode
+ :regexp "[^()' \t\n]+"
+ :doc-spec '(("(emacs)Command Index")
+            ("(emacs)Variable Index")
+            ("(elisp)Index"
+             (lambda (item)
+               (let ((sym (intern-soft item)))
+                 (cond ((null sym)
+                        (if (string-equal item "nil") item))
+                       ((or (boundp sym) (fboundp sym))
+                        item))))
+             "^[ \t]+- [^:]+:[ \t]*" "\\b")))
+
+(info-lookup-maybe-add-help
+ :mode 'lisp-interaction-mode
+ :regexp "[^()' \t\n]+"
+ :parse-rule 'ignore
+ :other-modes '(emacs-lisp-mode))
+
+(info-lookup-maybe-add-help
+ :mode 'lisp-mode
+ :regexp "[^()' \t\n]+"
+ :parse-rule 'ignore
+ :other-modes '(emacs-lisp-mode))
+
+(info-lookup-maybe-add-help
+ :mode 'scheme-mode
+ :regexp "[^()' \t\n]+"
+ :ignore-case t
+ :doc-spec '(("(r5rs)Index" nil
+             "^[ \t]+- [^:]+:[ \t]*" "\\b")))
+
+
+(provide 'info-look)
+
+;;; info-look.el ends here
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..e9de238
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       true
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+               chmodcmd=""
+       else
+               instcmd=mkdir
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f $src -o -d $src ]
+       then
+               true
+       else
+               echo "install:  $src does not exist"
+               exit 1
+       fi
+       
+       if [ x"$dst" = x ]
+       then
+               echo "install:  no destination specified"
+               exit 1
+       else
+               true
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d $dst ]
+       then
+               dst="$dst"/`basename $src`
+       else
+               true
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='   
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp="${pathcomp}${1}"
+       shift
+
+       if [ ! -d "${pathcomp}" ] ;
+        then
+               $mkdirprog "${pathcomp}"
+       else
+               true
+       fi
+
+       pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd $dst &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               dstfile=`basename $dst $transformbasename | 
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               true
+       fi
+
+# Make a temp file name in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd $src $dsttmp &&
+
+       trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+       $doit $rmcmd -f $dstdir/$dstfile &&
+       $doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755
index 0000000..4f58503
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $
+
+errstatus=0
+
+for file
+do
+   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+   shift
+
+   pathcomp=
+   for d
+   do
+     pathcomp="$pathcomp$d"
+     case "$pathcomp" in
+       -* ) pathcomp=./$pathcomp ;;
+     esac
+
+     if test ! -d "$pathcomp"; then
+        echo "mkdir $pathcomp"
+
+        mkdir "$pathcomp" || lasterr=$?
+
+        if test ! -d "$pathcomp"; then
+         errstatus=$lasterr
+        fi
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]