[hamradio-commits] [flnet] 01/01: Imported Upstream version 7.2.1

Greg Beam ki7mt-guest at moszumanska.debian.org
Sun Jan 11 07:07:46 UTC 2015


This is an automated email from the git hooks/post-receive script.

ki7mt-guest pushed a commit to branch master
in repository flnet.

commit b7b1bbb93c43729a8a3829e8281791f651884a43
Author: Greg Beam <ki7mt at yahoo.com>
Date:   Sun Jan 11 00:01:05 2015 -0700

    Imported Upstream version 7.2.1
---
 AUTHORS                                 |   10 +
 COPYING                                 |  340 ++
 ChangeLog                               |   48 +
 INSTALL                                 |  275 +
 Makefile.am                             |   19 +
 Makefile.in                             |  749 +++
 NEWS                                    |    5 +
 README                                  |   23 +
 aclocal.m4                              | 1141 ++++
 build-aux/config.guess                  | 1526 +++++
 build-aux/config.sub                    | 1658 ++++++
 build-aux/depcomp                       |  589 ++
 build-aux/install-sh                    |  519 ++
 build-aux/missing                       |  367 ++
 configure                               | 9291 +++++++++++++++++++++++++++++++
 configure.ac                            |  167 +
 data/flnet.desktop                      |    9 +
 data/flnet.xpm                          | 1403 +++++
 data/mac/Info.plist.in                  |   44 +
 data/mac/flnet.icns                     |  Bin 0 -> 10471 bytes
 data/win32/fl_app.nsi                   |  168 +
 data/win32/flnet.ico                    |  Bin 0 -> 15086 bytes
 m4/build.m4                             |   70 +
 m4/debug.m4                             |  104 +
 m4/fltk.m4                              |   54 +
 m4/funcs.m4                             |   15 +
 m4/macosx.m4                            |   42 +
 m4/np-compat.m4                         |   36 +
 m4/opt.m4                               |   29 +
 m4/pkg-config.m4                        |   44 +
 m4/static.m4                            |    9 +
 m4/win32.m4                             |   59 +
 scripts/build4mingw.sh                  |   18 +
 scripts/mkappbundle.sh                  |  119 +
 scripts/mknsisinst.sh                   |   41 +
 src/Makefile.am                         |  210 +
 src/Makefile.in                         | 1206 ++++
 src/UI/big_ui.fl                        |  354 ++
 src/UI/small_ui.fl                      |  360 ++
 src/UI/ui_sizes.cxx                     |  307 +
 src/calendar.cxx                        |  638 +++
 src/combo.cxx                           |  351 ++
 src/config.cxx                          |  155 +
 src/config.h.in                         |  413 ++
 src/csv_dbase/csvdb.cxx                 |  400 ++
 src/date.cxx                            |  372 ++
 src/flnet.rc                            |    7 +
 src/icons/calendar.xpm                  |   26 +
 src/include/calendar.h                  |  152 +
 src/include/combo.h                     |  127 +
 src/include/compat-mingw.h              |   97 +
 src/include/compat.h                    |   67 +
 src/include/csvdb.h                     |  119 +
 src/include/date.h                      |  144 +
 src/include/fl_lock.h                   |   78 +
 src/include/flnetrc.h                   |    3 +
 src/include/loglist.h                   |  100 +
 src/include/my_UI.h                     |   56 +
 src/include/net_config.h                |   44 +
 src/include/net_icon.h                  | 1404 +++++
 src/include/net_ui.h                    |   77 +
 src/include/netedits.h                  |  105 +
 src/include/netshared.h                 |  106 +
 src/include/netsupport.h                |   49 +
 src/include/netutils.h                  |   44 +
 src/include/netversion.h                |   30 +
 src/include/qrzlib.h                    |  246 +
 src/include/threads.h                   |  139 +
 src/include/timeops.h                   |   59 +
 src/include/util.h                      |  208 +
 src/include/xml_io.h                    |   56 +
 src/include/xmlreader.h                 |   62 +
 src/include/xmlrpc.h                    |   53 +
 src/loglist.cxx                         |  363 ++
 src/main.cxx                            |  326 ++
 src/mingw.c                             |  313 ++
 src/my_UI.cxx                           |  685 +++
 src/net_icon.cxx                        | 1404 +++++
 src/net_ui.cxx                          |  566 ++
 src/net_ui.fl                           |  415 ++
 src/netedits.cxx                        |  237 +
 src/netshared.cxx                       |  936 ++++
 src/netsupport.cxx                      |  149 +
 src/netutils.cxx                        |  155 +
 src/netutils.fl                         |  122 +
 src/qrzlib.cxx                          |  970 ++++
 src/timeops.cxx                         |  204 +
 src/xml_io.cxx                          |  444 ++
 src/xmlrpcpp/XmlRpc.h                   |  104 +
 src/xmlrpcpp/XmlRpcClient.cpp           |  552 ++
 src/xmlrpcpp/XmlRpcClient.h             |  155 +
 src/xmlrpcpp/XmlRpcDispatch.cpp         |  298 +
 src/xmlrpcpp/XmlRpcDispatch.h           |  112 +
 src/xmlrpcpp/XmlRpcException.h          |   62 +
 src/xmlrpcpp/XmlRpcMutex.cpp            |   85 +
 src/xmlrpcpp/XmlRpcMutex.h              |   67 +
 src/xmlrpcpp/XmlRpcServer.cpp           |  526 ++
 src/xmlrpcpp/XmlRpcServer.h             |  177 +
 src/xmlrpcpp/XmlRpcServerConnection.cpp |  238 +
 src/xmlrpcpp/XmlRpcServerConnection.h   |  101 +
 src/xmlrpcpp/XmlRpcServerMethod.cpp     |   45 +
 src/xmlrpcpp/XmlRpcServerMethod.h       |   65 +
 src/xmlrpcpp/XmlRpcSocket.cpp           |  245 +
 src/xmlrpcpp/XmlRpcSocket.h             |  102 +
 src/xmlrpcpp/XmlRpcSource.cpp           |  225 +
 src/xmlrpcpp/XmlRpcSource.h             |  104 +
 src/xmlrpcpp/XmlRpcThread.cpp           |   99 +
 src/xmlrpcpp/XmlRpcThread.h             |   81 +
 src/xmlrpcpp/XmlRpcThreadedServer.cpp   |   51 +
 src/xmlrpcpp/XmlRpcThreadedServer.h     |   87 +
 src/xmlrpcpp/XmlRpcUtil.cpp             |  338 ++
 src/xmlrpcpp/XmlRpcUtil.h               |   85 +
 src/xmlrpcpp/XmlRpcValue.cpp            |  703 +++
 src/xmlrpcpp/XmlRpcValue.h              |  321 ++
 src/xmlrpcpp/base64.h                   |  396 ++
 115 files changed, 40128 insertions(+)

diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..5efe12d
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,10 @@
+AUTHOR: Dave Freese
+CALLSIGN: W1HKJ
+EMAIL: iam_w1hkj (at) w1hkj [dot] com
+
+AUTHOR: Robert Stiles
+CALLSIGN: KK5VD
+EMAIL: kk5vd (at) yahoo [dot] com
+ 
+Author(s) can also be contacted on the linuxham yahoo group
+
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..3912109
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+

+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+

+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+

+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+

+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+

+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..be750ff
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,48 @@
+
+
+=Version 7.2.1=
+
+2014-06-26  David Freese  <w1hkj at w1hkj.com>
+
+	5f57589: User doc
+
+
+=Version 7.2.0=
+
+
+2014-06-02  Robert Stiles  <kk5vd at yahoo.com>
+
+	9608104: Doc Call-ins
+
+2014-06-02  David Freese  <w1hkj at w1hkj.com>
+
+	45d4765: rm configure
+	4b19677: Corrections
+
+
+=Version 7.1=
+
+
+2014-05-27  Robert Stiles  <kk5vd at yahoo.com>
+
+	fe05d96: Integrate XMLRPC for name and call sign transfers to/from FLDIGI
+
+
+=Version 7.0.2=
+
+
+2014-03-11  David Freese  <w1hkj at w1hkj.com>
+
+	9d096c1: Log-in listing
+	6674e61: Callin-processing
+
+
+=Version 7.0.1=
+
+
+
+=Version 7.0.0=
+
+	1b634a1: Help file update
+	b9e8772: Missing fields
+	ab4ae69: Initial commit
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..cff5d4c
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,275 @@
+Installation Instructions for fl505
+************************************
+
+To compile fl505 you will need:
+
+  * A recent C++ compiler.  The GNU C++ compilers in the 4.x series are
+    known to work.
+
+  * Version 1.1.x of the Fast Light Tool Kit (FLTK), with its
+    development library and headers.  Versions 1.1.7 to 1.1.9 are known
+    to work.  FLTK's multi-threading support is recommended but not
+	required.
+
+Once you have installed the required packages, the following commands
+should be sufficient to compile fl505 and install it under /usr/local:
+
+  ./configure
+  make
+  make install    (you may need superuser privileges for installation)
+
+The `install' target installs the executable, an icon, and a .desktop
+file.  After installation, an fl505 launcher should appear somewhere in
+your applications menu.
+
+Create the desktop launcher.  fl505 is designed as a desktop application
+that accepts target files to be wrapped or unwrapped by dropping the
+file onto the desktop launcher.
+
+Windows installation notes
+**************************
+
+fl505 supports win32 systems as a cross compiled application using the
+MinGW win32 environment.
+
+To build an internationalized version of fl505, install these
+additional packages:
+
+  gettext gettext-devel libiconv libiconv2
+
+   ========== Generic installation instructions follow ==========
+
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006 Free Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..5babc8a
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,19 @@
+ACLOCAL_AMFLAGS = -I m4
+SUBDIRS = src
+
+if HAVE_FLUID
+flgen:
+	(cd src && $(MAKE) $(AM_MAKEFLAGS) $@)
+endif
+
+if DARWIN
+appbundle:
+	(cd src && $(MAKE) $(AM_MAKEFLAGS) $@)
+endif
+
+if HAVE_NSIS
+nsisinst:
+	(cd src && $(MAKE) $(AM_MAKEFLAGS) $@)
+endif
+
+#EXTRA_DIST = build-aux/config.rpath
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..92eeecf
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,749 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(top_srcdir)/configure AUTHORS COPYING \
+	ChangeLog INSTALL NEWS build-aux/config.guess \
+	build-aux/config.sub build-aux/depcomp build-aux/install-sh \
+	build-aux/missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/build.m4 \
+	$(top_srcdir)/m4/debug.m4 $(top_srcdir)/m4/fltk.m4 \
+	$(top_srcdir)/m4/funcs.m4 $(top_srcdir)/m4/macosx.m4 \
+	$(top_srcdir)/m4/np-compat.m4 $(top_srcdir)/m4/opt.m4 \
+	$(top_srcdir)/m4/pkg-config.m4 $(top_srcdir)/m4/static.m4 \
+	$(top_srcdir)/m4/win32.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+	$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+	distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AC_CONFIG_ARGS = @AC_CONFIG_ARGS@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_CFLAGS = @BFD_CFLAGS@
+BFD_LIBS = @BFD_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_CFLAGS = @DEBUG_CFLAGS@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_LIBS = @EXTRA_LIBS@
+FLTK_CFLAGS = @FLTK_CFLAGS@
+FLTK_CONFIG = @FLTK_CONFIG@
+FLTK_LIBS = @FLTK_LIBS@
+FLUID = @FLUID@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAC_UNIVERSAL_CFLAGS = @MAC_UNIVERSAL_CFLAGS@
+MAC_UNIVERSAL_LDFLAGS = @MAC_UNIVERSAL_LDFLAGS@
+MAKEINFO = @MAKEINFO@
+MAKENSIS = @MAKENSIS@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+OPT_CFLAGS = @OPT_CFLAGS@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POW_LIB = @POW_LIB@
+PTW32_CFLAGS = @PTW32_CFLAGS@
+PTW32_LIBS = @PTW32_LIBS@
+RDYNAMIC = @RDYNAMIC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WINDRES = @WINDRES@
+X_CFLAGS = @X_CFLAGS@
+X_LIBS = @X_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+flnet_BUILD_CPPFLAGS = @flnet_BUILD_CPPFLAGS@
+flnet_BUILD_CXXFLAGS = @flnet_BUILD_CXXFLAGS@
+flnet_BUILD_LDADD = @flnet_BUILD_LDADD@
+flnet_BUILD_LDFLAGS = @flnet_BUILD_LDFLAGS@
+flnet_VERSION = @flnet_VERSION@
+flnet_VERSION_MAJOR = @flnet_VERSION_MAJOR@
+flnet_VERSION_MINOR = @flnet_VERSION_MINOR@
+flnet_VERSION_PATCH = @flnet_VERSION_PATCH@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I m4
+SUBDIRS = src
+all: all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+	@:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@fail= failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__remove_distdir)
+
+dist-lzma: distdir
+	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+	$(am__remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lzma*) \
+	  lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+	install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am am--refresh check check-am clean clean-generic \
+	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+	dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
+	distcheck distclean distclean-generic distclean-tags \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+ at HAVE_FLUID_TRUE@flgen:
+ at HAVE_FLUID_TRUE@	(cd src && $(MAKE) $(AM_MAKEFLAGS) $@)
+
+ at DARWIN_TRUE@appbundle:
+ at DARWIN_TRUE@	(cd src && $(MAKE) $(AM_MAKEFLAGS) $@)
+
+ at HAVE_NSIS_TRUE@nsisinst:
+ at HAVE_NSIS_TRUE@	(cd src && $(MAKE) $(AM_MAKEFLAGS) $@)
+
+#EXTRA_DIST = build-aux/config.rpath
+
+# 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/NEWS b/NEWS
new file mode 100644
index 0000000..6411c47
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,5 @@
+flnet release notes:
+
+  * Added call-ins using FLNET/FLDIGI XMLRPC's data link
+  * Amended README and AUTHORS
+  * Integrated XMLRPC for name and call sign transfers to/from FLDIGI
diff --git a/README b/README
new file mode 100644
index 0000000..ae6f303
--- /dev/null
+++ b/README
@@ -0,0 +1,23 @@
+Flnet provides the Amateur Radio Net Control Station operator with a real
+time tool to assist him or her in managing the net activities.  A single
+screen with multiple windows is used to allow rapid entry, search, pick
+and display of all stations calling in to the net.  All operations on
+the main screen are accomplished with keyboard entries only.  No mouse
+action is required to perform the net control functions.  Experience
+has shown that most net control operators prefer this method of operation
+to improve the speed of entry and selection
+
+Flnet can function cooperatively with fldigi/flrig to enable a smooth operation
+for the digital mode net controller.
+
+The latest version can always be found at:
+
+  http://www.w1hkj.com/
+
+Join the linuxham, NBEMSham or win-fldigi Yahoo group for support, news 
+and updates on W1HKJ software:
+
+  http://groups.yahoo.com/group/linuxham/join
+  http://groups.yahoo.com/group/NBEMSham/join
+  http://groups.yahoo.com/group/win-fldigi/join
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..e975d92
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1141 @@
+# generated automatically by aclocal 1.11.3 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
+[m4_warning([this file was generated for autoconf 2.68.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+# 
+# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
+#
+# 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_default([$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes ],
+		     [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+   	AC_MSG_RESULT([no])
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+        else 
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+        ])
+elif test $pkg_failed = untried; then
+     	AC_MSG_RESULT([no])
+	m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+        ])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	$3
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
+# Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.3], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.3])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 16
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES(CC)],
+		  [define([AC_PROG_CC],
+			  defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES(CXX)],
+		  [define([AC_PROG_CXX],
+			  defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES(OBJC)],
+		  [define([AC_PROG_OBJC],
+			  defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
+# Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
+# Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
+# Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+m4_if([$1], [v7],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/build.m4])
+m4_include([m4/debug.m4])
+m4_include([m4/fltk.m4])
+m4_include([m4/funcs.m4])
+m4_include([m4/macosx.m4])
+m4_include([m4/np-compat.m4])
+m4_include([m4/opt.m4])
+m4_include([m4/pkg-config.m4])
+m4_include([m4/static.m4])
+m4_include([m4/win32.m4])
diff --git a/build-aux/config.guess b/build-aux/config.guess
new file mode 100755
index 0000000..f32079a
--- /dev/null
+++ b/build-aux/config.guess
@@ -0,0 +1,1526 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
+
+timestamp='2008-01-23'
+
+# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    sh5el) machine=sh5le-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[456])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    *:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    *:Interix*:[3456]*)
+    	case ${UNAME_MACHINE} in
+	    x86)
+		echo i586-pc-interix${UNAME_RELEASE}
+		exit ;;
+	    EM64T | authenticamd)
+		echo x86_64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	    IA64)
+		echo ia64-unknown-interix${UNAME_RELEASE}
+		exit ;;
+	esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    arm*:Linux:*:*)
+	eval $set_cc_for_build
+	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+	    | grep -q __ARM_EABI__
+	then
+	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	else
+	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+	fi
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+    	echo frv-unknown-linux-gnu
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo or32-unknown-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit ;;
+    xtensa*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^LIBC/{
+		s: ::g
+		p
+	    }'`"
+	test x"${LIBC}" != x && {
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+		exit
+	}
+	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-7:SUPER-UX:*:*)
+	echo sx7-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8:SUPER-UX:*:*)
+	echo sx8-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-8R:SUPER-UX:*:*)
+	echo sx8r-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/config.sub b/build-aux/config.sub
new file mode 100755
index 0000000..6759825
--- /dev/null
+++ b/build-aux/config.sub
@@ -0,0 +1,1658 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+#   Free Software Foundation, Inc.
+
+timestamp='2008-01-16'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fido | fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore | mep \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| mt \
+	| msp430 \
+	| nios | nios2 \
+	| ns16k | ns32k \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu | strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nios-* | nios2-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa*-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the basic CPU types without company name, with glob match.
+	xtensa*)
+		basic_machine=$basic_machine-unknown
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	blackfin)
+		basic_machine=bfin-unknown
+		os=-linux
+		;;
+	blackfin-*)
+		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16)
+		basic_machine=cr16-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m68knommu)
+		basic_machine=m68k-unknown
+		os=-linux
+		;;
+	m68knommu-*)
+		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	mingw32ce)
+		basic_machine=arm-unknown
+		os=-mingw32ce
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	parisc)
+		basic_machine=hppa-unknown
+		os=-linux
+		;;
+	parisc-*)
+		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=-linux
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh5el)
+		basic_machine=sh5le-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tile*)
+		basic_machine=tile-unknown
+		os=-linux-gnu
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+		os=-elf
+		;;
+        spu-*)
+		os=-elf
+		;;
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+        c4x-* | tic4x-*)
+        	os=-coff
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+        mep-*)
+		os=-elf
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/depcomp b/build-aux/depcomp
new file mode 100755
index 0000000..e5f9736
--- /dev/null
+++ b/build-aux/depcomp
@@ -0,0 +1,589 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2007-03-29.01
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software
+# Foundation, Inc.
+
+# 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 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., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/build-aux/install-sh b/build-aux/install-sh
new file mode 100755
index 0000000..a5897de
--- /dev/null
+++ b/build-aux/install-sh
@@ -0,0 +1,519 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-12-25.00
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# 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.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+	shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+	shift;;
+
+    -o) chowncmd="$chownprog $2"
+	shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+	shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dst_arg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix='/';;
+	-*) prefix='./';;
+	*)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test -z "$d" && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # 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 $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+	# Now remove or move aside any old file at destination location.
+	# We try this two ways since rm can't unlink itself on some
+	# systems and the destination file might be busy for other
+	# reasons.  In this case, the final cleanup might fail but the new
+	# file should still install successfully.
+	{
+	  test ! -f "$dst" ||
+	  $doit $rmcmd -f "$dst" 2>/dev/null ||
+	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+	  } ||
+	  { echo "$0: cannot unlink or rename $dst" >&2
+	    (exit 1); exit 1
+	  }
+	} &&
+
+	# Now rename the file to the real destination.
+	$doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/build-aux/missing b/build-aux/missing
new file mode 100755
index 0000000..1c8ff70
--- /dev/null
+++ b/build-aux/missing
@@ -0,0 +1,367 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# 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 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., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake at gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case $1 in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $1 in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f y.tab.h; then
+	echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f lex.yy.c; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case $firstarg in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case $firstarg in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..a4fe513
--- /dev/null
+++ b/configure
@@ -0,0 +1,9291 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.68 for flnet 7.2.1.
+#
+# Report bugs to <w1hkj AT w1hkj DOT com>.
+#
+# Copyright (C) 2009 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com)
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+	   done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf at gnu.org and w1hkj AT w1hkj DOT
+$0: com about your system, including any error possibly
+$0: output before this message. Then install a modern
+$0: shell, or manually run the script under such a shell if
+$0: you do have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='flnet'
+PACKAGE_TARNAME='flnet'
+PACKAGE_VERSION='7.2.1'
+PACKAGE_STRING='flnet 7.2.1'
+PACKAGE_BUGREPORT='w1hkj AT w1hkj DOT com'
+PACKAGE_URL=''
+
+ac_unique_file="src/main.cxx"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+flnet_BUILD_LDADD
+flnet_BUILD_LDFLAGS
+flnet_BUILD_CXXFLAGS
+flnet_BUILD_CPPFLAGS
+COMPAT_STRCASESTR_FALSE
+COMPAT_STRCASESTR_TRUE
+EXTRA_LIBS
+COMPAT_REGEX_FALSE
+COMPAT_REGEX_TRUE
+HAVE_FLUID_FALSE
+HAVE_FLUID_TRUE
+FLUID
+FLTK_LIBS
+FLTK_CFLAGS
+FLTK_CONFIG
+X_LIBS
+X_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+PTW32_LIBS
+PTW32_CFLAGS
+MINGW32_FALSE
+MINGW32_TRUE
+WIN32_FALSE
+WIN32_TRUE
+HAVE_NSIS_FALSE
+HAVE_NSIS_TRUE
+HAVE_WINDRES_FALSE
+HAVE_WINDRES_TRUE
+MAKENSIS
+WINDRES
+DARWIN_FALSE
+DARWIN_TRUE
+MAC_UNIVERSAL_LDFLAGS
+MAC_UNIVERSAL_CFLAGS
+COMPAT_STACK_FALSE
+COMPAT_STACK_TRUE
+RDYNAMIC
+DEBUG_CFLAGS
+ENABLE_DEBUG_FALSE
+ENABLE_DEBUG_TRUE
+BFD_LIBS
+BFD_CFLAGS
+OPT_CFLAGS
+POW_LIB
+LIBOBJS
+EGREP
+GREP
+CPP
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+ac_ct_CC
+CFLAGS
+CC
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CXX
+CPPFLAGS
+LDFLAGS
+CXXFLAGS
+CXX
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_os
+target_vendor
+target_cpu
+target
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+AC_CONFIG_ARGS
+flnet_VERSION
+flnet_VERSION_PATCH
+flnet_VERSION_MINOR
+flnet_VERSION_MAJOR
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+enable_static
+enable_optimizations
+enable_debug
+with_bfd
+enable_mac_universal
+with_ptw32
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CXX
+CXXFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CCC
+CC
+CFLAGS
+CPP
+BFD_CFLAGS
+BFD_LIBS
+PTW32_CFLAGS
+PTW32_LIBS
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+X_CFLAGS
+X_LIBS
+FLTK_CONFIG
+FLTK_CFLAGS
+FLTK_LIBS
+FLUID'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error $? "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+	 ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=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 ;;
+
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_myself" : 'X\(//\)[^/]' \| \
+	 X"$as_myself" : 'X\(//\)$' \| \
+	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures flnet 7.2.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking ...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/flnet]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --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
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+  --target=TARGET   configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of flnet 7.2.1:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-static         enable static linking for some libraries
+  --enable-optimizations  use x86 optimizations (none|sse|sse2|sse3|native)
+                          [none]
+  --enable-debug          turn on debugging
+  --enable-mac-universal  build a universal binary on Mac OS X [no]
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-bfd[=DIR]        search for libbfd in DIR/include and DIR/lib
+                          [mingw32 only]
+  --with-ptw32[=DIR]      search for pthreads-w32 in DIR/include and DIR/lib
+                          [mingw32 only]
+
+Some influential environment variables:
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  CPP         C preprocessor
+  BFD_CFLAGS  C compiler flags for libbfd
+  BFD_LIBS    linker flags for libbfd
+  PTW32_CFLAGS
+              C compiler flags for pthreads-w32
+  PTW32_LIBS  linker flags for pthreads-w32
+  PKG_CONFIG  path to pkg-config utility
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
+  X_CFLAGS    C compiler flags for X, overriding pkg-config
+  X_LIBS      linker flags for X, overriding pkg-config
+  FLTK_CONFIG Path to fltk-config utility
+  FLTK_CFLAGS C compiler flags for FLTK, overriding fltk-config
+  FLTK_LIBS   linker flags for FLTK, overriding fltk-config
+  FLUID       Fast Light User-Interface Designer
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <w1hkj AT w1hkj DOT com>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+flnet configure 7.2.1
+generated by GNU Autoconf 2.68
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+
+Copyright (C) 2009 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com)
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if eval \${$3+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ------------------------------------- ##
+## Report this to w1hkj AT w1hkj DOT com ##
+## ------------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_type
+
+# ac_fn_c_find_intX_t LINENO BITS VAR
+# -----------------------------------
+# Finds a signed integer type with width BITS, setting cache variable VAR
+# accordingly.
+ac_fn_c_find_intX_t ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5
+$as_echo_n "checking for int$2_t... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+     # Order is important - never check a type that is potentially smaller
+     # than half of the expected target width.
+     for ac_type in int$2_t 'int' 'long int' \
+	 'long long int' 'short int' 'signed char'; do
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+	     enum { N = $2 / 2 - 1 };
+int
+main ()
+{
+static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+	        enum { N = $2 / 2 - 1 };
+int
+main ()
+{
+static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1)
+		 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  case $ac_type in #(
+  int$2_t) :
+    eval "$3=yes" ;; #(
+  *) :
+    eval "$3=\$ac_type" ;;
+esac
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       if eval test \"x\$"$3"\" = x"no"; then :
+
+else
+  break
+fi
+     done
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_find_intX_t
+
+# ac_fn_c_find_uintX_t LINENO BITS VAR
+# ------------------------------------
+# Finds an unsigned integer type with width BITS, setting cache variable VAR
+# accordingly.
+ac_fn_c_find_uintX_t ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
+$as_echo_n "checking for uint$2_t... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+     # Order is important - never check a type that is potentially smaller
+     # than half of the expected target width.
+     for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \
+	 'unsigned long long int' 'unsigned short int' 'unsigned char'; do
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  case $ac_type in #(
+  uint$2_t) :
+    eval "$3=yes" ;; #(
+  *) :
+    eval "$3=\$ac_type" ;;
+esac
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       if eval test \"x\$"$3"\" = x"no"; then :
+
+else
+  break
+fi
+     done
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_find_uintX_t
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_func
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by flnet $as_me 7.2.1, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	$as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	# differences in whitespace do not lead to failure.
+	ac_old_val_w=`echo x $ac_old_val`
+	ac_new_val_w=`echo x $ac_new_val`
+	if test "$ac_old_val_w" != "$ac_new_val_w"; then
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	  ac_cache_corrupted=:
+	else
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+	  eval $ac_var=\$ac_old_val
+	fi
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+	{ $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+flnet_VERSION_MAJOR=7
+
+flnet_VERSION_MINOR=2
+
+flnet_VERSION_PATCH=.1
+
+flnet_VERSION=7.2.1
+
+
+
+$as_echo "#define flnet_VERSION_MAJOR 7" >>confdefs.h
+
+
+$as_echo "#define flnet_VERSION_MINOR 2" >>confdefs.h
+
+
+$as_echo "#define flnet_VERSION_PATCH \".1\"" >>confdefs.h
+
+
+$as_echo "#define flnet_VERSION \"7.2.1\"" >>confdefs.h
+
+
+AC_CONFIG_ARGS=$ac_configure_args
+
+ac_aux_dir=
+for ac_dir in build-aux "$srcdir"/build-aux; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+
+# define build, build_cpu, build_vendor, build_os
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+# define host, host_cpu, host_vendor, host_os
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+# define target, target_cpu, target_vendor, target_os
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
+$as_echo_n "checking target system type... " >&6; }
+if ${ac_cv_target+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$target_alias" = x; then
+  ac_cv_target=$ac_cv_host
+else
+  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
+$as_echo "$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+am__api_version='1.11'
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='flnet'
+ VERSION='7.2.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+#change the next config item for the specific application src's
+
+ac_config_headers="$ac_config_headers src/config.h"
+
+
+
+# Checks for programs.
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5
+$as_echo_n "checking whether the C++ compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C++ compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5
+$as_echo_n "checking for C++ compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+else
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+depcc="$CXX"  am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = xyes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if ${ac_cv_safe_to_define___extensions__+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+
+# Checks for header files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if ${ac_cv_header_stdc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
+if eval \${$as_ac_Header+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_ac_Header=yes"
+else
+  eval "$as_ac_Header=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_ac_Header
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+_ACEOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if ${ac_cv_search_opendir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' dir; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_opendir+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_opendir+:} false; then :
+
+else
+  ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+$as_echo_n "checking for library containing opendir... " >&6; }
+if ${ac_cv_search_opendir+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char opendir ();
+int
+main ()
+{
+return opendir ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' x; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_opendir=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_opendir+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_opendir+:} false; then :
+
+else
+  ac_cv_search_opendir=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+$as_echo "$ac_cv_search_opendir" >&6; }
+ac_res=$ac_cv_search_opendir
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+fi
+
+for ac_header in arpa/inet.h execinfo.h fcntl.h limits.h memory.h netdb.h netinet/in.h regex.h stdint.h stdlib.h string.h strings.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h sys/utsname.h termios.h unistd.h values.h linux/ppdev.h dev/ppbus/ppi.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if ${ac_cv_header_stdbool_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdbool.h>
+#ifndef bool
+ "error: bool is not defined"
+#endif
+#ifndef false
+ "error: false is not defined"
+#endif
+#if false
+ "error: false is not 0"
+#endif
+#ifndef true
+ "error: true is not defined"
+#endif
+#if true != 1
+ "error: true is not 1"
+#endif
+#ifndef __bool_true_false_are_defined
+ "error: __bool_true_false_are_defined is not defined"
+#endif
+
+	struct s { _Bool s: 1; _Bool t; } s;
+
+	char a[true == 1 ? 1 : -1];
+	char b[false == 0 ? 1 : -1];
+	char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+	char d[(bool) 0.5 == true ? 1 : -1];
+	/* See body of main program for 'e'.  */
+	char f[(_Bool) 0.0 == false ? 1 : -1];
+	char g[true];
+	char h[sizeof (_Bool)];
+	char i[sizeof s.t];
+	enum { j = false, k = true, l = false * true, m = true * 256 };
+	/* The following fails for
+	   HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+	_Bool n[m];
+	char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+	char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+	/* Catch a bug in an HP-UX C compiler.  See
+	   http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+	   http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+	 */
+	_Bool q = true;
+	_Bool *pq = &q;
+
+int
+main ()
+{
+
+	bool e = &s;
+	*pq |= q;
+	*pq |= ! q;
+	/* Refer to every declared value, to avoid compiler optimizations.  */
+	return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+		+ !m + !n + !o + !p + !q + !pq);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdbool_h=yes
+else
+  ac_cv_header_stdbool_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
+if ${ac_cv_c_const+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_const=yes
+else
+  ac_cv_c_const=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+$as_echo "$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+$as_echo "#define const /**/" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+ac_fn_c_find_intX_t "$LINENO" "16" "ac_cv_c_int16_t"
+case $ac_cv_c_int16_t in #(
+  no|yes) ;; #(
+  *)
+
+cat >>confdefs.h <<_ACEOF
+#define int16_t $ac_cv_c_int16_t
+_ACEOF
+;;
+esac
+
+ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t"
+case $ac_cv_c_int32_t in #(
+  no|yes) ;; #(
+  *)
+
+cat >>confdefs.h <<_ACEOF
+#define int32_t $ac_cv_c_int32_t
+_ACEOF
+;;
+esac
+
+ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t"
+case $ac_cv_c_int64_t in #(
+  no|yes) ;; #(
+  *)
+
+cat >>confdefs.h <<_ACEOF
+#define int64_t $ac_cv_c_int64_t
+_ACEOF
+;;
+esac
+
+ac_fn_c_find_intX_t "$LINENO" "8" "ac_cv_c_int8_t"
+case $ac_cv_c_int8_t in #(
+  no|yes) ;; #(
+  *)
+
+cat >>confdefs.h <<_ACEOF
+#define int8_t $ac_cv_c_int8_t
+_ACEOF
+;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if ${ac_cv_c_restrict+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+typedef int * int_ptr;
+	int foo (int_ptr $ac_kw ip) {
+	return ip[0];
+       }
+int
+main ()
+{
+int s[1];
+	int * $ac_kw t = s;
+	t[0] = 0;
+	return foo(t)
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     test "$ac_cv_c_restrict" != no && break
+   done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) $as_echo "#define restrict /**/" >>confdefs.h
+ ;;
+   *)  cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
+$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
+if ${ac_cv_header_time+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_time=yes
+else
+  ac_cv_header_time=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
+$as_echo "$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if ${ac_cv_struct_tm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+				     int *p = &tm.tm_sec;
+				     return !p;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_struct_tm=time.h
+else
+  ac_cv_struct_tm=sys/time.h
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+$as_echo "$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
+
+fi
+
+ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t"
+case $ac_cv_c_uint16_t in #(
+  no|yes) ;; #(
+  *)
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint16_t $ac_cv_c_uint16_t
+_ACEOF
+;;
+  esac
+
+ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t"
+case $ac_cv_c_uint32_t in #(
+  no|yes) ;; #(
+  *)
+
+$as_echo "#define _UINT32_T 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint32_t $ac_cv_c_uint32_t
+_ACEOF
+;;
+  esac
+
+ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t"
+case $ac_cv_c_uint64_t in #(
+  no|yes) ;; #(
+  *)
+
+$as_echo "#define _UINT64_T 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint64_t $ac_cv_c_uint64_t
+_ACEOF
+;;
+  esac
+
+ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t"
+case $ac_cv_c_uint8_t in #(
+  no|yes) ;; #(
+  *)
+
+$as_echo "#define _UINT8_T 1" >>confdefs.h
+
+
+cat >>confdefs.h <<_ACEOF
+#define uint8_t $ac_cv_c_uint8_t
+_ACEOF
+;;
+  esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
+$as_echo_n "checking for working volatile... " >&6; }
+if ${ac_cv_c_volatile+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+volatile int x;
+int * volatile y = (int *) 0;
+return !x && !y;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_volatile=yes
+else
+  ac_cv_c_volatile=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5
+$as_echo "$ac_cv_c_volatile" >&6; }
+if test $ac_cv_c_volatile = no; then
+
+$as_echo "#define volatile /**/" >>confdefs.h
+
+fi
+
+
+# Checks for library functions.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether closedir returns void" >&5
+$as_echo_n "checking whether closedir returns void... " >&6; }
+if ${ac_cv_func_closedir_void+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_closedir_void=yes
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header_dirent>
+#ifndef __cplusplus
+int closedir ();
+#endif
+
+int
+main ()
+{
+return closedir (opendir (".")) != 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_closedir_void=no
+else
+  ac_cv_func_closedir_void=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_closedir_void" >&5
+$as_echo "$ac_cv_func_closedir_void" >&6; }
+if test $ac_cv_func_closedir_void = yes; then
+
+$as_echo "#define CLOSEDIR_VOID 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5
+$as_echo_n "checking for error_at_line... " >&6; }
+if ${ac_cv_lib_error_at_line+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <error.h>
+int
+main ()
+{
+error_at_line (0, 0, "", 0, "an error occurred");
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_error_at_line=yes
+else
+  ac_cv_lib_error_at_line=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5
+$as_echo "$ac_cv_lib_error_at_line" >&6; }
+if test $ac_cv_lib_error_at_line = no; then
+  case " $LIBOBJS " in
+  *" error.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS error.$ac_objext"
+ ;;
+esac
+
+fi
+
+if test $ac_cv_c_compiler_gnu = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
+$as_echo_n "checking whether $CC needs -traditional... " >&6; }
+if ${ac_cv_prog_gcc_traditional+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+    ac_pattern="Autoconf.*'x'"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sgtty.h>
+Autoconf TIOCGETP
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+  ac_cv_prog_gcc_traditional=yes
+else
+  ac_cv_prog_gcc_traditional=no
+fi
+rm -f conftest*
+
+
+  if test $ac_cv_prog_gcc_traditional = no; then
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <termio.h>
+Autoconf TCGETA
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+  ac_cv_prog_gcc_traditional=yes
+fi
+rm -f conftest*
+
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
+$as_echo "$ac_cv_prog_gcc_traditional" >&6; }
+  if test $ac_cv_prog_gcc_traditional = yes; then
+    CC="$CC -traditional"
+  fi
+fi
+
+for ac_header in sys/select.h sys/socket.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5
+$as_echo_n "checking types of arguments for select... " >&6; }
+if ${ac_cv_func_select_args+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  for ac_arg234 in 'fd_set *' 'int *' 'void *'; do
+ for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do
+  for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+#ifdef HAVE_SYS_SELECT_H
+# include <sys/select.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+
+int
+main ()
+{
+extern int select ($ac_arg1,
+					    $ac_arg234, $ac_arg234, $ac_arg234,
+					    $ac_arg5);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+ done
+done
+# Provide a safe default value.
+: "${ac_cv_func_select_args=int,int *,struct timeval *}"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5
+$as_echo "$ac_cv_func_select_args" >&6; }
+ac_save_IFS=$IFS; IFS=','
+set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'`
+IFS=$ac_save_IFS
+shift
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_ARG1 $1
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_ARG234 ($2)
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define SELECT_TYPE_ARG5 ($3)
+_ACEOF
+
+rm -f conftest*
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
+$as_echo_n "checking return type of signal handlers... " >&6; }
+if ${ac_cv_type_signal+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <signal.h>
+
+int
+main ()
+{
+return *(signal (0, 0)) (0) == 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_type_signal=int
+else
+  ac_cv_type_signal=void
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5
+$as_echo "$ac_cv_type_signal" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+for ac_func in strftime
+do :
+  ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
+if test "x$ac_cv_func_strftime" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRFTIME 1
+_ACEOF
+
+else
+  # strftime is in -lintl on SCO UNIX.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for strftime in -lintl" >&5
+$as_echo_n "checking for strftime in -lintl... " >&6; }
+if ${ac_cv_lib_intl_strftime+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strftime ();
+int
+main ()
+{
+return strftime ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_intl_strftime=yes
+else
+  ac_cv_lib_intl_strftime=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_strftime" >&5
+$as_echo "$ac_cv_lib_intl_strftime" >&6; }
+if test "x$ac_cv_lib_intl_strftime" = xyes; then :
+  $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h
+
+LIBS="-lintl $LIBS"
+fi
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5
+$as_echo_n "checking for working strtod... " >&6; }
+if ${ac_cv_func_strtod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  ac_cv_func_strtod=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+$ac_includes_default
+#ifndef strtod
+double strtod ();
+#endif
+int
+main()
+{
+  {
+    /* Some versions of Linux strtod mis-parse strings with leading '+'.  */
+    char *string = " +69";
+    char *term;
+    double value;
+    value = strtod (string, &term);
+    if (value != 69 || term != (string + 4))
+      return 1;
+  }
+
+  {
+    /* Under Solaris 2.4, strtod returns the wrong value for the
+       terminating character under some conditions.  */
+    char *string = "NaN";
+    char *term;
+    strtod (string, &term);
+    if (term != string && *(term - 1) == 0)
+      return 1;
+  }
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_func_strtod=yes
+else
+  ac_cv_func_strtod=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5
+$as_echo "$ac_cv_func_strtod" >&6; }
+if test $ac_cv_func_strtod = no; then
+  case " $LIBOBJS " in
+  *" strtod.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strtod.$ac_objext"
+ ;;
+esac
+
+ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow"
+if test "x$ac_cv_func_pow" = xyes; then :
+
+fi
+
+if test $ac_cv_func_pow = no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5
+$as_echo_n "checking for pow in -lm... " >&6; }
+if ${ac_cv_lib_m_pow+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pow ();
+int
+main ()
+{
+return pow ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_m_pow=yes
+else
+  ac_cv_lib_m_pow=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5
+$as_echo "$ac_cv_lib_m_pow" >&6; }
+if test "x$ac_cv_lib_m_pow" = xyes; then :
+  POW_LIB=-lm
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5
+$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;}
+fi
+
+fi
+
+fi
+
+for ac_func in getaddrinfo gethostbyname hstrerror gmtime_r localtime_r memmove memset mkdir select setenv snprintf socket socketpair strcasecmp strcasestr strchr strdup strerror strlcpy strncasecmp strrchr strstr strtol uname unsetenv vsnprintf
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if ${ac_cv_header_stdbool_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdbool.h>
+#ifndef bool
+ "error: bool is not defined"
+#endif
+#ifndef false
+ "error: false is not defined"
+#endif
+#if false
+ "error: false is not 0"
+#endif
+#ifndef true
+ "error: true is not defined"
+#endif
+#if true != 1
+ "error: true is not 1"
+#endif
+#ifndef __bool_true_false_are_defined
+ "error: __bool_true_false_are_defined is not defined"
+#endif
+
+	struct s { _Bool s: 1; _Bool t; } s;
+
+	char a[true == 1 ? 1 : -1];
+	char b[false == 0 ? 1 : -1];
+	char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+	char d[(bool) 0.5 == true ? 1 : -1];
+	/* See body of main program for 'e'.  */
+	char f[(_Bool) 0.0 == false ? 1 : -1];
+	char g[true];
+	char h[sizeof (_Bool)];
+	char i[sizeof s.t];
+	enum { j = false, k = true, l = false * true, m = true * 256 };
+	/* The following fails for
+	   HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+	_Bool n[m];
+	char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+	char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+	/* Catch a bug in an HP-UX C compiler.  See
+	   http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+	   http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+	 */
+	_Bool q = true;
+	_Bool *pq = &q;
+
+int
+main ()
+{
+
+	bool e = &s;
+	*pq |= q;
+	*pq |= ! q;
+	/* Refer to every declared value, to avoid compiler optimizations.  */
+	return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+		+ !m + !n + !o + !p + !q + !pq);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdbool_h=yes
+else
+  ac_cv_header_stdbool_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+# Checks for library functions.
+for ac_func in strstr
+do :
+  ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr"
+if test "x$ac_cv_func_strstr" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRSTR 1
+_ACEOF
+
+fi
+done
+
+
+### static flag
+# Set ac_cv_static to yes/no
+# Substitute RTLIB in Makefile
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; case "${enableval}" in
+                    yes|no) ac_cv_static="${enableval}" ;;
+                    *)      as_fn_error $? "bad value ${enableval} for --enable-static" "$LINENO" 5 ;;
+                 esac
+else
+  ac_cv_static=no
+fi
+
+
+
+### optimizations
+# Set ac_cv_opt to arg
+# Substitute OPT_FLAGS in Makefile
+
+  # Check whether --enable-optimizations was given.
+if test "${enable_optimizations+set}" = set; then :
+  enableval=$enable_optimizations; case "${enableval}" in
+                  none|sse|sse2|sse3|native) ac_cv_opt="${enableval}" ;;
+                  *)                         as_fn_error $? "bad value ${enableval} for --enable-optimizations" "$LINENO" 5 ;;
+                 esac
+else
+  ac_cv_opt=none
+fi
+
+  OPT_CFLAGS="-O2 -ffast-math -finline-functions -fomit-frame-pointer"
+  case "$ac_cv_opt" in
+      sse)
+          OPT_CFLAGS="$OPT_CFLAGS -msse -mfpmath=sse"
+	  ;;
+      sse2)
+          OPT_CFLAGS="$OPT_CFLAGS -msse2 -mfpmath=sse"
+	  ;;
+      sse3)
+          OPT_CFLAGS="$OPT_CFLAGS -msse3 -mfpmath=sse"
+	  ;;
+      native)
+          OPT_CFLAGS="$OPT_CFLAGS -march=native -mfpmath=sse"
+	  ;;
+      none)
+          ;;
+  esac
+
+
+
+
+### debug flag
+# Set ac_cv_debug to yes/no
+# Override CXXFLAGS
+# Set ENABLE_DEBUG Makefile conditional
+# Substitute RDYNAMIC in Makefile
+
+
+
+  # Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+  enableval=$enable_debug; case "${enableval}" in
+                  yes|no) ac_cv_debug="${enableval}" ;;
+                  *)      as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;;
+                 esac
+else
+  ac_cv_debug=no
+fi
+
+
+
+
+
+# Check whether --with-bfd was given.
+if test "${with_bfd+set}" = set; then :
+  withval=$with_bfd; ac_cv_want_bfd="$withval"
+else
+  ac_cv_want_bfd=yes
+fi
+
+
+  if test "x$ac_cv_debug" = "xyes" && test "x$ac_cv_want_bfd" != "xno" && \
+     test "x$target_mingw32" = "xyes"; then
+      if test "x$ac_cv_want_bfd" != "xyes"; then # set -I and -L switches
+          bfd_default_cflags="-I${ac_cv_want_bfd}/include"
+          bfd_default_libs="-L${ac_cv_want_bfd}/lib"
+      fi
+      # don't override the user-specified vars
+      BFD_CFLAGS="${BFD_CFLAGS:-$bfd_default_cflags}"
+      BFD_LIBS="${BFD_LIBS:-$bfd_default_libs}"
+      ac_cv_want_bfd="yes"
+
+      CPPFLAGS_saved="$CPPFLAGS"
+      LDFLAGS_saved="$LDFLAGS"
+      CPPFLAGS="$CPPFLAGS $BFD_CFLAGS"
+      LDFLAGS="$LDFLAGS $BFD_LIBS"
+
+      ac_fn_c_check_header_mongrel "$LINENO" "bfd.h" "ac_cv_header_bfd_h" "$ac_includes_default"
+if test "x$ac_cv_header_bfd_h" = xyes; then :
+  ac_cv_have_bfd="yes"
+else
+  ac_cv_have_bfd="no"
+fi
+
+
+      if test "x$ac_cv_have_bfd" = "xyes"; then
+          bfd_other_libs="-liberty -lpsapi -limagehlp"
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bfd_set_format in -lbfd" >&5
+$as_echo_n "checking for bfd_set_format in -lbfd... " >&6; }
+if ${ac_cv_lib_bfd_bfd_set_format+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbfd $bfd_other_libs $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char bfd_set_format ();
+int
+main ()
+{
+return bfd_set_format ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bfd_bfd_set_format=yes
+else
+  ac_cv_lib_bfd_bfd_set_format=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bfd_bfd_set_format" >&5
+$as_echo "$ac_cv_lib_bfd_bfd_set_format" >&6; }
+if test "x$ac_cv_lib_bfd_bfd_set_format" = xyes; then :
+  ac_cv_have_bfd="yes"
+else
+  ac_cv_have_bfd="no"
+fi
+
+      fi
+      CPPFLAGS="$CPPFLAGS_saved"
+      LDFLAGS="$LDFLAGS_saved"
+      if test "x$ac_cv_have_bfd" = "xyes"; then
+          BFD_LIBS="$BFD_LIBS -lbfd $bfd_other_libs"
+      fi
+  fi
+
+  if test "x$ac_cv_debug" = "xyes"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for debug info flag" >&5
+$as_echo_n "checking for debug info flag... " >&6; }
+      if test "x$GXX" = "xyes"; then
+          if test "x$target_mingw32" = "xyes"; then
+              gflag="-gstabs"
+          else
+              gflag="-ggdb3"
+          fi
+      else
+          gflag="-g"
+      fi
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gflag" >&5
+$as_echo "$gflag" >&6; }
+      DEBUG_CFLAGS="-O0 -fno-inline-functions -fno-omit-frame-pointer $gflag -Wall"
+
+
+  LDFLAGS_saved="$LDFLAGS"
+  LDFLAGS="$LDFLAGS -rdynamic"
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -rdynamic" >&5
+$as_echo_n "checking whether $CC supports -rdynamic... " >&6; }
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_rdynamic=yes
+else
+  ac_cv_rdynamic=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rdynamic" >&5
+$as_echo "$ac_cv_rdynamic" >&6; }
+
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports -rdynamic" >&5
+$as_echo_n "checking whether $CXX supports -rdynamic... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_rdynamic=yes
+else
+  ac_cv_rdynamic=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rdynamic" >&5
+$as_echo "$ac_cv_rdynamic" >&6; }
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+  LDFLAGS="$LDFLAGS_saved"
+
+      if test "x$ac_cv_rdynamic" = "xyes"; then
+          RDYNAMIC=-rdynamic
+      fi
+
+      CXXFLAGS=""
+      CFLAGS="$CXXFLAGS"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: debugging enabled; overriding CXXFLAGS" >&5
+$as_echo "$as_me: debugging enabled; overriding CXXFLAGS" >&6;}
+
+      if test "x$target_darwin" = "xyes"; then
+          ac_cv_compat_stack=yes
+
+$as_echo "#define HAVE_DBG_STACK 1" >>confdefs.h
+
+      elif test "x$target_mingw32" = "xyes" && test "x$ac_cv_have_bfd" = "xyes"; then
+          ac_cv_compat_stack=yes
+
+$as_echo "#define HAVE_DBG_STACK 1" >>confdefs.h
+
+      else
+          ac_cv_compat_stack=no
+
+$as_echo "#define HAVE_DBG_STACK 0" >>confdefs.h
+
+      fi
+  fi
+   if test "x$ac_cv_debug" = "xyes"; then
+  ENABLE_DEBUG_TRUE=
+  ENABLE_DEBUG_FALSE='#'
+else
+  ENABLE_DEBUG_TRUE='#'
+  ENABLE_DEBUG_FALSE=
+fi
+
+
+
+
+   if test "x$ac_cv_compat_stack" = "xyes"; then
+  COMPAT_STACK_TRUE=
+  COMPAT_STACK_FALSE='#'
+else
+  COMPAT_STACK_TRUE='#'
+  COMPAT_STACK_FALSE=
+fi
+
+
+
+###### OS support
+### OSX
+# Set ac_cv_mac_universal to yes/no
+# Set DARWIN Makefile conditional
+# Substitute MAC_UNIVERSAL_CFLAGS and MAC_UNIVERSAL_LDFLAGS in Makefile
+
+case "$target_os" in
+  darwin*)
+      target_darwin="yes"
+      ;;
+  *)
+      target_darwin="no"
+      ;;
+esac
+
+# Check whether --enable-mac-universal was given.
+if test "${enable_mac_universal+set}" = set; then :
+  enableval=$enable_mac_universal; case "${enableval}" in
+                 yes|no) ac_cv_mac_universal="${enableval}" ;;
+                 *)      as_fn_error $? "bad value \"${enableval}\" for --enable-mac-universal" "$LINENO" 5 ;;
+	       esac
+else
+  ac_cv_mac_universal=no
+fi
+
+
+if test "x$target_darwin" = "xyes" && test "x$ac_cv_mac_universal" = "xyes"; then
+    mac_minversion="-mmacosx-version-min=10.4"
+    case "$target_os" in
+      darwin8*)
+        mac_arches="-arch i386 -arch ppc"
+        mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
+        ;;
+      darwin9*)
+        mac_arches="-arch i386 -arch ppc -arch x86_64 -arch ppc64"
+        mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.5.sdk"
+        ;;
+      *)
+        mac_arches=""
+        mac_sysroot=""
+        ;;
+    esac
+    MAC_UNIVERSAL_CFLAGS="$mac_arches $mac_sysroot $mac_minversion"
+    MAC_UNIVERSAL_LDFLAGS="$mac_arches"
+fi
+
+
+
+ if test "x$target_darwin" = "xyes"; then
+  DARWIN_TRUE=
+  DARWIN_FALSE='#'
+else
+  DARWIN_TRUE='#'
+  DARWIN_FALSE=
+fi
+
+
+### win32
+# Set WIN32 Makefile conditional
+# Set HAVE_WINDRES Makefile conditional
+# Substitute WINDRES in Makefile
+
+case "$target_os" in
+     *mingw*)
+        target_win32="yes"
+        target_mingw32="yes"
+        ;;
+     *cygwin*|*win32*|*w32*)
+        target_win32="yes"
+        ;;
+     *)
+        target_win32="no"
+        ;;
+esac
+
+if test "x$target_win32" = "xyes"; then
+    # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
+set dummy ${ac_tool_prefix}windres; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_WINDRES+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$WINDRES"; then
+  ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+WINDRES=$ac_cv_prog_WINDRES
+if test -n "$WINDRES"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
+$as_echo "$WINDRES" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    if  test "x$WINDRES" = "x" ; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The windres utility could not be found" >&5
+$as_echo "$as_me: WARNING: The windres utility could not be found" >&2;}
+    fi
+
+$as_echo "#define __WOE32__ 1" >>confdefs.h
+
+fi
+
+if test "x$target_mingw32" = "xyes"; then
+    # Extract the first word of "makensis", so it can be a program name with args.
+set dummy makensis; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MAKENSIS+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$MAKENSIS"; then
+  ac_cv_prog_MAKENSIS="$MAKENSIS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_MAKENSIS="makensis"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+MAKENSIS=$ac_cv_prog_MAKENSIS
+if test -n "$MAKENSIS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKENSIS" >&5
+$as_echo "$MAKENSIS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+
+
+ if test "x$WINDRES" != "x"; then
+  HAVE_WINDRES_TRUE=
+  HAVE_WINDRES_FALSE='#'
+else
+  HAVE_WINDRES_TRUE='#'
+  HAVE_WINDRES_FALSE=
+fi
+
+
+ if test "x$MAKENSIS" != "x"; then
+  HAVE_NSIS_TRUE=
+  HAVE_NSIS_FALSE='#'
+else
+  HAVE_NSIS_TRUE='#'
+  HAVE_NSIS_FALSE=
+fi
+
+ if test "x$target_win32" = "xyes"; then
+  WIN32_TRUE=
+  WIN32_FALSE='#'
+else
+  WIN32_TRUE='#'
+  WIN32_FALSE=
+fi
+
+ if test "x$target_mingw32" = "xyes"; then
+  MINGW32_TRUE=
+  MINGW32_FALSE='#'
+else
+  MINGW32_TRUE='#'
+  MINGW32_FALSE=
+fi
+
+
+
+
+
+
+
+# Check whether --with-ptw32 was given.
+if test "${with_ptw32+set}" = set; then :
+  withval=$with_ptw32; ac_cv_want_ptw32="$withval"
+else
+  ac_cv_want_ptw32=no
+fi
+
+
+if test "x$ac_cv_want_ptw32" != "xno"; then
+    if test "x$ac_cv_want_ptw32" != "xyes"; then # set -I and -L switches
+        ptw32_default_cflags="-I${ac_cv_want_ptw32}/include"
+        ptw32_default_libs="-L${ac_cv_want_ptw32}/lib"
+    fi
+    ptw32_default_libs="$ptw32_default_libs -lpthreadGC2 -lws2_32"
+
+    # don't override the user-specified vars
+    PTW32_CFLAGS="${PTW32_CFLAGS:-$ptw32_default_cflags}"
+    PTW32_LIBS="${PTW32_LIBS:-$ptw32_default_libs}"
+    ac_cv_want_ptw32="yes"
+fi
+
+
+
+
+
+### X11
+# Set ac_cv_x to yes/no
+# Define USE_X in config.h
+# Substitute X_CFLAGS and X_LIBS in Makefile
+if test "x$target_darwin" = "xno" && test "x$target_win32" = "xno"; then
+
+
+
+
+
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	else
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+		PKG_CONFIG=""
+	fi
+fi
+
+
+
+
+
+
+
+test "x$ac_cv_want_x" = "x" && ac_cv_want_x="check"
+case "x$ac_cv_want_x" in
+    "xno")
+            ac_cv_x=no
+            ;;
+    "xcheck")
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+$as_echo_n "checking for X... " >&6; }
+
+if test -n "$X_CFLAGS"; then
+    pkg_cv_X_CFLAGS="$X_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "x11") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_X_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$X_LIBS"; then
+    pkg_cv_X_LIBS="$X_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "x11") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_X_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        X_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1`
+        else
+	        X_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$X_PKG_ERRORS" >&5
+
+	ac_cv_x=no
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	ac_cv_x=no
+else
+	X_CFLAGS=$pkg_cv_X_CFLAGS
+	X_LIBS=$pkg_cv_X_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	ac_cv_x=yes
+fi
+            ;;
+    "xyes")
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+$as_echo_n "checking for X... " >&6; }
+
+if test -n "$X_CFLAGS"; then
+    pkg_cv_X_CFLAGS="$X_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "x11") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_X_CFLAGS=`$PKG_CONFIG --cflags "x11" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$X_LIBS"; then
+    pkg_cv_X_LIBS="$X_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "x11") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_X_LIBS=`$PKG_CONFIG --libs "x11" 2>/dev/null`
+		      test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+   	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        X_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "x11" 2>&1`
+        else
+	        X_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "x11" 2>&1`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$X_PKG_ERRORS" >&5
+
+	as_fn_error $? "Package requirements (x11) were not met:
+
+$X_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables X_CFLAGS
+and X_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+     	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables X_CFLAGS
+and X_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+	X_CFLAGS=$pkg_cv_X_CFLAGS
+	X_LIBS=$pkg_cv_X_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+fi
+	    # if we get here the test has succeeded
+            ac_cv_x=yes
+            ;;
+esac
+
+if test "x$ac_cv_x" = "xyes"; then
+
+$as_echo "#define USE_X 1" >>confdefs.h
+
+    pkg_x_version=`$PKG_CONFIG --modversion "x11" 2>/dev/null`
+else
+
+$as_echo "#define USE_X 0" >>confdefs.h
+
+    pkg_x_version=""
+fi
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define X_BUILD_VERSION "$pkg_x_version"
+_ACEOF
+
+
+:
+
+fi
+
+### FLTK
+# Substitute FLTK_CFLAGS and FLTK_LIBS in Makefile
+# Set FLUID variable
+# Set HAVE_FLUID Makefile conditional
+
+
+
+
+
+  if test "x$FLTK_CFLAGS" = "x" && test "x$FLTK_LIBS" = "x"; then
+      if test "x$FLTK_CONFIG" = "x"; then
+          # Extract the first word of "fltk-config", so it can be a program name with args.
+set dummy fltk-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_FLTK_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $FLTK_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_FLTK_CONFIG="$FLTK_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_FLTK_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_FLTK_CONFIG" && ac_cv_path_FLTK_CONFIG="no"
+  ;;
+esac
+fi
+FLTK_CONFIG=$ac_cv_path_FLTK_CONFIG
+if test -n "$FLTK_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLTK_CONFIG" >&5
+$as_echo "$FLTK_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+      else
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fltk-config" >&5
+$as_echo_n "checking for fltk-config... " >&6; }
+          { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLTK_CONFIG" >&5
+$as_echo "$FLTK_CONFIG" >&6; }
+      fi
+      if test "$FLTK_CONFIG" = "no"; then
+          as_fn_error $? "
+  *** The fltk-config script could not be found. Please install the development
+  *** headers and libraries for FLTK 1.1.x, or set PATH to the directory that
+  *** contains fltk-config.
+          " "$LINENO" 5
+      fi
+      HAVE_FLTK_API_VERSION=no
+      FLTK_API_VERSION="`$FLTK_CONFIG --api-version`"
+      if test $? -ne 0; then
+          as_fn_error $? "$FLTK_CONFIG failed" "$LINENO" 5
+      fi
+      if test "x$FLTK_API_VERSION" = "x1.1" || test "x$FLTK_API_VERSION" = "x1.3"; then
+          HAVE_FLTK_API_VERSION=yes
+      fi
+      FLNET_FLTK_API_MAJOR=${FLTK_API_VERSION%%.*}
+      FLNET_FLTK_API_MINOR=${FLTK_API_VERSION#*.}; FLNET_FLTK_API_MINOR=${FLNET_FLTK_API_MINOR%%.*}
+      if test "${HAVE_FLTK_API_VERSION}" = "no"; then
+          as_fn_error $? "
+  *** The version of FLTK found on your system provides API version $FLTK_API_VERSION.
+  *** To build $PACKAGE you need a FLTK version that provides API 1.1 or 1.3.
+          " "$LINENO" 5
+      fi
+      FLTK_CFLAGS=`$FLTK_CONFIG --cxxflags`
+      if test "x$ac_cv_static" != "xyes"; then
+          FLTK_LIBS=`$FLTK_CONFIG --ldflags --use-images`
+      else
+          FLTK_LIBS=`$FLTK_CONFIG --ldstaticflags --use-images`
+      fi
+  else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: not checking for FLTK" >&5
+$as_echo "$as_me: not checking for FLTK" >&6;}
+  fi
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLTK_BUILD_VERSION "`$FLTK_CONFIG --version`"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLNET_FLTK_API_MAJOR $FLNET_FLTK_API_MAJOR
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLNET_FLTK_API_MINOR $FLNET_FLTK_API_MINOR
+_ACEOF
+
+
+
+  # Extract the first word of "fluid", so it can be a program name with args.
+set dummy fluid; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_FLUID+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$FLUID"; then
+  ac_cv_prog_FLUID="$FLUID" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_FLUID="fluid"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+FLUID=$ac_cv_prog_FLUID
+if test -n "$FLUID"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLUID" >&5
+$as_echo "$FLUID" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+   if test -n "$FLUID"; then
+  HAVE_FLUID_TRUE=
+  HAVE_FLUID_FALSE='#'
+else
+  HAVE_FLUID_TRUE='#'
+  HAVE_FLUID_FALSE=
+fi
+
+
+
+### XML-RPC library
+# Set ac_cv_xmlrpc to yes/no
+# Substitute XMLRPC_CFLAGS and XMLRPC_LIBS in Makefile
+# Define USE_XMLRPC in config.h
+# Set ENABLE_XMLRPC Makefile conditional
+#AC_flnet_XMLRPC
+
+### Non-POSIX compatibility (i.e. mingw32)
+# Sets various Makefile conditionals; see m4/np-compat.m4
+
+
+
+
+   if test "x$ac_cv_header_regex_h" != "xyes"; then
+  COMPAT_REGEX_TRUE=
+  COMPAT_REGEX_FALSE='#'
+else
+  COMPAT_REGEX_TRUE='#'
+  COMPAT_REGEX_FALSE=
+fi
+
+
+  if test "x$target_mingw32" = "xyes"; then
+      sem_libs="pthreadGC2"
+  else
+      sem_libs="pthread rt"
+  fi
+  other_libs=""
+
+  if test "x$ac_cv_want_ptw32" = "xyes"; then
+      CFLAGS_saved="$CFLAGS"
+      LDFLAGS_saved="$LDFLAGS"
+      EXTRA_LIBS_saved="$EXTRA_LIBS"
+      CFLAGS="$CFLAGS $PTW32_CFLAGS"
+      LDFLAGS="$LDFLAGS $PTW32_LIBS"
+      other_libs=-lws2_32
+  fi
+
+
+
+
+
+LIBS_search_libs_save="$LIBS"
+LIBS=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5
+$as_echo_n "checking for library containing dlopen... " >&6; }
+if ${ac_cv_search_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' dl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib $other_libs $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_dlopen=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_dlopen+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_dlopen+:} false; then :
+
+else
+  ac_cv_search_dlopen=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5
+$as_echo "$ac_cv_search_dlopen" >&6; }
+ac_res=$ac_cv_search_dlopen
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  ac_cv_have_func_dlopen=1
+else
+  ac_cv_have_func_dlopen=0
+fi
+
+if test "x$LIBS" != "x"; then
+    echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS"
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DLOPEN $ac_cv_have_func_dlopen
+_ACEOF
+
+LIBS="$LIBS_search_libs_save"
+
+
+
+
+
+
+LIBS_search_libs_save="$LIBS"
+LIBS=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+$as_echo_n "checking for library containing clock_gettime... " >&6; }
+if ${ac_cv_search_clock_gettime+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime ();
+int
+main ()
+{
+return clock_gettime ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' rt; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib $other_libs $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_clock_gettime=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_clock_gettime+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_clock_gettime+:} false; then :
+
+else
+  ac_cv_search_clock_gettime=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+$as_echo "$ac_cv_search_clock_gettime" >&6; }
+ac_res=$ac_cv_search_clock_gettime
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  ac_cv_have_func_clock_gettime=1
+else
+  ac_cv_have_func_clock_gettime=0
+fi
+
+if test "x$LIBS" != "x"; then
+    echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS"
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_CLOCK_GETTIME $ac_cv_have_func_clock_gettime
+_ACEOF
+
+LIBS="$LIBS_search_libs_save"
+
+
+
+
+
+
+LIBS_search_libs_save="$LIBS"
+LIBS=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sem_unlink" >&5
+$as_echo_n "checking for library containing sem_unlink... " >&6; }
+if ${ac_cv_search_sem_unlink+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sem_unlink ();
+int
+main ()
+{
+return sem_unlink ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' $sem_libs; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib $other_libs $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_sem_unlink=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_sem_unlink+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_sem_unlink+:} false; then :
+
+else
+  ac_cv_search_sem_unlink=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sem_unlink" >&5
+$as_echo "$ac_cv_search_sem_unlink" >&6; }
+ac_res=$ac_cv_search_sem_unlink
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  ac_cv_have_func_sem_unlink=1
+else
+  ac_cv_have_func_sem_unlink=0
+fi
+
+if test "x$LIBS" != "x"; then
+    echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS"
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SEM_UNLINK $ac_cv_have_func_sem_unlink
+_ACEOF
+
+LIBS="$LIBS_search_libs_save"
+
+
+
+
+
+
+LIBS_search_libs_save="$LIBS"
+LIBS=""
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sem_timedwait" >&5
+$as_echo_n "checking for library containing sem_timedwait... " >&6; }
+if ${ac_cv_search_sem_timedwait+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sem_timedwait ();
+int
+main ()
+{
+return sem_timedwait ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' $sem_libs; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib $other_libs $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_sem_timedwait=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_sem_timedwait+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_sem_timedwait+:} false; then :
+
+else
+  ac_cv_search_sem_timedwait=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sem_timedwait" >&5
+$as_echo "$ac_cv_search_sem_timedwait" >&6; }
+ac_res=$ac_cv_search_sem_timedwait
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  ac_cv_have_func_sem_timedwait=1
+else
+  ac_cv_have_func_sem_timedwait=0
+fi
+
+if test "x$LIBS" != "x"; then
+    echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS"
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SEM_TIMEDWAIT $ac_cv_have_func_sem_timedwait
+_ACEOF
+
+LIBS="$LIBS_search_libs_save"
+
+
+
+  if test "x$ac_cv_want_ptw32" = "xyes"; then
+      CFLAGS="$CFLAGS_saved"
+      LDFLAGS="$LDFLAGS_saved"
+      EXTRA_LIBS="$EXTRA_LIBS_saved"
+  fi
+
+
+   if test "x$ac_cv_func_strcasestr" != "xyes"; then
+  COMPAT_STRCASESTR_TRUE=
+  COMPAT_STRCASESTR_FALSE='#'
+else
+  COMPAT_STRCASESTR_TRUE='#'
+  COMPAT_STRCASESTR_FALSE=
+fi
+
+
+
+### build info
+# Define various build variables in config.h
+
+# Define build flags and substitute in Makefile.in
+# CPPFLAGS
+  flnet_BUILD_CPPFLAGS="-I\$(srcdir) -I\$(srcdir)/include -I\$(srcdir)/xmlrpcpp -I\$(srcdir)/images"
+  if test "x$target_win32" = "xyes"; then
+      flnet_BUILD_CPPFLAGS="$flnet_BUILD_CPPFLAGS -D_WINDOWS"
+  fi
+# CXXFLAGS
+  flnet_BUILD_CXXFLAGS="$FLTK_CFLAGS $flnet_BUILD_CPPFLAGS -pipe -Wall -fexceptions $OPT_CFLAGS $DEBUG_CFLAGS $PTW32_CFLAGS"
+  if test "x$target_mingw32" = "xyes"; then
+      flnet_BUILD_CXXFLAGS="-mthreads $flnet_BUILD_CXXFLAGS -D_WINDOWS"
+  fi
+# LDFLAGS
+  flnet_BUILD_LDFLAGS=
+# LDADD
+  flnet_BUILD_LDADD="$FLTK_LIBS $X_LIBS $EXTRA_LIBS $PTW32_LIBS"
+
+  if test "x$ac_cv_debug" = "xyes"; then
+      flnet_BUILD_CXXFLAGS="$flnet_BUILD_CXXFLAGS -UNDEBUG"
+      flnet_BUILD_LDFLAGS="$flnet_BUILD_LDFLAGS $RDYNAMIC"
+  else
+      flnet_BUILD_CXXFLAGS="$flnet_BUILD_CXXFLAGS -DNDEBUG"
+  fi
+  if test "x$target_mingw32" = "xyes"; then
+      flnet_BUILD_LDFLAGS="-mthreads $flnet_BUILD_LDFLAGS"
+  fi
+
+
+
+
+
+
+#define build variables for config.h
+
+cat >>confdefs.h <<_ACEOF
+#define BUILD_BUILD_PLATFORM "$build"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define BUILD_HOST_PLATFORM "$host"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define BUILD_TARGET_PLATFORM "$target"
+_ACEOF
+
+
+  test "x$LC_ALL" != "x" && LC_ALL_saved="$LC_ALL"
+  LC_ALL=C
+  export LC_ALL
+
+
+  ac_sh_dq="\"`echo $ac_configure_args | sed 's/"/\\\\"/g'`\""
+
+
+cat >>confdefs.h <<_ACEOF
+#define BUILD_CONFIGURE_ARGS $ac_sh_dq
+_ACEOF
+
+
+
+  ac_sh_dq="\"`date | sed 's/"/\\\\"/g'`\""
+
+
+cat >>confdefs.h <<_ACEOF
+#define BUILD_DATE $ac_sh_dq
+_ACEOF
+
+
+
+  ac_sh_dq="\"`whoami | sed 's/"/\\\\"/g'`\""
+
+
+cat >>confdefs.h <<_ACEOF
+#define BUILD_USER $ac_sh_dq
+_ACEOF
+
+
+
+  ac_sh_dq="\"`hostname | sed 's/"/\\\\"/g'`\""
+
+
+cat >>confdefs.h <<_ACEOF
+#define BUILD_HOST $ac_sh_dq
+_ACEOF
+
+
+
+  ac_sh_dq="\"`$CXX -v 2>&1 | tail -1 | sed 's/"/\\\\"/g'`\""
+
+
+cat >>confdefs.h <<_ACEOF
+#define BUILD_COMPILER $ac_sh_dq
+_ACEOF
+
+
+
+  ac_sh_dq="\"`echo $flnet_BUILD_CPPFLAGS $flnet_BUILD_CXXFLAGS | sed 's/"/\\\\"/g'`\""
+
+
+cat >>confdefs.h <<_ACEOF
+#define flnet_BUILD_CXXFLAGS $ac_sh_dq
+_ACEOF
+
+
+  ac_sh_dq="\"`echo $flnet_BUILD_LDFLAGS $flnet_BUILD_LDADD | sed 's/"/\\\\"/g'`\""
+
+
+cat >>confdefs.h <<_ACEOF
+#define flnet_BUILD_LDFLAGS $ac_sh_dq
+_ACEOF
+
+
+  if test "x$LC_ALL_saved" != "x"; then
+      LC_ALL="$LC_ALL_saved"
+      export LC_ALL
+  fi
+
+
+ac_config_files="$ac_config_files Makefile src/Makefile"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_DEBUG_TRUE}" && test -z "${ENABLE_DEBUG_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_DEBUG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${COMPAT_STACK_TRUE}" && test -z "${COMPAT_STACK_FALSE}"; then
+  as_fn_error $? "conditional \"COMPAT_STACK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DARWIN_TRUE}" && test -z "${DARWIN_FALSE}"; then
+  as_fn_error $? "conditional \"DARWIN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_WINDRES_TRUE}" && test -z "${HAVE_WINDRES_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_WINDRES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_NSIS_TRUE}" && test -z "${HAVE_NSIS_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_NSIS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WIN32_TRUE}" && test -z "${WIN32_FALSE}"; then
+  as_fn_error $? "conditional \"WIN32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MINGW32_TRUE}" && test -z "${MINGW32_FALSE}"; then
+  as_fn_error $? "conditional \"MINGW32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_FLUID_TRUE}" && test -z "${HAVE_FLUID_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_FLUID\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${COMPAT_REGEX_TRUE}" && test -z "${COMPAT_REGEX_FALSE}"; then
+  as_fn_error $? "conditional \"COMPAT_REGEX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${COMPAT_STRCASESTR_TRUE}" && test -z "${COMPAT_STRCASESTR_FALSE}"; then
+  as_fn_error $? "conditional \"COMPAT_STRCASESTR\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+	test -d "$1/.";
+      else
+	case $1 in #(
+	-*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by flnet $as_me 7.2.1, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <w1hkj AT w1hkj DOT com>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+flnet config.status 7.2.1
+configured by $0, generated by GNU Autoconf 2.68,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+### summary
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
+Configuration summary:
+
+  Version ..................... $VERSION
+
+  Target OS ................... $target_os
+
+  Static linking .............. $ac_cv_static
+  CPU optimizations ........... $ac_cv_opt
+  Debugging ................... $ac_cv_debug
+
+" >&5
+$as_echo "
+Configuration summary:
+
+  Version ..................... $VERSION
+
+  Target OS ................... $target_os
+
+  Static linking .............. $ac_cv_static
+  CPU optimizations ........... $ac_cv_opt
+  Debugging ................... $ac_cv_debug
+
+" >&6; }
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..4bc00d4
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,167 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+# Generic support for FLTK applications
+
+
+AC_COPYRIGHT([Copyright (C) 2009 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com)])
+
+AC_PREREQ([2.63])
+
+dnl major and minor must be integers; patch may
+dnl contain other characters or be empty
+m4_define(flnet_MAJOR,  [7])
+m4_define(flnet_MINOR,  [2])
+m4_define(flnet_PATCH,  [.1])
+
+AC_INIT([flnet], flnet_MAJOR.flnet_MINOR[]flnet_PATCH, [w1hkj AT w1hkj DOT com])
+
+AC_SUBST([flnet_VERSION_MAJOR], [flnet_MAJOR])
+AC_SUBST([flnet_VERSION_MINOR], [flnet_MINOR])
+AC_SUBST([flnet_VERSION_PATCH], [flnet_PATCH])
+AC_SUBST([flnet_VERSION], [flnet_MAJOR.flnet_MINOR[]flnet_PATCH])
+
+AC_DEFINE([flnet_VERSION_MAJOR], [flnet_MAJOR], [major version number])
+AC_DEFINE([flnet_VERSION_MINOR], [flnet_MINOR], [minor version number])
+AC_DEFINE([flnet_VERSION_PATCH], ["flnet_PATCH"], [patch/alpha version string])
+AC_DEFINE([flnet_VERSION], ["flnet_MAJOR.flnet_MINOR[]flnet_PATCH"], [version string])
+
+AC_SUBST([AC_CONFIG_ARGS], [$ac_configure_args])
+AC_CONFIG_AUX_DIR([build-aux])
+
+# define build, build_cpu, build_vendor, build_os
+AC_CANONICAL_BUILD
+# define host, host_cpu, host_vendor, host_os
+AC_CANONICAL_HOST
+# define target, target_cpu, target_vendor, target_os
+AC_CANONICAL_TARGET
+
+AM_INIT_AUTOMAKE([-Wall foreign std-options 1.9.6])
+
+#change the next config item for the specific application src's
+AC_CONFIG_SRCDIR([src/main.cxx])
+AC_CONFIG_HEADERS([src/config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AC_USE_SYSTEM_EXTENSIONS
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_HEADER_DIRENT
+AC_CHECK_HEADERS([arpa/inet.h execinfo.h fcntl.h limits.h memory.h netdb.h netinet/in.h regex.h stdint.h stdlib.h string.h strings.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h sys/utsname.h termios.h unistd.h values.h linux/ppdev.h dev/ppbus/ppi.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_INT16_T
+AC_TYPE_INT32_T
+AC_TYPE_INT64_T
+AC_TYPE_INT8_T
+AC_C_RESTRICT
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+AC_STRUCT_TM
+AC_TYPE_UINT16_T
+AC_TYPE_UINT32_T
+AC_TYPE_UINT64_T
+AC_TYPE_UINT8_T
+AC_C_VOLATILE
+
+# Checks for library functions.
+AC_FUNC_CLOSEDIR_VOID
+AC_FUNC_ERROR_AT_LINE
+AC_PROG_GCC_TRADITIONAL
+dnl AC_FUNC_MALLOC
+dnl AC_FUNC_REALLOC
+AC_FUNC_SELECT_ARGTYPES
+AC_TYPE_SIGNAL
+AC_FUNC_STRFTIME
+AC_FUNC_STRTOD
+AC_CHECK_FUNCS([getaddrinfo gethostbyname hstrerror gmtime_r localtime_r memmove memset mkdir select setenv snprintf socket socketpair strcasecmp strcasestr strchr strdup strerror strlcpy strncasecmp strrchr strstr strtol uname unsetenv vsnprintf])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_TYPE_SIZE_T
+
+# Checks for library functions.
+AC_CHECK_FUNCS([strstr])
+
+### static flag
+# Set ac_cv_static to yes/no
+# Substitute RTLIB in Makefile
+AC_FL_STATIC
+
+### optimizations
+# Set ac_cv_opt to arg
+# Substitute OPT_FLAGS in Makefile
+AC_FL_OPT
+
+### debug flag
+# Set ac_cv_debug to yes/no
+# Override CXXFLAGS
+# Set ENABLE_DEBUG Makefile conditional
+# Substitute RDYNAMIC in Makefile
+AC_FL_DEBUG
+
+###### OS support
+### OSX
+# Set ac_cv_mac_universal to yes/no
+# Set DARWIN Makefile conditional
+# Substitute MAC_UNIVERSAL_CFLAGS and MAC_UNIVERSAL_LDFLAGS in Makefile
+AC_FL_MACOSX
+### win32
+# Set WIN32 Makefile conditional
+# Set HAVE_WINDRES Makefile conditional
+# Substitute WINDRES in Makefile
+AC_FL_WIN32
+
+### X11
+# Set ac_cv_x to yes/no
+# Define USE_X in config.h
+# Substitute X_CFLAGS and X_LIBS in Makefile
+if test "x$target_darwin" = "xno" && test "x$target_win32" = "xno"; then
+    AC_flnet_PKG_CHECK([x], [x11], [no], [yes])
+fi
+
+### FLTK
+# Substitute FLTK_CFLAGS and FLTK_LIBS in Makefile
+# Set FLUID variable
+# Set HAVE_FLUID Makefile conditional
+AC_CHECK_FLTK
+
+### XML-RPC library
+# Set ac_cv_xmlrpc to yes/no
+# Substitute XMLRPC_CFLAGS and XMLRPC_LIBS in Makefile
+# Define USE_XMLRPC in config.h
+# Set ENABLE_XMLRPC Makefile conditional
+#AC_flnet_XMLRPC
+
+### Non-POSIX compatibility (i.e. mingw32)
+# Sets various Makefile conditionals; see m4/np-compat.m4
+AC_FL_NP_COMPAT
+
+### build info
+# Define various build variables in config.h
+AC_flnet_BUILD_INFO
+
+AC_CONFIG_FILES([Makefile src/Makefile])
+
+AC_OUTPUT
+
+### summary
+AC_MSG_RESULT([
+Configuration summary:
+
+  Version ..................... $VERSION
+  
+  Target OS ................... $target_os
+
+  Static linking .............. $ac_cv_static
+  CPU optimizations ........... $ac_cv_opt
+  Debugging ................... $ac_cv_debug
+
+])
diff --git a/data/flnet.desktop b/data/flnet.desktop
new file mode 100644
index 0000000..d29c58d
--- /dev/null
+++ b/data/flnet.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=flnet
+GenericName=Amateur Radio Data Encapsulation
+Comment=Amateur Radio Communications
+Exec=flnet
+Icon=flnet
+Terminal=false
+Type=Application
+Categories=Network;HamRadio;
diff --git a/data/flnet.xpm b/data/flnet.xpm
new file mode 100644
index 0000000..7f4e4ee
--- /dev/null
+++ b/data/flnet.xpm
@@ -0,0 +1,1403 @@
+/* XPM */
+static char * Net_xpm[] = {
+"64 64 1336 2",
+"  	c None",
+". 	c #FCF5EF",
+"+ 	c #F4F0EB",
+"@ 	c #E8E3DC",
+"# 	c #DFDBD3",
+"$ 	c #AFAEA4",
+"% 	c #8D8C84",
+"& 	c #9B998F",
+"* 	c #CDC9BD",
+"= 	c #979287",
+"- 	c #817C72",
+"; 	c #D8D5C9",
+"> 	c #C6C2B8",
+", 	c #EEEADC",
+"' 	c #D4CCBC",
+") 	c #DDD5C5",
+"! 	c #B6AD9C",
+"~ 	c #6F6855",
+"{ 	c #46402F",
+"] 	c #666250",
+"^ 	c #B2B0A0",
+"/ 	c #908F7F",
+"( 	c #090600",
+"_ 	c #69655C",
+": 	c #B7B1A4",
+"< 	c #191307",
+"[ 	c #5D554A",
+"} 	c #8B8376",
+"| 	c #2C241E",
+"1 	c #C3BDB2",
+"2 	c #DCD7C5",
+"3 	c #C4BDAA",
+"4 	c #B0AA92",
+"5 	c #BDB59D",
+"6 	c #DBD4B9",
+"7 	c #DFD8BD",
+"8 	c #847E64",
+"9 	c #0C0700",
+"0 	c #464431",
+"a 	c #FFFFF2",
+"b 	c #807E6C",
+"c 	c #000000",
+"d 	c #C0BAAD",
+"e 	c #DCD5C9",
+"f 	c #BCB3A4",
+"g 	c #6E6557",
+"h 	c #3B3125",
+"i 	c #BFB9AF",
+"j 	c #EAE8D8",
+"k 	c #CDC8B6",
+"l 	c #938E7B",
+"m 	c #AFA990",
+"n 	c #CDC4A8",
+"o 	c #50462B",
+"p 	c #130A00",
+"q 	c #E5E0C0",
+"r 	c #EAE8CB",
+"s 	c #48442E",
+"t 	c #070500",
+"u 	c #85836E",
+"v 	c #D7D4C2",
+"w 	c #201D18",
+"x 	c #0D0700",
+"y 	c #FDFDEE",
+"z 	c #41382E",
+"A 	c #62574D",
+"B 	c #D5C8B7",
+"C 	c #0A0000",
+"D 	c #6D6455",
+"E 	c #938E86",
+"F 	c #D0D0C4",
+"G 	c #9E9B8D",
+"H 	c #B1AD9D",
+"I 	c #E1DBC8",
+"J 	c #C9C1AA",
+"K 	c #80775B",
+"L 	c #2C220E",
+"M 	c #2A2003",
+"N 	c #2A2103",
+"O 	c #CEC8AB",
+"P 	c #C2BEA3",
+"Q 	c #1C180A",
+"R 	c #27211C",
+"S 	c #FFFFF4",
+"T 	c #858578",
+"U 	c #535044",
+"V 	c #FBF6E8",
+"W 	c #D8D2BF",
+"X 	c #948B78",
+"Y 	c #F8EBD9",
+"Z 	c #655845",
+"` 	c #7E7262",
+" .	c #63594E",
+"..	c #8E8D81",
+"+.	c #C0BAB2",
+"@.	c #FBF7EC",
+"#.	c #FFF6E8",
+"$.	c #E2D7C5",
+"%.	c #C3B8A2",
+"&.	c #5E5238",
+"*.	c #2B1F04",
+"=.	c #241901",
+"-.	c #BDB39B",
+";.	c #FFF8E4",
+">.	c #C2BCAC",
+",.	c #CFCDC0",
+"'.	c #F6F4E8",
+").	c #F3F5EB",
+"!.	c #ECECE0",
+"~.	c #FFFFEF",
+"{.	c #FFF3DF",
+"].	c #E4D4C0",
+"^.	c #AF9F8D",
+"/.	c #716656",
+"(.	c #B0B3A6",
+"_.	c #8F9183",
+":.	c #C3C2B9",
+"<.	c #FFF8F6",
+"[.	c #FEF6F5",
+"}.	c #FEFBF5",
+"|.	c #FAF0E3",
+"1.	c #BDB1A0",
+"2.	c #887B69",
+"3.	c #746852",
+"4.	c #938673",
+"5.	c #D5C9B8",
+"6.	c #E0D5C8",
+"7.	c #FFFFF6",
+"8.	c #FFFAF3",
+"9.	c #F0F0E6",
+"0.	c #F6F3E6",
+"a.	c #C3BAAA",
+"b.	c #B0A38F",
+"c.	c #8E7E66",
+"d.	c #8C7A64",
+"e.	c #7A6956",
+"f.	c #786A58",
+"g.	c #928A7F",
+"h.	c #C4C2B4",
+"i.	c #99998B",
+"j.	c #B7B9AB",
+"k.	c #E6E6DD",
+"l.	c #FBF4F5",
+"m.	c #FCF3F3",
+"n.	c #FDF4F0",
+"o.	c #FDFBF0",
+"p.	c #D0C3B4",
+"q.	c #918572",
+"r.	c #847764",
+"s.	c #C0B3A0",
+"t.	c #D7CCBB",
+"u.	c #CABEB1",
+"v.	c #A4998F",
+"w.	c #918680",
+"x.	c #635E57",
+"y.	c #323329",
+"z.	c #18180C",
+"A.	c #130E03",
+"B.	c #EBE3D2",
+"C.	c #968874",
+"D.	c #0B0000",
+"E.	c #1D0C00",
+"F.	c #231302",
+"G.	c #281B08",
+"H.	c #171616",
+"I.	c #A19987",
+"J.	c #A5A191",
+"K.	c #E3E3D7",
+"L.	c #EBECE4",
+"M.	c #F6F3F3",
+"N.	c #FFFDFD",
+"O.	c #F3EDE8",
+"P.	c #FAF7EB",
+"Q.	c #F2EADA",
+"R.	c #9B8F7C",
+"S.	c #60543D",
+"T.	c #594D37",
+"U.	c #463A2B",
+"V.	c #1D1102",
+"W.	c #180C00",
+"X.	c #060000",
+"Y.	c #090500",
+"Z.	c #151003",
+"`.	c #1A1304",
+" +	c #B4A99A",
+".+	c #E9DBCA",
+"++	c #554741",
+"@+	c #5B4C3C",
+"#+	c #5A4D3C",
+"$+	c #372D22",
+"%+	c #5A5340",
+"&+	c #A09883",
+"*+	c #C4C0AF",
+"=+	c #F1F0E3",
+"-+	c #F0F0E9",
+";+	c #FAF9F8",
+">+	c #F2EFEC",
+",+	c #FEFDF6",
+"'+	c #FFFFF3",
+")+	c #BFB8A6",
+"!+	c #453A25",
+"~+	c #1B1000",
+"{+	c #2B1F06",
+"]+	c #1A0E00",
+"^+	c #1C1101",
+"/+	c #322616",
+"(+	c #3F3326",
+"_+	c #7B7366",
+":+	c #979385",
+"<+	c #C0BFAF",
+"[+	c #C2C0B0",
+"}+	c #EBE5D5",
+"|+	c #F9EFDF",
+"1+	c #FAEBDB",
+"2+	c #E4D6C4",
+"3+	c #D4C7B6",
+"4+	c #A69D8A",
+"5+	c #8E8774",
+"6+	c #A5A190",
+"7+	c #A8A08B",
+"8+	c #B4AC98",
+"9+	c #D2CEBC",
+"0+	c #EEEBDF",
+"a+	c #FDFDF5",
+"b+	c #EFEEEB",
+"c+	c #F7F5F0",
+"d+	c #736E5F",
+"e+	c #231B07",
+"f+	c #1F1504",
+"g+	c #251A01",
+"h+	c #2D2107",
+"i+	c #40341C",
+"j+	c #948973",
+"k+	c #F1E9D7",
+"l+	c #FBF0DE",
+"m+	c #FFFBEA",
+"n+	c #E8E2D4",
+"o+	c #B2AC9C",
+"p+	c #7D7666",
+"q+	c #716758",
+"r+	c #AB9F8F",
+"s+	c #978A7A",
+"t+	c #1C0F09",
+"u+	c #2D2212",
+"v+	c #372E1B",
+"w+	c #37301D",
+"x+	c #3A331F",
+"y+	c #8E8671",
+"z+	c #C0B8A3",
+"A+	c #DCD5C4",
+"B+	c #ECEADC",
+"C+	c #FCFCF3",
+"D+	c #FBFAF5",
+"E+	c #D6D4CE",
+"F+	c #252117",
+"G+	c #1B1506",
+"H+	c #302814",
+"I+	c #463C23",
+"J+	c #73674E",
+"K+	c #766B4F",
+"L+	c #B6AA91",
+"M+	c #B2A791",
+"N+	c #796E5B",
+"O+	c #362B17",
+"P+	c #100800",
+"Q+	c #090300",
+"R+	c #100900",
+"S+	c #130C00",
+"T+	c #160D09",
+"U+	c #C6BCAC",
+"V+	c #FFFBEB",
+"W+	c #2D2111",
+"X+	c #20150B",
+"Y+	c #27210B",
+"Z+	c #221C11",
+"`+	c #EAE5D0",
+" @	c #9E937E",
+".@	c #CAC0AB",
+"+@	c #D4CDBB",
+"@@	c #FBFAF1",
+"#@	c #ACACA4",
+"$@	c #25241A",
+"%@	c #242014",
+"&@	c #373121",
+"*@	c #7B7464",
+"=@	c #EFE6CB",
+"-@	c #C3B79C",
+";@	c #423722",
+">@	c #1D1100",
+",@	c #100600",
+"'@	c #150A00",
+")@	c #1F1707",
+"!@	c #211B0C",
+"~@	c #2E2619",
+"{@	c #575041",
+"]@	c #514841",
+"^@	c #B6AD9E",
+"/@	c #FEFAEB",
+"(@	c #BFB7A7",
+"_@	c #B3A897",
+":@	c #ADA593",
+"<@	c #827C66",
+"[@	c #857F68",
+"}@	c #C9C4AF",
+"|@	c #A59A84",
+"1@	c #CBC1AB",
+"2@	c #DCD6C2",
+"3@	c #FAF6EA",
+"4@	c #BFBDB1",
+"5@	c #1B1B12",
+"6@	c #19180B",
+"7@	c #635F52",
+"8@	c #D5D3C3",
+"9@	c #F0E9D3",
+"0@	c #696054",
+"a@	c #2C210B",
+"b@	c #271C06",
+"c@	c #281D07",
+"d@	c #1C1100",
+"e@	c #3D3318",
+"f@	c #6D6350",
+"g@	c #A59C8B",
+"h@	c #CBC7B4",
+"i@	c #DFDECD",
+"j@	c #FFFAE9",
+"k@	c #FDF4E4",
+"l@	c #CBC3B4",
+"m@	c #CBC1B4",
+"n@	c #B3ADA0",
+"o@	c #847A6A",
+"p@	c #645B49",
+"q@	c #6D6753",
+"r@	c #554F38",
+"s@	c #4E4831",
+"t@	c #978C76",
+"u@	c #C6BCA6",
+"v@	c #DBD4C0",
+"w@	c #EFECDD",
+"x@	c #B2B0A4",
+"y@	c #AAA99C",
+"z@	c #F8F5E6",
+"A@	c #B4AE9E",
+"B@	c #1B1207",
+"C@	c #211705",
+"D@	c #201400",
+"E@	c #1C1000",
+"F@	c #483C22",
+"G@	c #887D63",
+"H@	c #E8DEC3",
+"I@	c #FCF2D8",
+"J@	c #B1A78F",
+"K@	c #857D69",
+"L@	c #746C5B",
+"M@	c #2D2415",
+"N@	c #261E11",
+"O@	c #090200",
+"P@	c #C9C1B5",
+"Q@	c #E3DACD",
+"R@	c #282110",
+"S@	c #140D00",
+"T@	c #231B09",
+"U@	c #1D1501",
+"V@	c #282111",
+"W@	c #C6C5B4",
+"X@	c #B2A68F",
+"Y@	c #CEC2AC",
+"Z@	c #C9C0AD",
+"`@	c #F8F4E5",
+" #	c #EEECE0",
+".#	c #D0D1C4",
+"+#	c #FDFCEF",
+"@#	c #868374",
+"##	c #010000",
+"$#	c #352C18",
+"%#	c #372C16",
+"&#	c #80755F",
+"*#	c #CFC3AB",
+"=#	c #8E826A",
+"-#	c #655B42",
+";#	c #382E13",
+">#	c #2A2009",
+",#	c #040000",
+"'#	c #191001",
+")#	c #251C0B",
+"!#	c #20180B",
+"~#	c #120B06",
+"{#	c #645C52",
+"]#	c #FFFFF5",
+"^#	c #968F81",
+"/#	c #6A6351",
+"(#	c #8A826D",
+"_#	c #625A43",
+":#	c #6E674D",
+"<#	c #D1CEBB",
+"[#	c #988C73",
+"}#	c #685C45",
+"|#	c #89806C",
+"1#	c #E6DFD1",
+"2#	c #FAF9EC",
+"3#	c #F3F4E8",
+"4#	c #55544A",
+"5#	c #0E0B01",
+"6#	c #3A3425",
+"7#	c #595142",
+"8#	c #E9E1D0",
+"9#	c #EFEAD7",
+"0#	c #766A5C",
+"a#	c #1F1403",
+"b#	c #0D0300",
+"c#	c #2C2207",
+"d#	c #372C12",
+"e#	c #493D28",
+"f#	c #615745",
+"g#	c #817B6A",
+"h#	c #9C9588",
+"i#	c #DDD8CC",
+"j#	c #F3EDE2",
+"k#	c #F7F0E4",
+"l#	c #FFFFF8",
+"m#	c #E0DCCA",
+"n#	c #AAA28E",
+"o#	c #BBB39B",
+"p#	c #92896F",
+"q#	c #76735D",
+"r#	c #999C89",
+"s#	c #FFFFF9",
+"t#	c #6C6149",
+"u#	c #827964",
+"v#	c #DDD6C7",
+"w#	c #FBF9ED",
+"x#	c #B6B6AA",
+"y#	c #605C52",
+"z#	c #B0A99F",
+"A#	c #F2EEE1",
+"B#	c #9A9182",
+"C#	c #352822",
+"D#	c #24180D",
+"E#	c #221604",
+"F#	c #241904",
+"G#	c #41371E",
+"H#	c #7C7259",
+"I#	c #C8BDA5",
+"J#	c #ECE1CC",
+"K#	c #EADECB",
+"L#	c #CFC9B8",
+"M#	c #AEA79B",
+"N#	c #837D72",
+"O#	c #4B463D",
+"P#	c #EAE5DB",
+"Q#	c #FFFEF1",
+"R#	c #C4BEAD",
+"S#	c #191100",
+"T#	c #281F0D",
+"U#	c #41371C",
+"V#	c #1A1800",
+"W#	c #A4A792",
+"X#	c #33240D",
+"Y#	c #51432C",
+"Z#	c #C9C0AB",
+"`#	c #D4CEBD",
+" $	c #E8E6DA",
+".$	c #DCDCD1",
+"+$	c #8F8D84",
+"@$	c #E5E1D6",
+"#$	c #FDFCF2",
+"$$	c #483E39",
+"%$	c #251911",
+"&$	c #2D1F13",
+"*$	c #170A00",
+"=$	c #655745",
+"-$	c #9A8F7A",
+";$	c #948A72",
+">$	c #9F957B",
+",$	c #71674E",
+"'$	c #322617",
+")$	c #1B0F0D",
+"!$	c #1E150A",
+"~$	c #211A0C",
+"{$	c #050000",
+"]$	c #2C2820",
+"^$	c #F2F0E4",
+"/$	c #EAE3D3",
+"($	c #D8D0BC",
+"_$	c #746A52",
+":$	c #180D00",
+"<$	c #48462C",
+"[$	c #E8EBD5",
+"}$	c #45371D",
+"|$	c #908269",
+"1$	c #A49A87",
+"2$	c #A8A191",
+"3$	c #E3E1D4",
+"4$	c #F6F4EB",
+"5$	c #FFFFF7",
+"6$	c #E9E5DC",
+"7$	c #160E06",
+"8$	c #1A1008",
+"9$	c #31241B",
+"0$	c #6C5F54",
+"a$	c #F4E8DA",
+"b$	c #D9D4C4",
+"c$	c #4C402C",
+"d$	c #281E05",
+"e$	c #130900",
+"f$	c #261B08",
+"g$	c #2C2313",
+"h$	c #1A120D",
+"i$	c #454035",
+"j$	c #D2CEC5",
+"k$	c #FDFDF2",
+"l$	c #EDE9DC",
+"m$	c #EEE8D7",
+"n$	c #D4C9B0",
+"o$	c #CEC4A7",
+"p$	c #AEAA8F",
+"q$	c #A2A68E",
+"r$	c #B3B5A3",
+"s$	c #827763",
+"t$	c #796B55",
+"u$	c #241707",
+"v$	c #736853",
+"w$	c #DFD7C7",
+"x$	c #F2EFE7",
+"y$	c #DBD8D0",
+"z$	c #0C0800",
+"A$	c #272118",
+"B$	c #60594E",
+"C$	c #CAC2B7",
+"D$	c #F1E8DA",
+"E$	c #A29E91",
+"F$	c #231507",
+"G$	c #221405",
+"H$	c #261905",
+"I$	c #1B0D00",
+"J$	c #41341E",
+"K$	c #574B35",
+"L$	c #877D67",
+"M$	c #CAC5B1",
+"N$	c #F5F1DF",
+"O$	c #FBF3E5",
+"P$	c #EBE8DC",
+"Q$	c #FFFBEE",
+"R$	c #F1ECDF",
+"S$	c #F3ECDB",
+"T$	c #E1D9C7",
+"U$	c #C2B8A4",
+"V$	c #554C38",
+"W$	c #4A442A",
+"X$	c #363324",
+"Y$	c #6F6B59",
+"Z$	c #453826",
+"`$	c #302009",
+" %	c #AC9B80",
+".%	c #E8D9C5",
+"+%	c #F7F1E9",
+"@%	c #D6D2CA",
+"#%	c #231F15",
+"$%	c #A09D91",
+"%%	c #FBFAEC",
+"&%	c #C5C2B1",
+"*%	c #39342E",
+"=%	c #191101",
+"-%	c #201505",
+";%	c #1A0B00",
+">%	c #51402E",
+",%	c #6B5849",
+"'%	c #B2A28C",
+")%	c #DCD2B5",
+"!%	c #BBB296",
+"~%	c #7E7760",
+"{%	c #665E4C",
+"]%	c #494036",
+"^%	c #463D2C",
+"/%	c #7F7869",
+"(%	c #FBF8E8",
+"_%	c #E3DDCD",
+":%	c #F6F0DF",
+"<%	c #86806F",
+"[%	c #100A00",
+"}%	c #261D07",
+"|%	c #251A0C",
+"1%	c #E3D8C7",
+"2%	c #4A3D2C",
+"3%	c #7F7059",
+"4%	c #AD9C81",
+"5%	c #B0A18B",
+"6%	c #D6CDC6",
+"7%	c #FBF9F2",
+"8%	c #E1DDD2",
+"9%	c #FEFEF2",
+"0%	c #858272",
+"a%	c #1D1A0A",
+"b%	c #35301E",
+"c%	c #1D1603",
+"d%	c #7B715F",
+"e%	c #F1E2D0",
+"f%	c #9C8B78",
+"g%	c #574432",
+"h%	c #392A17",
+"i%	c #281F0C",
+"j%	c #271D06",
+"k%	c #2B200B",
+"l%	c #191000",
+"m%	c #080000",
+"n%	c #5C5544",
+"o%	c #F6F4E4",
+"p%	c #FAF4E4",
+"q%	c #A29C8C",
+"r%	c #ADA894",
+"s%	c #A99F8A",
+"t%	c #978B75",
+"u%	c #C8BCA9",
+"v%	c #D9D1C2",
+"w%	c #93846F",
+"x%	c #4C3C24",
+"y%	c #564731",
+"z%	c #EEE5DC",
+"A%	c #F4EDE5",
+"B%	c #666258",
+"C%	c #272413",
+"D%	c #57523F",
+"E%	c #C2BCAA",
+"F%	c #A69C8A",
+"G%	c #190802",
+"H%	c #220F00",
+"I%	c #261704",
+"J%	c #221804",
+"K%	c #150B04",
+"L%	c #2A200C",
+"M%	c #413621",
+"N%	c #756D5B",
+"O%	c #ADA492",
+"P%	c #F1EADA",
+"Q%	c #FFFEEE",
+"R%	c #EFEADA",
+"S%	c #CDC7B7",
+"T%	c #D7D2C1",
+"U%	c #ADA895",
+"V%	c #968B77",
+"W%	c #8C8068",
+"X%	c #685C49",
+"Y%	c #887F70",
+"Z%	c #635642",
+"`%	c #1D0D00",
+" &	c #7B6E57",
+".&	c #D5CDC1",
+"+&	c #F6F0E6",
+"@&	c #050100",
+"#&	c #484537",
+"$&	c #B2B0A1",
+"%&	c #FFFFEE",
+"&&	c #BCB9A8",
+"*&	c #594E40",
+"=&	c #140700",
+"-&	c #291907",
+";&	c #2D1B0D",
+">&	c #3D2F16",
+",&	c #605639",
+"'&	c #A99F82",
+")&	c #DED4BA",
+"!&	c #E9E0CB",
+"~&	c #D8D4C2",
+"{&	c #C6BDAC",
+"]&	c #ABA594",
+"^&	c #686053",
+"/&	c #8D8678",
+"(&	c #BFBAAA",
+"_&	c #5D5747",
+":&	c #312710",
+"<&	c #231700",
+"[&	c #170B00",
+"}&	c #98917F",
+"|&	c #463B28",
+"1&	c #665A40",
+"2&	c #CFC3AE",
+"3&	c #CDC4B6",
+"4&	c #E8E0D4",
+"5&	c #FFFAED",
+"6&	c #C0B9AC",
+"7&	c #E3E2D4",
+"8&	c #E6E4D6",
+"9&	c #655F50",
+"0&	c #1C1403",
+"a&	c #20160A",
+"b&	c #1E1100",
+"c&	c #685845",
+"d&	c #8C7B6C",
+"e&	c #8E8067",
+"f&	c #978E70",
+"g&	c #8D8468",
+"h&	c #5A5043",
+"i&	c #423726",
+"j&	c #312714",
+"k&	c #211706",
+"l&	c #0E0700",
+"m&	c #292218",
+"n&	c #F9F8E8",
+"o&	c #B1AA9A",
+"p&	c #453F2D",
+"q&	c #70654F",
+"r&	c #665A42",
+"s&	c #675B4A",
+"t&	c #BAB3A0",
+"u&	c #A69B85",
+"v&	c #7F745F",
+"w&	c #5E5443",
+"x&	c #E4DBCB",
+"y&	c #F9F2E2",
+"z&	c #C9C4B6",
+"A&	c #353223",
+"B&	c #332D1D",
+"C&	c #1A1403",
+"D&	c #544C3A",
+"E&	c #D2CEBB",
+"F&	c #FFFFF1",
+"G&	c #8B7B65",
+"H&	c #211302",
+"I&	c #1F1501",
+"J&	c #241A02",
+"K&	c #221706",
+"L&	c #271E0D",
+"M&	c #4D4636",
+"N&	c #BBB3A4",
+"O&	c #F8F2E2",
+"P&	c #FEFCEC",
+"Q&	c #FBFAE8",
+"R&	c #F1E7D1",
+"S&	c #CABEA4",
+"T&	c #ACA088",
+"U&	c #A8A08C",
+"V&	c #A5A195",
+"W&	c #665E4A",
+"X&	c #4E4430",
+"Y&	c #D1C9B6",
+"Z&	c #EDE5D3",
+"`&	c #F4F4E3",
+" *	c #403A30",
+".*	c #1F1C13",
+"+*	c #3C3628",
+"@*	c #AFAA9A",
+"#*	c #D9D1BF",
+"$*	c #322511",
+"%*	c #120300",
+"&*	c #33250C",
+"**	c #2B2105",
+"=*	c #372D14",
+"-*	c #675D48",
+";*	c #D6CCB9",
+">*	c #FEFDED",
+",*	c #F8F7E6",
+"'*	c #DFD9CA",
+")*	c #B6B0A0",
+"!*	c #B5AF9E",
+"~*	c #625C49",
+"{*	c #1A1000",
+"]*	c #35290F",
+"^*	c #42361F",
+"/*	c #928E7C",
+"(*	c #49412A",
+"_*	c #AFA48D",
+":*	c #D7CEB9",
+"<*	c #EAE2CE",
+"[*	c #FAF5E3",
+"}*	c #857E6F",
+"|*	c #7B786A",
+"1*	c #FFFFFC",
+"2*	c #E2E0D1",
+"3*	c #746C5D",
+"4*	c #1B1401",
+"5*	c #201500",
+"6*	c #32260D",
+"7*	c #3E331B",
+"8*	c #51482B",
+"9*	c #8E8469",
+"0*	c #E7DEC5",
+"a*	c #D8D4BF",
+"b*	c #B4AC9A",
+"c*	c #A09785",
+"d*	c #5E5647",
+"e*	c #312A1E",
+"f*	c #0B0400",
+"g*	c #FBF5E5",
+"h*	c #BBB5A1",
+"i*	c #30260F",
+"j*	c #4C4125",
+"k*	c #392D16",
+"l*	c #47402E",
+"m*	c #D2D0BC",
+"n*	c #7E7661",
+"o*	c #9D9379",
+"p*	c #7A6F58",
+"q*	c #EBE3CE",
+"r*	c #EBE7D5",
+"s*	c #F6F1E1",
+"t*	c #8D8A7E",
+"u*	c #342E21",
+"v*	c #1D1606",
+"w*	c #211907",
+"x*	c #6E654D",
+"y*	c #CAC6AD",
+"z*	c #BFB397",
+"A*	c #6B6244",
+"B*	c #574D31",
+"C*	c #423829",
+"D*	c #2C210E",
+"E*	c #1B1100",
+"F*	c #120B00",
+"G*	c #362F1E",
+"H*	c #433D2E",
+"I*	c #E2DCCC",
+"J*	c #F7F4E0",
+"K*	c #D4CFB8",
+"L*	c #D1C6AB",
+"M*	c #C3B79D",
+"N*	c #BDB79D",
+"O*	c #B7B49E",
+"P*	c #ADAC9A",
+"Q*	c #473C22",
+"R*	c #3B3018",
+"S*	c #DAD1BA",
+"T*	c #EDE7D4",
+"U*	c #7A7366",
+"V*	c #241E12",
+"W*	c #251F11",
+"X*	c #5E5847",
+"Y*	c #C9C1AD",
+"Z*	c #FFFFE7",
+"`*	c #CAC1A7",
+" =	c #3D331D",
+".=	c #221800",
+"+=	c #1F1500",
+"@=	c #130800",
+"#=	c #241A09",
+"$=	c #534A3A",
+"%=	c #8C8575",
+"&=	c #DDD7C7",
+"*=	c #F6F3E3",
+"==	c #FBFBEB",
+"-=	c #DBD6C2",
+";=	c #A89F88",
+">=	c #6F6448",
+",=	c #54482E",
+"'=	c #514A31",
+")=	c #37341C",
+"!=	c #63624D",
+"~=	c #4F4832",
+"{=	c #372D10",
+"]=	c #8F8568",
+"^=	c #C0B8A0",
+"/=	c #F4ECDA",
+"(=	c #FFFAEA",
+"_=	c #59544F",
+":=	c #1E180E",
+"<=	c #ABA697",
+"[=	c #FEF8E9",
+"}=	c #E2DBC7",
+"|=	c #655E44",
+"1=	c #0F0500",
+"2=	c #241B02",
+"3=	c #342B0D",
+"4=	c #2C2206",
+"5=	c #483E25",
+"6=	c #A19680",
+"7=	c #E5DBC9",
+"8=	c #F9F7E6",
+"9=	c #D7D0C1",
+"0=	c #958D7E",
+"a=	c #554E3E",
+"b=	c #272213",
+"c=	c #CBC6B2",
+"d=	c #B3A98F",
+"e=	c #190E04",
+"f=	c #372C11",
+"g=	c #322B10",
+"h=	c #2A270F",
+"i=	c #CCCBB6",
+"j=	c #FCFDEF",
+"k=	c #72684A",
+"l=	c #C5BB9E",
+"m=	c #9E977C",
+"n=	c #DFD8C5",
+"o=	c #FFFDEE",
+"p=	c #EEEADD",
+"q=	c #FDF9ED",
+"r=	c #FCFBEE",
+"s=	c #928C7D",
+"t=	c #1F180B",
+"u=	c #231C03",
+"v=	c #32270C",
+"w=	c #574E35",
+"x=	c #867C60",
+"y=	c #8C8266",
+"z=	c #A1977E",
+"A=	c #BDB29D",
+"B=	c #867C6E",
+"C=	c #413827",
+"D=	c #2A2313",
+"E=	c #0F0800",
+"F=	c #140E00",
+"G=	c #19140F",
+"H=	c #B7B3A0",
+"I=	c #F4ECD5",
+"J=	c #837859",
+"K=	c #857A5E",
+"L=	c #878065",
+"M=	c #8D8970",
+"N=	c #DFDDC8",
+"O=	c #B5B7A4",
+"P=	c #91876B",
+"Q=	c #52492C",
+"R=	c #342D14",
+"S=	c #C5BFAD",
+"T=	c #FFFEF0",
+"U=	c #D9D6CD",
+"V=	c #504D40",
+"W=	c #130F00",
+"X=	c #2E2715",
+"Y=	c #686048",
+"Z=	c #BCB89D",
+"`=	c #F9F1D4",
+" -	c #B7A78D",
+".-	c #483927",
+"+-	c #35260F",
+"@-	c #342711",
+"#-	c #110600",
+"$-	c #27200D",
+"%-	c #4D4635",
+"&-	c #888373",
+"*-	c #A09B8E",
+"=-	c #C1BEB1",
+"--	c #DDDACE",
+";-	c #EFE8D4",
+">-	c #ECE0C7",
+",-	c #E4D8BF",
+"'-	c #CFC4AB",
+")-	c #C3B9A0",
+"!-	c #D4CBB5",
+"~-	c #9E9986",
+"{-	c #DDD9CA",
+"]-	c #6E674B",
+"^-	c #372F12",
+"/-	c #7C765D",
+"(-	c #D5D0BE",
+"_-	c #F0EDE0",
+":-	c #FFFFFD",
+"<-	c #747168",
+"[-	c #5C5849",
+"}-	c #C3BCAB",
+"|-	c #FAF9E4",
+"1-	c #F9F0D6",
+"2-	c #584B35",
+"3-	c #1F0D02",
+"4-	c #3A2813",
+"5-	c #3C2C15",
+"6-	c #2D1F07",
+"7-	c #4C402A",
+"8-	c #988D77",
+"9-	c #CBC4AF",
+"0-	c #F8F8E6",
+"a-	c #FBF9EA",
+"b-	c #F3F0E7",
+"c-	c #F8F5ED",
+"d-	c #F1EBDB",
+"e-	c #E8DDC7",
+"f-	c #B0A48C",
+"g-	c #D1C4AD",
+"h-	c #887962",
+"i-	c #7F705B",
+"j-	c #C1B4A1",
+"k-	c #A79C8D",
+"l-	c #877E64",
+"m-	c #62593D",
+"n-	c #CBC4AC",
+"o-	c #BFBAA8",
+"p-	c #E8E5D7",
+"q-	c #CFCCC5",
+"r-	c #9E9C92",
+"s-	c #F8F5E9",
+"t-	c #FCFDEE",
+"u-	c #8A8270",
+"v-	c #160E00",
+"w-	c #211402",
+"x-	c #372611",
+"y-	c #473623",
+"z-	c #554430",
+"A-	c #978972",
+"B-	c #E3D7C0",
+"C-	c #FFF6E0",
+"D-	c #E0D8C3",
+"E-	c #E6E1CE",
+"F-	c #F0ECDB",
+"G-	c #EFE9DC",
+"H-	c #EDE9DE",
+"I-	c #7F7A71",
+"J-	c #9E9787",
+"K-	c #CFC5AE",
+"L-	c #72674F",
+"M-	c #746850",
+"N-	c #190D00",
+"O-	c #B2A592",
+"P-	c #706556",
+"Q-	c #A1967C",
+"R-	c #897F69",
+"S-	c #4E4736",
+"T-	c #C8C3B6",
+"U-	c #F4F1E7",
+"V-	c #F7F4ED",
+"W-	c #A9A79F",
+"X-	c #393428",
+"Y-	c #1D1608",
+"Z-	c #443E2D",
+"`-	c #6C6452",
+" ;	c #B6AC9A",
+".;	c #DCCEBC",
+"+;	c #AB9D88",
+"@;	c #8D806A",
+"#;	c #A0957E",
+"$;	c #B6AB93",
+"%;	c #C7BFA7",
+"&;	c #BFB6A1",
+"*;	c #40382A",
+"=;	c #625A4A",
+"-;	c #DBD2C4",
+";;	c #1C140B",
+">;	c #261D0F",
+",;	c #D0C6AF",
+"';	c #2E220C",
+");	c #4A3E34",
+"!;	c #A89C83",
+"~;	c #160A01",
+"{;	c #A19684",
+"];	c #756D5F",
+"^;	c #897C63",
+"/;	c #2B1F0B",
+"(;	c #4A4231",
+"_;	c #CDC6BA",
+":;	c #F2EEE3",
+"<;	c #FCFBF3",
+"[;	c #C1BDB7",
+"};	c #0D0A03",
+"|;	c #2B271E",
+"1;	c #6E695F",
+"2;	c #C9C5B8",
+"3;	c #F5F1E3",
+"4;	c #DED2C2",
+"5;	c #A19582",
+"6;	c #786C57",
+"7;	c #453B23",
+"8;	c #1E140D",
+"9;	c #9E947A",
+"0;	c #B9AE97",
+"a;	c #1F1506",
+"b;	c #140800",
+"c;	c #C7BCAB",
+"d;	c #584C41",
+"e;	c #160B00",
+"f;	c #CFC5AC",
+"g;	c #5F533C",
+"h;	c #2B1F18",
+"i;	c #BBAF98",
+"j;	c #170C08",
+"k;	c #867C6A",
+"l;	c #968E81",
+"m;	c #4A3F2C",
+"n;	c #AFA695",
+"o;	c #CFC7BB",
+"p;	c #EBE3D9",
+"q;	c #FFFDF4",
+"r;	c #DEDAD2",
+"s;	c #66635D",
+"t;	c #CCC9C2",
+"u;	c #F7F6EF",
+"v;	c #FDFAF2",
+"w;	c #EBE5DB",
+"x;	c #FCF8EB",
+"y;	c #E8E0CF",
+"z;	c #A79F8C",
+"A;	c #574F39",
+"B;	c #261C04",
+"C;	c #362C15",
+"D;	c #786C52",
+"E;	c #C7BBA2",
+"F;	c #332516",
+"G;	c #271904",
+"H;	c #AA9B87",
+"I;	c #80715F",
+"J;	c #030000",
+"K;	c #B0A58E",
+"L;	c #857A65",
+"M;	c #2A1F10",
+"N;	c #BCB19B",
+"O;	c #120A0A",
+"P;	c #766F5E",
+"Q;	c #B4AFA3",
+"R;	c #A39886",
+"S;	c #B3AB9A",
+"T;	c #797062",
+"U;	c #C7BFB3",
+"V;	c #F4ECE2",
+"W;	c #FEFBF3",
+"X;	c #FFFDF7",
+"Y;	c #F5F1EC",
+"Z;	c #FFFBF7",
+"`;	c #FCF7EF",
+" >	c #DED5C4",
+".>	c #AEA693",
+"+>	c #766E58",
+"@>	c #312810",
+"#>	c #1E1400",
+"$>	c #685C41",
+"%>	c #988B70",
+"&>	c #5C4D34",
+"*>	c #897860",
+"=>	c #AA9A82",
+"->	c #B2A590",
+";>	c #928773",
+">>	c #190F0A",
+",>	c #B8AF9B",
+"'>	c #2E2716",
+")>	c #767163",
+"!>	c #B4AB9A",
+"~>	c #4F4535",
+"{>	c #362D1D",
+"]>	c #B6AE9F",
+"^>	c #F2EADF",
+"/>	c #FAF2E8",
+"(>	c #FDF8EF",
+"_>	c #FAF6F0",
+":>	c #FBF8F3",
+"<>	c #F9F6F2",
+"[>	c #F8F2EA",
+"}>	c #FAF3E4",
+"|>	c #D3CCBA",
+"1>	c #A59E8B",
+"2>	c #7A725C",
+"3>	c #31280D",
+"4>	c #0E0300",
+"5>	c #625638",
+"6>	c #AFA084",
+"7>	c #57472D",
+"8>	c #140300",
+"9>	c #77654B",
+"0>	c #AC9980",
+"a>	c #090000",
+"b>	c #9E927B",
+"c>	c #877C68",
+"d>	c #221912",
+"e>	c #9D9782",
+"f>	c #1E1910",
+"g>	c #9D9B91",
+"h>	c #928A7A",
+"i>	c #534B39",
+"j>	c #857D6B",
+"k>	c #C8C0AE",
+"l>	c #E9E0D1",
+"m>	c #F5EEDE",
+"n>	c #FCF5EA",
+"o>	c #FDF7EE",
+"p>	c #FBF7F1",
+"q>	c #F4EEE4",
+"r>	c #EFE7D6",
+"s>	c #BFB8A5",
+"t>	c #B3AB96",
+"u>	c #6C6349",
+"v>	c #241A00",
+"w>	c #140900",
+"x>	c #847558",
+"y>	c #AFA181",
+"z>	c #443523",
+"A>	c #1B0A00",
+"B>	c #7D6C50",
+"C>	c #79674C",
+"D>	c #1D0E00",
+"E>	c #897D63",
+"F>	c #40361F",
+"G>	c #3C3524",
+"H>	c #65604E",
+"I>	c #827F7A",
+"J>	c #948F7C",
+"K>	c #B2AA97",
+"L>	c #D5CDB8",
+"M>	c #E0D8C4",
+"N>	c #EEE6D2",
+"O>	c #F7EEDE",
+"P>	c #F6EEE0",
+"Q>	c #F2EBE1",
+"R>	c #EAE3DB",
+"S>	c #E1DACD",
+"T>	c #D6CEBA",
+"U>	c #B5AB97",
+"V>	c #ABA08A",
+"W>	c #544A2E",
+"X>	c #1F1400",
+"Y>	c #382D11",
+"Z>	c #AB9E7E",
+"`>	c #746646",
+" ,	c #2D1E0F",
+".,	c #2E1D04",
+"+,	c #8B7A5D",
+"@,	c #3C2C1C",
+"#,	c #231504",
+"$,	c #7E7257",
+"%,	c #170C01",
+"&,	c #736C58",
+"*,	c #A4A199",
+"=,	c #FEFEFE",
+"-,	c #B9B4A1",
+";,	c #A29A86",
+">,	c #C2BBA1",
+",,	c #D2C8AF",
+"',	c #E0D5BD",
+"),	c #E8DECA",
+"!,	c #E6DDCD",
+"~,	c #DFD6C9",
+"{,	c #D2CABF",
+"],	c #C8BEB0",
+"^,	c #B8AD98",
+"/,	c #B5A992",
+"(,	c #7F725A",
+"_,	c #271A01",
+":,	c #2E2003",
+"<,	c #887B5B",
+"[,	c #B2A585",
+"},	c #4B3D1E",
+"|,	c #211200",
+"1,	c #5C4D31",
+"2,	c #736349",
+"3,	c #1C0C00",
+"4,	c #77684E",
+"5,	c #4F4229",
+"6,	c #41351D",
+"7,	c #B1ACA1",
+"8,	c #98937B",
+"9,	c #A9A185",
+"0,	c #B8AC91",
+"a,	c #C6B99E",
+"b,	c #D1C5AD",
+"c,	c #D1C5B1",
+"d,	c #C8BFAE",
+"e,	c #BCB2A5",
+"f,	c #B0A494",
+"g,	c #A3967E",
+"h,	c #9A8A73",
+"i,	c #504128",
+"j,	c #271804",
+"k,	c #6A5D3D",
+"l,	c #B8AC8B",
+"m,	c #817453",
+"n,	c #241700",
+"o,	c #3F3118",
+"p,	c #8D7D63",
+"q,	c #392911",
+"r,	c #45362A",
+"s,	c #796A4F",
+"t,	c #332710",
+"u,	c #B8AE99",
+"v,	c #A59F89",
+"w,	c #938B6F",
+"x,	c #A2987A",
+"y,	c #B2A488",
+"z,	c #BCAE94",
+"A,	c #BBAD96",
+"B,	c #B4A692",
+"C,	c #A79988",
+"D,	c #998B76",
+"E,	c #8C7D64",
+"F,	c #4D3C22",
+"G,	c #2D1D04",
+"H,	c #574828",
+"I,	c #B5A686",
+"J,	c #918462",
+"K,	c #291C07",
+"L,	c #36290B",
+"M,	c #7B6D4E",
+"N,	c #4C3E21",
+"O,	c #403217",
+"P,	c #7C6E54",
+"Q,	c #574A31",
+"R,	c #9A907E",
+"S,	c #877B65",
+"T,	c #94856D",
+"U,	c #A29278",
+"V,	c #A5957B",
+"W,	c #A19075",
+"X,	c #98876C",
+"Y,	c #897759",
+"Z,	c #7A6749",
+"`,	c #493617",
+" '	c #483918",
+".'	c #AA9B7A",
+"+'	c #8F805F",
+"@'	c #3F300F",
+"#'	c #322605",
+"$'	c #685C3B",
+"%'	c #403516",
+"&'	c #423717",
+"*'	c #7F7559",
+"='	c #9E957E",
+"-'	c #9F9384",
+";'	c #8D7C64",
+">'	c #8E7D62",
+",'	c #8F7D5F",
+"''	c #857252",
+")'	c #7F6A4B",
+"!'	c #857151",
+"~'	c #6E5B3B",
+"{'	c #7A6746",
+"]'	c #968666",
+"^'	c #5F502F",
+"/'	c #392A09",
+"('	c #695C3C",
+"_'	c #6E6242",
+":'	c #584D2D",
+"<'	c #8C8369",
+"['	c #A79984",
+"}'	c #A6977F",
+"|'	c #A8987D",
+"1'	c #9E8D72",
+"2'	c #8E7C5F",
+"3'	c #827051",
+"4'	c #867456",
+"5'	c #837353",
+"6'	c #79684B",
+"7'	c #706143",
+"8'	c #7F7053",
+"9'	c #87795D",
+"0'	c #CBBEAA",
+"a'	c #B1A48D",
+"b'	c #9E8F76",
+"c'	c #8F7F66",
+"d'	c #837258",
+"e'	c #9C8C72",
+"f'	c #A4947A",
+"g'	c #9D8D73",
+"h'	c #A4957B",
+"i'	c #A99C84",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                    . +   @ # $ % & * = - ; >                                                                   ",
+"                                , ' ) ! ~ { ] ^ / ( _ : < [ } | 1                                                               ",
+"                              2 3 4 5 6 7 8 9 0 a b c d e c f g h i                                                             ",
+"                          j k l m n o p q r s t u v w x y z A B C D E                                                           ",
+"                        F G H I J K L M N O P Q R S T U V W X Y Z `  .                                                          ",
+"                        ..+. at .#.$.%.&.*.=.-.;.>.,.'.).!.a ~.S {.].^./.                                                          ",
+"                    (._.:.<.[.}.|.1.2.3.4.5.6.7.8.    9.0.a.b.c.d.e.f.g.                                                        ",
+"                  h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.                                                        ",
+"                  I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.X.Y.Z.`. +.+++ at +#+$+%+                                                        ",
+"                  &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+                                                      ",
+"                7+8+9+0+a+b+c+  d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+                                                      ",
+"                y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+v+Y+Z+`+                                                    ",
+"                 @. at +@0.@@#@$@%@&@*@=@-@;@>@, at C '@)@!@~@{@]@^@/@(@_@:@<@[@}@                                                    ",
+"                |@1 at 2@3 at 4@5 at 6@7 at 8@9 at 0@a at b@c at d@e at f@g at h@i at j@k at l@m at n@o at p@q at r@s@                                                    ",
+"                t at u@v at w@x at c y at z@A at B@C at D@E at F@G at H@I at J@K at L@M at N@O at P@Q at R@S at T@U at V@W@                                                  ",
+"                X at Y@Z@`@ #.#+#@###$#%#&#*#=#-#;#>#X.,#'#)#!#~#{#]#^#/#(#_#:#<#                                                  ",
+"                [#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#b#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#                                              ",
+"                t#E at u#v#w#x#c y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#                                                ",
+"                X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$;$>$,$'$)$!$~${$]$s#^$/$($_$:$<$[$                                                ",
+"                }$|$1$2$3$4$5$6$7$8$9$0$a$b$c$d$, at e$>@f$g$h$i$j$k$l$m$($n$o$p$q$r$                                              ",
+"                s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$                                              ",
+"                  Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>%,%'%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%'+                                            ",
+"                  2%3%4%5%6%7%8%9%0%a%b%c%d%e%f%g%h%i%j%d$k%l%m%X.n%o%p%q%r%s%t%u%v%                                            ",
+"                    w%x%y%z%A%s#B%##C%D%E%S F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%                                            ",
+"                    Z%`% &.&+&]#@&#&$&%&&&*&=&-&;&>&,&'&)&!&~&{&]&^&/&(&_&{$:&<&[&}&                                            ",
+"                    |&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&g&h&i&j&k&l&{$m&n&o&p&q&r&s&t&                                            ",
+"                      u&v&w&x&y&~.z&A&B&C&D&E&F&G&H&k&I&J&K&{$L&M&*@N&O&P&Q&R&S&T&U&V&                                          ",
+"                      W&b at X&Y&Z&`& *.*+*@*s##*$*%*&*M **=*-*;*'+>*,*'*)*!*~*{*]*^*S#/*                                          ",
+"                        (*_*:*<*[*}*|*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*c g*h*i*j*k*l*m*                                          ",
+"                        n*o*p*q*r*s*'+t*u*v*w*x*y*z*A*B*C*D*E*m%F*l&G*H*I*J*K*L*M*N*O*P*                                        ",
+"                          Q*R*S*T*7.U*V*W*X*Y*Z*`* =S#.=+=@=#=$=%=&=*===g*-=;=>=,='=)=!=                                        ",
+"                        ~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=6=7=8=P%9=0=a=b=c=d=e=f=g=h=i=j=                                      ",
+"                          k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C=D=##E=F=G=H=I=J=K=L=M=N=O=                                      ",
+"                          P=Q=R=S=T=S U=V=W=X=Y=Z=`= -.-+- at -#-P+$-%-&-*-=---;->-,-'-)-!-~-{-                                    ",
+"                          ]-^-/-(-_-:-<-c [-}-|-1-2-3-4-5-6-7-8-9-0-a-9%b-c-d-e-f-g-h-i-j-k-                                    ",
+"                          l-m-n-o-p-5$q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-m%L-M-N-O-P-                                    ",
+"                            Q-R-S-T-U-V-1*W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];                                    ",
+"                            ^;/;(;_;:;<;[;};|;1;2;3;'+4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;                                    ",
+"                              m;n;o;p;q;r;s;t;u;v;w;x;y;z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;                                    ",
+"                              R;S;T;U;V;7.W;X;Y;Z;`;o= >.>+>@>#>$>%>&>m%*>=>,#->;>>>,>'>)>                                      ",
+"                              !>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4>5>6>7>8>9>0>a>b>c>d>e>f>g>                                      ",
+"                              h>i>j>k>l>m>n>o>v;p>q>r>s>t>u>v>w>x>y>z>A>B>C>D>E>F>G>H>I>                                        ",
+"                                J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,*,=,                                        ",
+"                                -,;,>,,,',),!,~,{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,                                            ",
+"                                  8,9,0,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,                                              ",
+"                                  v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,                                                  ",
+"                                    R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'%'&'*'='                                                    ",
+"                                      -'4.;'>',''')'!'~'{']'^'/'('_':'<'                                                        ",
+"                                          ['}'|'1'2'3'4'5'6'7'8'9'                                                              ",
+"                                            0'a'b'c'd'e'f'g'h'i'                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                ",
+"                                                                                                                                "};
diff --git a/data/mac/Info.plist.in b/data/mac/Info.plist.in
new file mode 100644
index 0000000..6b16ce5
--- /dev/null
+++ b/data/mac/Info.plist.in
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+
+	<key>CFBundleIdentifier</key>
+	<string>%%IDENTIFIER%%</string>
+
+	<key>CFBundleName</key>
+	<string>%%NAME%%</string>
+
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+
+	<key>CFBundleSignature</key>
+	<string>%%SIGNATURE%%</string>
+
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+
+	<key>CFBundleExecutable</key>
+	<string>%%BINARY%%</string>
+
+	<key>CFBundleVersion</key>
+	<string>%%VERSION%%</string>
+
+	<key>CFBundleShortVersionString</key>
+    	<string>%%VERSION%%</string>
+
+	<key>CFBundleLongVersionString</key>
+	<string>%%VERSION%%</string>
+
+	<key>CFBundleIconFile</key>
+	<string>%%ICON%%</string>
+
+	<key>NSAppleScriptEnabled</key>
+	<string>No</string>
+
+	<key>NSHumanReadableCopyright</key>
+	<string>Copyright (c) 2009 Dave Freese W1HKJ</string>
+</dict>
+</plist>
diff --git a/data/mac/flnet.icns b/data/mac/flnet.icns
new file mode 100644
index 0000000..4bbb93c
Binary files /dev/null and b/data/mac/flnet.icns differ
diff --git a/data/win32/fl_app.nsi b/data/win32/fl_app.nsi
new file mode 100644
index 0000000..d579ea0
--- /dev/null
+++ b/data/win32/fl_app.nsi
@@ -0,0 +1,168 @@
+# -*- conf -*-
+
+# NSIS installer script based on example2.nsi from the nsis-2.44 distribution.
+# Copyright (c) 2009 Stelios Bounanos, M0GLD.
+# Copyright (c) 2009 Dave Freese, W1HKJ
+
+# substitute your application name for instances of flnet
+
+# Variables
+!define flnet_DESCRIPTION "${flnet_NAME} ${flnet_VERSION}"
+!define flnet_STRING "${flnet_NAME}-${flnet_VERSION}"
+
+!define PRODUCT_BINARY "${flnet_BINARY}"
+!define PRODUCT_NAME "${flnet_NAME}"
+!define PRODUCT_VERSION "${flnet_VERSION}"
+!define PRODUCT_STRING "${flnet_STRING}"
+!define PRODUCT_DESCRIPTION "${flnet_DESCRIPTION}"
+
+# Compression options
+SetCompressor /SOLID lzma
+
+# This function is called before displaying the first installer page.
+# It aborts the installation if the Windows version is too old.
+!include WinVer.nsh
+Function .onInit
+    ${IfNot} ${AtLeastWin2000}
+        MessageBox MB_ICONSTOP "Sorry, your Windows version is too old.$\n${PRODUCT_NAME} requires Windows 2000 or later."
+	Abort
+    ${EndIf}
+FunctionEnd
+
+# The name of the installer
+Name "${PRODUCT_DESCRIPTION}"
+
+# The file to write
+OutFile ${INSTALLER_FILE}
+
+# The default installation directory
+InstallDir $PROGRAMFILES\${PRODUCT_STRING}
+
+# Registry key to check for directory (so if you install again, it will
+# overwrite the old one automatically)
+!define INSTALL_DIR_REG_KEY SOFTWARE\${PRODUCT_STRING}
+InstallDirRegKey HKLM "${INSTALL_DIR_REG_KEY}" "Install_Dir"
+
+# Request application privileges for Windows Vista
+RequestExecutionLevel admin
+
+# License
+LicenseText "${PRODUCT_NAME} is distributed under the GNU GPL as detailed \
+below. You must abide by the terms of this license if you modify or \
+redistribute the program." "Continue"
+LicenseData "${LICENSE_FILE}"
+SubCaption 0 ": License Information"
+
+# Other options
+BrandingText " "
+InstProgressFlags smooth
+VIAddVersionKey ProductName "${PRODUCT_NAME}"
+VIAddVersionKey ProductVersion "${PRODUCT_VERSION}"
+VIAddVersionKey FileVersion "${PRODUCT_VERSION}"
+VIAddVersionKey FileDescription "${flnet_DESCRIPTION} installer"
+VIAddVersionKey LegalCopyright "${PRODUCT_NAME} developers"
+VIAddVersionKey OriginalFilename "${INSTALLER_FILE}"
+VIProductVersion "3.0.0.0"
+WindowIcon off
+XPStyle on
+
+# Installer pages
+Page license
+Page components
+Page directory
+Page instfiles
+UninstPage uninstConfirm
+UninstPage instfiles
+
+# Registry uninstall path
+!define REG_UNINSTALL_PATH Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_STRING}
+
+# This is a hidden section and is always selected.  It writes the uninstall
+# registry keys and uninstaller binary.
+Section -install
+    # Set output path to the installation directory.
+    SetOutPath $INSTDIR
+    # Write the installation paths into the registry
+    WriteRegStr HKLM "${INSTALL_DIR_REG_KEY}" "Install_Dir" "$INSTDIR"
+    # Write the uninstall keys for Windows
+    WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "DisplayName" "${PRODUCT_DESCRIPTION}"
+    WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "DisplayVersion" "${PRODUCT_VERSION}"
+    WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "DisplayIcon" '"$INSTDIR\${PRODUCT_BINARY}"'
+    WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "HelpLink" "${SUPPORT_URL}"
+    WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "Publisher" "flnet developers"
+    WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "URLUpdateInfo" "${UPDATES_URL}"
+    WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "UninstallString" '"$INSTDIR\uninstall.exe"'
+    WriteRegStr HKLM "${REG_UNINSTALL_PATH}" "QuietUninstallString" '"$INSTDIR\uninstall.exe" /S'
+    WriteRegDWORD HKLM "${REG_UNINSTALL_PATH}" "NoModify" 1
+    WriteRegDWORD HKLM "${REG_UNINSTALL_PATH}" "NoRepair" 1
+    WriteUninstaller "uninstall.exe"
+SectionEnd
+
+#Var WANT_flnet
+
+Section "flnet"
+	SectionIn RO
+	SetOutPath $INSTDIR
+	File "${flnet_BINARY}"
+SectionEnd
+
+# Start Menu path
+!define SM_PATH_BASE $SMPROGRAMS\${PRODUCT_NAME}
+!define SM_PATH ${SM_PATH_BASE}\${PRODUCT_STRING}
+
+# The following sections are optional
+Section "Start Menu Shortcuts"
+    CreateDirectory "${SM_PATH}"
+	CreateShortCut "${SM_PATH}\${flnet_NAME}.lnk" "$INSTDIR\${flnet_BINARY}" "" "$INSTDIR\${flnet_BINARY}" 0
+#	CreateShortCut "${SM_PATH}\${flnet_NAME} Beginners' Guide.lnk" "${GUIDE_URL}"
+#	CreateShortCut "${SM_PATH}\${flnet_NAME} Documentation.lnk" "${flnet_DOCS_URL}"
+    CreateShortCut "${SM_PATH}\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
+SectionEnd
+
+Section "Desktop Shortcuts"
+	CreateShortCut "$DESKTOP\${flnet_DESCRIPTION}.lnk" "$INSTDIR\${flnet_BINARY}" "" \
+		"$INSTDIR\${flnet_BINARY}" 0
+SectionEnd
+
+# This is unselected by default
+Section /o "Quick Launch Shortcuts"
+	CreateShortCut "$QUICKLAUNCH\${flnet_DESCRIPTION}}.lnk" "$INSTDIR\${flnet_BINARY}" "" \
+		"$INSTDIR\${flnet_BINARY}" 0
+SectionEnd
+
+# Uninstaller
+Section "Uninstall"
+    # Remove registry keys
+    DeleteRegKey HKLM "${REG_UNINSTALL_PATH}"
+    DeleteRegKey HKLM "${INSTALL_DIR_REG_KEY}"
+
+# Remove files and uninstaller
+	Delete /REBOOTOK $INSTDIR\${flnet_BINARY}
+    Delete /REBOOTOK $INSTDIR\uninstall.exe
+
+# Remove shortcuts, if any
+    Delete "${SM_PATH}\*.*"
+	Delete "$DESKTOP\${flnet_DESCRIPTION}.lnk"
+	Delete "$QUICKLAUNCH\${flnet_DESCRIPTION}.lnk"
+
+# Remove directories used
+    RMDir "${SM_PATH}"
+    RMDir "${SM_PATH_BASE}"
+    RMDir "$INSTDIR"
+SectionEnd
+
+# Offer to reboot the machine if the reboot flag is nonzero. This flag is set by
+# commands that specify the /REBOOTOK switch if the BINARY_* files were in use
+# during uninstallation. Stupid Windows.
+Function un.onGUIEnd
+    IfRebootFlag 0 noreboot
+    MessageBox MB_YESNO|MB_ICONQUESTION \
+               "A reboot is required to finish removing ${PRODUCT_NAME}. Do you wish to reboot now?" IDNO noreboot
+    Reboot
+    noreboot:
+FunctionEnd
+
+# Tell the user if we could not reboot for some reason.
+Function un.onRebootFailed
+    MessageBox MB_OK|MB_ICONSTOP "Reboot failed. Please reboot manually." /SD IDOK
+FunctionEnd
diff --git a/data/win32/flnet.ico b/data/win32/flnet.ico
new file mode 100644
index 0000000..7f27a03
Binary files /dev/null and b/data/win32/flnet.ico differ
diff --git a/m4/build.m4 b/m4/build.m4
new file mode 100644
index 0000000..75c86e3
--- /dev/null
+++ b/m4/build.m4
@@ -0,0 +1,70 @@
+AC_DEFUN([AC_flnet_SH_DQ], [
+  ac_sh_dq="\"`$1 | sed 's/"/\\\\"/g'`\""
+])
+
+AC_DEFUN([AC_flnet_BUILD_INFO], [
+# Define build flags and substitute in Makefile.in
+# CPPFLAGS
+  flnet_BUILD_CPPFLAGS="-I\$(srcdir) -I\$(srcdir)/include -I\$(srcdir)/xmlrpcpp -I\$(srcdir)/images"
+  if test "x$target_win32" = "xyes"; then
+      flnet_BUILD_CPPFLAGS="$flnet_BUILD_CPPFLAGS -D_WINDOWS"
+  fi
+# CXXFLAGS
+  flnet_BUILD_CXXFLAGS="$FLTK_CFLAGS $flnet_BUILD_CPPFLAGS -pipe -Wall -fexceptions $OPT_CFLAGS $DEBUG_CFLAGS $PTW32_CFLAGS"
+  if test "x$target_mingw32" = "xyes"; then
+      flnet_BUILD_CXXFLAGS="-mthreads $flnet_BUILD_CXXFLAGS -D_WINDOWS"
+  fi
+# LDFLAGS
+  flnet_BUILD_LDFLAGS=
+# LDADD
+  flnet_BUILD_LDADD="$FLTK_LIBS $X_LIBS $EXTRA_LIBS $PTW32_LIBS"
+
+  if test "x$ac_cv_debug" = "xyes"; then
+      flnet_BUILD_CXXFLAGS="$flnet_BUILD_CXXFLAGS -UNDEBUG"
+      flnet_BUILD_LDFLAGS="$flnet_BUILD_LDFLAGS $RDYNAMIC"
+  else
+      flnet_BUILD_CXXFLAGS="$flnet_BUILD_CXXFLAGS -DNDEBUG"
+  fi
+  if test "x$target_mingw32" = "xyes"; then
+      flnet_BUILD_LDFLAGS="-mthreads $flnet_BUILD_LDFLAGS"
+  fi
+
+  AC_SUBST([flnet_BUILD_CPPFLAGS])
+  AC_SUBST([flnet_BUILD_CXXFLAGS])
+  AC_SUBST([flnet_BUILD_LDFLAGS])
+  AC_SUBST([flnet_BUILD_LDADD])
+
+#define build variables for config.h
+  AC_DEFINE_UNQUOTED([BUILD_BUILD_PLATFORM], ["$build"], [Build platform])
+  AC_DEFINE_UNQUOTED([BUILD_HOST_PLATFORM], ["$host"], [Host platform])
+  AC_DEFINE_UNQUOTED([BUILD_TARGET_PLATFORM], ["$target"], [Target platform])
+
+  test "x$LC_ALL" != "x" && LC_ALL_saved="$LC_ALL"
+  LC_ALL=C
+  export LC_ALL
+
+  AC_flnet_SH_DQ([echo $ac_configure_args])
+  AC_DEFINE_UNQUOTED([BUILD_CONFIGURE_ARGS], [$ac_sh_dq], [Configure arguments])
+
+  AC_flnet_SH_DQ([date])
+  AC_DEFINE_UNQUOTED([BUILD_DATE], [$ac_sh_dq], [Build date])
+
+  AC_flnet_SH_DQ([whoami])
+  AC_DEFINE_UNQUOTED([BUILD_USER], [$ac_sh_dq], [Build user])
+
+  AC_flnet_SH_DQ([hostname])
+  AC_DEFINE_UNQUOTED([BUILD_HOST], [$ac_sh_dq], [Build host])
+
+  AC_flnet_SH_DQ([$CXX -v 2>&1 | tail -1])
+  AC_DEFINE_UNQUOTED([BUILD_COMPILER], [$ac_sh_dq], [Compiler])
+
+  AC_flnet_SH_DQ([echo $flnet_BUILD_CPPFLAGS $flnet_BUILD_CXXFLAGS])
+  AC_DEFINE_UNQUOTED([flnet_BUILD_CXXFLAGS], [$ac_sh_dq], [flnet compiler flags])
+  AC_flnet_SH_DQ([echo $flnet_BUILD_LDFLAGS $flnet_BUILD_LDADD])
+  AC_DEFINE_UNQUOTED([flnet_BUILD_LDFLAGS], [$ac_sh_dq], [flnet linker flags])
+
+  if test "x$LC_ALL_saved" != "x"; then
+      LC_ALL="$LC_ALL_saved"
+      export LC_ALL
+  fi
+])
diff --git a/m4/debug.m4 b/m4/debug.m4
new file mode 100644
index 0000000..fe6c1ad
--- /dev/null
+++ b/m4/debug.m4
@@ -0,0 +1,104 @@
+AC_DEFUN([AC_FL_RDYNAMIC], [
+  LDFLAGS_saved="$LDFLAGS"
+  LDFLAGS="$LDFLAGS -rdynamic"
+
+  AC_MSG_CHECKING([whether $CC supports -rdynamic])
+  AC_TRY_LINK([], [], [ac_cv_rdynamic=yes], [ac_cv_rdynamic=no])
+  AC_MSG_RESULT([$ac_cv_rdynamic])
+
+  AC_LANG_PUSH(C++)
+    AC_MSG_CHECKING([whether $CXX supports -rdynamic])
+    AC_TRY_LINK([], [], [ac_cv_rdynamic=yes], [ac_cv_rdynamic=no])
+    AC_MSG_RESULT([$ac_cv_rdynamic])
+  AC_LANG_POP(C++)
+
+  LDFLAGS="$LDFLAGS_saved"
+])
+
+
+AC_DEFUN([AC_FL_DEBUG], [
+  AC_REQUIRE([AC_FL_OPT])
+  AC_ARG_ENABLE([debug],
+                AC_HELP_STRING([--enable-debug], [turn on debugging]),
+                [case "${enableval}" in
+                  yes|no) ac_cv_debug="${enableval}" ;;
+                  *)      AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
+                 esac],
+                 [ac_cv_debug=no])
+
+  AC_ARG_VAR([BFD_CFLAGS], [C compiler flags for libbfd])
+  AC_ARG_VAR([BFD_LIBS], [linker flags for libbfd])
+  AC_ARG_WITH([bfd],
+              AC_HELP_STRING([--with-bfd@<:@=DIR@:>@],
+                             [search for libbfd in DIR/include and DIR/lib @<:@mingw32 only@:>@]),
+              [ac_cv_want_bfd="$withval"],
+              [ac_cv_want_bfd=yes])
+
+  if test "x$ac_cv_debug" = "xyes" && test "x$ac_cv_want_bfd" != "xno" && \
+     test "x$target_mingw32" = "xyes"; then
+      if test "x$ac_cv_want_bfd" != "xyes"; then # set -I and -L switches
+          bfd_default_cflags="-I${ac_cv_want_bfd}/include"
+          bfd_default_libs="-L${ac_cv_want_bfd}/lib"
+      fi
+      # don't override the user-specified vars
+      BFD_CFLAGS="${BFD_CFLAGS:-$bfd_default_cflags}"
+      BFD_LIBS="${BFD_LIBS:-$bfd_default_libs}"
+      ac_cv_want_bfd="yes"
+
+      CPPFLAGS_saved="$CPPFLAGS"
+      LDFLAGS_saved="$LDFLAGS"
+      CPPFLAGS="$CPPFLAGS $BFD_CFLAGS"
+      LDFLAGS="$LDFLAGS $BFD_LIBS"
+
+      AC_CHECK_HEADER([bfd.h], [ac_cv_have_bfd="yes"], [ac_cv_have_bfd="no"])
+      if test "x$ac_cv_have_bfd" = "xyes"; then
+          bfd_other_libs="-liberty -lpsapi -limagehlp"
+          AC_CHECK_LIB([bfd], [bfd_set_format], [ac_cv_have_bfd="yes"], [ac_cv_have_bfd="no"], [$bfd_other_libs])
+      fi
+      CPPFLAGS="$CPPFLAGS_saved"
+      LDFLAGS="$LDFLAGS_saved"
+      if test "x$ac_cv_have_bfd" = "xyes"; then
+          BFD_LIBS="$BFD_LIBS -lbfd $bfd_other_libs"
+      fi
+  fi
+
+  if test "x$ac_cv_debug" = "xyes"; then
+      AC_MSG_CHECKING([for debug info flag])
+      if test "x$GXX" = "xyes"; then
+          if test "x$target_mingw32" = "xyes"; then
+              gflag="-gstabs"
+          else
+              gflag="-ggdb3"
+          fi
+      else
+          gflag="-g"
+      fi
+      AC_MSG_RESULT([$gflag])
+      DEBUG_CFLAGS="-O0 -fno-inline-functions -fno-omit-frame-pointer $gflag -Wall"
+
+      AC_FL_RDYNAMIC
+      if test "x$ac_cv_rdynamic" = "xyes"; then
+          RDYNAMIC=-rdynamic
+      fi
+
+      CXXFLAGS=""
+      CFLAGS="$CXXFLAGS"
+      AC_MSG_NOTICE([debugging enabled; overriding CXXFLAGS])
+
+      if test "x$target_darwin" = "xyes"; then
+          ac_cv_compat_stack=yes
+	  AC_DEFINE([HAVE_DBG_STACK], 1, [Define to 1 if we have dbg::stack])
+      elif test "x$target_mingw32" = "xyes" && test "x$ac_cv_have_bfd" = "xyes"; then
+          ac_cv_compat_stack=yes
+	  AC_DEFINE([HAVE_DBG_STACK], 1, [Define to 1 if we have dbg::stack])
+      else
+          ac_cv_compat_stack=no
+	  AC_DEFINE([HAVE_DBG_STACK], 0, [Define to 0 if not using dbg::stack])
+      fi
+  fi
+  AM_CONDITIONAL([ENABLE_DEBUG], [test "x$ac_cv_debug" = "xyes"])
+  AC_SUBST([DEBUG_CFLAGS])
+  AC_SUBST([RDYNAMIC])
+
+  AM_CONDITIONAL([COMPAT_STACK], [test "x$ac_cv_compat_stack" = "xyes"])
+])
diff --git a/m4/fltk.m4 b/m4/fltk.m4
new file mode 100644
index 0000000..30d52d2
--- /dev/null
+++ b/m4/fltk.m4
@@ -0,0 +1,54 @@
+AC_DEFUN([AC_CHECK_FLTK], [
+  AC_ARG_VAR([FLTK_CONFIG], [Path to fltk-config utility])
+  AC_ARG_VAR([FLTK_CFLAGS], [C compiler flags for FLTK, overriding fltk-config])
+  AC_ARG_VAR([FLTK_LIBS], [linker flags for FLTK, overriding fltk-config])
+
+  if test "x$FLTK_CFLAGS" = "x" && test "x$FLTK_LIBS" = "x"; then
+      if test "x$FLTK_CONFIG" = "x"; then
+          AC_PATH_PROG([FLTK_CONFIG], [fltk-config], [no])
+      else
+          AC_MSG_CHECKING([for fltk-config])
+          AC_MSG_RESULT([$FLTK_CONFIG])
+      fi
+      if test "$FLTK_CONFIG" = "no"; then
+          AC_MSG_ERROR([
+  *** The fltk-config script could not be found. Please install the development
+  *** headers and libraries for FLTK 1.1.x, or set PATH to the directory that
+  *** contains fltk-config.
+          ])
+      fi
+      HAVE_FLTK_API_VERSION=no
+      FLTK_API_VERSION="`$FLTK_CONFIG --api-version`"
+      if test $? -ne 0; then
+          AC_MSG_ERROR([$FLTK_CONFIG failed])
+      fi
+      if test "x$FLTK_API_VERSION" = "x1.1" || test "x$FLTK_API_VERSION" = "x1.3"; then
+          HAVE_FLTK_API_VERSION=yes
+      fi
+      FLNET_FLTK_API_MAJOR=${FLTK_API_VERSION%%.*}
+      FLNET_FLTK_API_MINOR=${FLTK_API_VERSION#*.}; FLNET_FLTK_API_MINOR=${FLNET_FLTK_API_MINOR%%.*}
+      if test "${HAVE_FLTK_API_VERSION}" = "no"; then
+          AC_MSG_ERROR([
+  *** The version of FLTK found on your system provides API version $FLTK_API_VERSION.
+  *** To build $PACKAGE you need a FLTK version that provides API 1.1 or 1.3.
+          ])
+      fi
+      FLTK_CFLAGS=`$FLTK_CONFIG --cxxflags`
+      if test "x$ac_cv_static" != "xyes"; then
+          FLTK_LIBS=`$FLTK_CONFIG --ldflags --use-images`
+      else
+          FLTK_LIBS=`$FLTK_CONFIG --ldstaticflags --use-images`
+      fi
+  else
+      AC_MSG_NOTICE([not checking for FLTK])
+  fi
+  AC_SUBST([FLTK_CFLAGS])
+  AC_SUBST([FLTK_LIBS])
+  AC_DEFINE_UNQUOTED([FLTK_BUILD_VERSION], ["`$FLTK_CONFIG --version`"], [FLTK version])
+  AC_DEFINE_UNQUOTED([FLNET_FLTK_API_MAJOR], [$FLNET_FLTK_API_MAJOR], [FLTK API major version])
+  AC_DEFINE_UNQUOTED([FLNET_FLTK_API_MINOR], [$FLNET_FLTK_API_MINOR], [FLTK API minor version])
+
+  AC_ARG_VAR([FLUID], [Fast Light User-Interface Designer])
+  AC_CHECK_PROG([FLUID], [fluid], [fluid])
+  AM_CONDITIONAL([HAVE_FLUID], [test -n "$FLUID"])
+])
diff --git a/m4/funcs.m4 b/m4/funcs.m4
new file mode 100644
index 0000000..2c366e3
--- /dev/null
+++ b/m4/funcs.m4
@@ -0,0 +1,15 @@
+# args: function, search-libs, other-libraries
+AC_DEFUN([AC_FL_SEARCH_LIBS], [
+
+m4_define([FUNC_NAME_UC], m4_translit([$1], [a-z], [A-Z]))
+
+LIBS_search_libs_save="$LIBS"
+LIBS=""
+AC_SEARCH_LIBS($1, $2, [ac_cv_have_func_[]$1=1], [ac_cv_have_func_[]$1=0], $3)
+if test "x$LIBS" != "x"; then
+    echo "$EXTRA_LIBS" | grep -q -e "$LIBS" || EXTRA_LIBS="$EXTRA_LIBS $LIBS"
+fi
+AC_DEFINE_UNQUOTED([HAVE_]FUNC_NAME_UC, $ac_cv_have_func_[]$1, [Define to 1 if we have $1])
+LIBS="$LIBS_search_libs_save"
+
+])
diff --git a/m4/macosx.m4 b/m4/macosx.m4
new file mode 100644
index 0000000..78bb8b2
--- /dev/null
+++ b/m4/macosx.m4
@@ -0,0 +1,42 @@
+AC_DEFUN([AC_FL_MACOSX], [
+case "$target_os" in
+  darwin*)
+      target_darwin="yes"
+      ;;
+  *)
+      target_darwin="no"
+      ;;
+esac
+
+AC_ARG_ENABLE([mac-universal], AC_HELP_STRING([--enable-mac-universal],
+                                              [build a universal binary on Mac OS X @<:@no@:>@]),
+              [case "${enableval}" in
+                 yes|no) ac_cv_mac_universal="${enableval}" ;;
+                 *)      AC_MSG_ERROR([bad value "${enableval}" for --enable-mac-universal]) ;;
+	       esac],
+              [ac_cv_mac_universal=no])
+
+if test "x$target_darwin" = "xyes" && test "x$ac_cv_mac_universal" = "xyes"; then
+    mac_minversion="-mmacosx-version-min=10.4"
+    case "$target_os" in
+      darwin8*)
+        mac_arches="-arch i386 -arch ppc"
+        mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
+        ;;
+      darwin9*)
+        mac_arches="-arch i386 -arch ppc -arch x86_64 -arch ppc64"
+        mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.5.sdk"
+        ;;
+      *)
+        mac_arches=""
+        mac_sysroot=""
+        ;;
+    esac
+    MAC_UNIVERSAL_CFLAGS="$mac_arches $mac_sysroot $mac_minversion"
+    MAC_UNIVERSAL_LDFLAGS="$mac_arches"
+fi
+AC_SUBST([MAC_UNIVERSAL_CFLAGS])
+AC_SUBST([MAC_UNIVERSAL_LDFLAGS])
+
+AM_CONDITIONAL([DARWIN], [test "x$target_darwin" = "xyes"])
+])
diff --git a/m4/np-compat.m4 b/m4/np-compat.m4
new file mode 100644
index 0000000..9e1d4e7
--- /dev/null
+++ b/m4/np-compat.m4
@@ -0,0 +1,36 @@
+AC_DEFUN([AC_FL_NP_COMPAT], [
+  AC_REQUIRE([AC_FL_MACOSX])
+  AC_REQUIRE([AC_FL_WIN32])
+
+  AM_CONDITIONAL([COMPAT_REGEX], [test "x$ac_cv_header_regex_h" != "xyes"])
+
+  if test "x$target_mingw32" = "xyes"; then
+      sem_libs="pthreadGC2"
+  else
+      sem_libs="pthread rt"
+  fi
+  other_libs=""
+
+  if test "x$ac_cv_want_ptw32" = "xyes"; then
+      CFLAGS_saved="$CFLAGS"
+      LDFLAGS_saved="$LDFLAGS"
+      EXTRA_LIBS_saved="$EXTRA_LIBS"
+      CFLAGS="$CFLAGS $PTW32_CFLAGS"
+      LDFLAGS="$LDFLAGS $PTW32_LIBS"
+      other_libs=-lws2_32
+  fi
+
+  AC_FL_SEARCH_LIBS([dlopen], [dl], [$other_libs])
+  AC_FL_SEARCH_LIBS([clock_gettime], [rt], [$other_libs])
+  AC_FL_SEARCH_LIBS([sem_unlink], [$sem_libs], [$other_libs])
+  AC_FL_SEARCH_LIBS([sem_timedwait], [$sem_libs], [$other_libs])
+
+  if test "x$ac_cv_want_ptw32" = "xyes"; then
+      CFLAGS="$CFLAGS_saved"
+      LDFLAGS="$LDFLAGS_saved"
+      EXTRA_LIBS="$EXTRA_LIBS_saved"
+  fi
+  AC_SUBST([EXTRA_LIBS])
+
+  AM_CONDITIONAL([COMPAT_STRCASESTR], [test "x$ac_cv_func_strcasestr" != "xyes"])
+])
diff --git a/m4/opt.m4 b/m4/opt.m4
new file mode 100644
index 0000000..460d23b
--- /dev/null
+++ b/m4/opt.m4
@@ -0,0 +1,29 @@
+AC_DEFUN([AC_FL_OPT], [
+  AC_ARG_ENABLE([optimizations],
+		AC_HELP_STRING([--enable-optimizations],
+		               [use x86 optimizations (none|sse|sse2|sse3|native) @<:@none@:>@]),
+                [case "${enableval}" in
+                  none|sse|sse2|sse3|native) ac_cv_opt="${enableval}" ;;
+                  *)                         AC_MSG_ERROR([bad value ${enableval} for --enable-optimizations]) ;;
+                 esac],
+                 [ac_cv_opt=none])
+  OPT_CFLAGS="-O2 -ffast-math -finline-functions -fomit-frame-pointer"
+  case "$ac_cv_opt" in
+      sse)
+          OPT_CFLAGS="$OPT_CFLAGS -msse -mfpmath=sse"
+	  ;;
+      sse2)
+          OPT_CFLAGS="$OPT_CFLAGS -msse2 -mfpmath=sse"
+	  ;;
+      sse3)
+          OPT_CFLAGS="$OPT_CFLAGS -msse3 -mfpmath=sse"
+	  ;;
+      native)
+          OPT_CFLAGS="$OPT_CFLAGS -march=native -mfpmath=sse"
+	  ;;
+      none)
+          ;;
+  esac
+
+  AC_SUBST([OPT_CFLAGS])
+])
diff --git a/m4/pkg-config.m4 b/m4/pkg-config.m4
new file mode 100644
index 0000000..8706bd0
--- /dev/null
+++ b/m4/pkg-config.m4
@@ -0,0 +1,44 @@
+# name, version, show-in-help?, optional?, help-text, [am-cond]
+AC_DEFUN([AC_flnet_PKG_CHECK], [
+
+m4_define([PKG_NAME_UC], m4_translit([$1], [a-z], [A-Z]))
+
+m4_if([$3], [yes],
+    [ AC_ARG_WITH($1, AC_HELP_STRING([--with-[]$1], [$5]),
+                     [case "${withval}" in
+                        yes|no) ac_cv_want_[]$1="${withval}" ;;
+                        *)      AC_MSG_ERROR([bad value "${withval}" for --with-[]$1]) ;;
+                      esac],
+                 [ac_cv_want_[]$1=check])
+    ])
+m4_if([$4], [no], [ac_cv_want_[]$1=yes])
+
+test "x$ac_cv_want_[]$1" = "x" && ac_cv_want_[]$1="check"
+case "x$ac_cv_want_[]$1" in
+    "xno")
+            ac_cv_[]$1=no
+            ;;
+    "xcheck")
+            PKG_CHECK_MODULES(PKG_NAME_UC, [$2], [ac_cv_[]$1=yes], [ac_cv_[]$1=no])
+            ;;
+    "xyes")
+            PKG_CHECK_MODULES(PKG_NAME_UC, [$2])
+	    # if we get here the test has succeeded
+            ac_cv_[]$1=yes
+            ;;
+esac
+
+if test "x$ac_cv_[]$1" = "xyes"; then
+    AC_DEFINE([USE_]PKG_NAME_UC, 1, [Define to 1 if we are using $1])
+    pkg_[]$1_version=`$PKG_CONFIG --modversion "$2" 2>/dev/null`
+else
+    AC_DEFINE([USE_]PKG_NAME_UC, 0, [Define to 1 if we are using $1])
+    pkg_[]$1_version=""
+fi
+
+AC_SUBST(PKG_NAME_UC[_CFLAGS])
+AC_SUBST(PKG_NAME_UC[_LIBS])
+AC_DEFINE_UNQUOTED(PKG_NAME_UC[_BUILD_VERSION], ["$pkg_[]$1_version"], [$1 version])
+
+m4_ifval([$6], [ AM_CONDITIONAL([$6], [test "x$ac_cv_[]$1" = "xyes"]) ], [:])
+])
diff --git a/m4/static.m4 b/m4/static.m4
new file mode 100644
index 0000000..8c5bdd2
--- /dev/null
+++ b/m4/static.m4
@@ -0,0 +1,9 @@
+AC_DEFUN([AC_FL_STATIC], [
+  AC_ARG_ENABLE([static],
+                AC_HELP_STRING([--enable-static], [enable static linking for some libraries]),
+                [case "${enableval}" in
+                    yes|no) ac_cv_static="${enableval}" ;;
+                    *)      AC_MSG_ERROR([bad value ${enableval} for --enable-static]) ;;
+                 esac],
+                 [ac_cv_static=no])
+])
diff --git a/m4/win32.m4 b/m4/win32.m4
new file mode 100644
index 0000000..eb62768
--- /dev/null
+++ b/m4/win32.m4
@@ -0,0 +1,59 @@
+AC_DEFUN([AC_FL_WIN32], [
+case "$target_os" in
+     *mingw*)
+        target_win32="yes"
+        target_mingw32="yes"
+        ;;
+     *cygwin*|*win32*|*w32*)
+        target_win32="yes"
+        ;;
+     *)
+        target_win32="no"
+        ;;
+esac
+
+if test "x$target_win32" = "xyes"; then
+    AC_CHECK_PROG([WINDRES], [${ac_tool_prefix}windres], [${ac_tool_prefix}windres])
+    if [ test "x$WINDRES" = "x" ]; then
+        AC_MSG_WARN([The windres utility could not be found])
+    fi
+    AC_DEFINE([__WOE32__], 1, [Define to 1 if we are building on mingw])
+fi
+
+if test "x$target_mingw32" = "xyes"; then
+    AC_CHECK_PROG([MAKENSIS], [makensis], [makensis])
+fi
+
+AC_SUBST([WINDRES])
+AM_CONDITIONAL([HAVE_WINDRES], [test "x$WINDRES" != "x"])
+AC_SUBST([MAKENSIS])
+AM_CONDITIONAL([HAVE_NSIS], [test "x$MAKENSIS" != "x"])
+AM_CONDITIONAL([WIN32], [test "x$target_win32" = "xyes"])
+AM_CONDITIONAL([MINGW32], [test "x$target_mingw32" = "xyes"])
+
+
+AC_ARG_VAR([PTW32_CFLAGS], [C compiler flags for pthreads-w32])
+AC_ARG_VAR([PTW32_LIBS], [linker flags for pthreads-w32])
+
+AC_ARG_WITH([ptw32],
+            AC_HELP_STRING([--with-ptw32@<:@=DIR@:>@],
+                           [search for pthreads-w32 in DIR/include and DIR/lib @<:@mingw32 only@:>@]),
+            [ac_cv_want_ptw32="$withval"],
+            [ac_cv_want_ptw32=no])
+
+if test "x$ac_cv_want_ptw32" != "xno"; then
+    if test "x$ac_cv_want_ptw32" != "xyes"; then # set -I and -L switches
+        ptw32_default_cflags="-I${ac_cv_want_ptw32}/include"
+        ptw32_default_libs="-L${ac_cv_want_ptw32}/lib"
+    fi
+    ptw32_default_libs="$ptw32_default_libs -lpthreadGC2 -lws2_32"
+
+    # don't override the user-specified vars
+    PTW32_CFLAGS="${PTW32_CFLAGS:-$ptw32_default_cflags}"
+    PTW32_LIBS="${PTW32_LIBS:-$ptw32_default_libs}"
+    ac_cv_want_ptw32="yes"
+fi
+
+AC_SUBST([PTW32_CFLAGS])
+AC_SUBST([PTW32_LIBS])
+])
diff --git a/scripts/build4mingw.sh b/scripts/build4mingw.sh
new file mode 100755
index 0000000..9c871af
--- /dev/null
+++ b/scripts/build4mingw.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+### Script to build a win32 installation
+
+./configure \
+  $PKGCFG \
+  $CROSSCFG \
+  --with-ptw32=/opt/mxe/usr/i686-pc-mingw32 \
+  PTW32_LIBS="-lpthread -lpcreposix -lpcre" \
+  FLTK_CONFIG=$PREFIX/bin/i686-pc-mingw32-fltk-config
+
+make
+
+$PREFIX/bin/i686-pc-mingw32-strip src/flnet.exe
+make nsisinst
+mv src/*setup*exe .
+
+
diff --git a/scripts/mkappbundle.sh b/scripts/mkappbundle.sh
new file mode 100755
index 0000000..c1cd550
--- /dev/null
+++ b/scripts/mkappbundle.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+### Script to create the .app structure for osx
+### 20090730  Stelios Bounanos M0GLD
+
+if [ $# -ne 2 ]; then
+    echo "Syntax: $0 data-dir build-dir" >&2
+    exit 1
+fi
+
+if [ -z "$PACKAGE_TARNAME" ]; then
+    echo "E: \$PACKAGE_TARNAME undefined"
+    exit 1
+fi
+
+PWD=`pwd`
+data="${PWD}/$1"
+build="${PWD}/$2"
+bundle_dir="$APPBUNDLE_NOLIBS"
+static_bundle_dir="$APPBUNDLE"
+# more sanity checks
+for d in "$data" "$build"; do
+    test -d "$d" && continue
+    echo "E: ${d}: not a directory" >&2
+    exit 1
+done
+if ! test -w "$build"; then
+    echo "E: ${build} is not writeable" >&2
+    exit 1
+fi
+
+plist="${data}/mac/Info.plist.in"
+flnet_icon="${data}/mac/flnet.icns"
+for f in "$plist" "$flnet_icon"; do
+    test -r "$f" && continue
+    echo "E: ${f}: not readable" >&2
+    exit 1
+done
+
+# aaaaaaaaaargh => Aaaaaaaaaargh
+upcase1()
+{
+    sed 'h; s/\(^.\).*/\1/; y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/; G; s/\n.//'
+}
+
+function copy_libs()
+{
+    list="$1"
+    while test "x$list" != "x"; do
+	change="$list"
+	list=""
+
+	for obj in $change; do
+	    for lib in `otool -L $obj | \
+	        sed -n 's!^.*[[:space:]]\([^[:space:]]*\.dylib\).*$!\1!p' | \
+                grep -Ev '^/(usr/lib|System)'`; do
+		libfn="`basename $lib`"
+		if ! test -f "Frameworks/$libfn"; then
+		    cp "$lib" "Frameworks/$libfn"
+		    install_name_tool -id "@executable_path/../Frameworks/$libfn" "Frameworks/$libfn"
+		    list="$list Frameworks/$libfn"
+		fi
+		install_name_tool -change "$lib" "@executable_path/../Frameworks/$libfn" "$obj"
+	    done
+	done
+    done
+}
+
+function bundle()
+{
+    appname="${binary}-${appversion}.app"
+    cd "$build"
+
+    # bundle the binary
+    echo "creating ${build}/$bundle_dir/$appname"
+    $mkinstalldirs "$bundle_dir/$appname/Contents/MacOS" "$bundle_dir/$appname/Contents/Resources"
+    cd "$bundle_dir"
+    $INSTALL_PROGRAM "${build}/$binary" "$appname/Contents/MacOS"
+    test "x$NOSTRIP" = "x" && ${STRIP:-strip} -S "$appname/Contents/MacOS/$binary"
+
+    $INSTALL_DATA "$icon" "$appname/Contents/Resources"
+    echo "APPL${signature}" > "$appname/Contents/PkgInfo"
+    sed -e "s!%%IDENTIFIER%%!${identifier}!g; s!%%NAME%%!${name}!g;\
+        s!%%SIGNATURE%%!${signature}!g; s!%%BINARY%%!${binary}!g;\
+        s!%%VERSION%%!${version}!g; s!%%ICON%%!${icon##*/}!g;" < "$plist" > "$appname/Contents/Info.plist"
+    if grep '%%[A-Z]*%%' "$appname/Contents/Info.plist"; then
+	echo "E: unsubstituted variables in $appname/Contents/Info.plist" >&2
+	exit 1
+    fi
+
+
+    # bundle the binary and its non-standard dependencies
+    echo "creating ${build}/$static_bundle_dir/$appname"
+    cd ..
+    $mkinstalldirs "$static_bundle_dir"
+    cp -pR "$bundle_dir/$appname" "$static_bundle_dir"
+    $mkinstalldirs "$static_bundle_dir/$appname/Contents/Frameworks"
+    cd "$static_bundle_dir/$appname/Contents"
+    copy_libs "MacOS/$binary"
+}
+
+set -e
+
+identifier="com.w1hkj.$PACKAGE_TARNAME"
+name=$(echo "$PACKAGE_TARNAME" | upcase1)
+# we'll use the first four consonants as the signature
+signature="$(echo $PACKAGE_TARNAME | sed 's/[aeiouAEIOU]//g; s/\(^....\).*/\1/')"
+binary="$PACKAGE_TARNAME"
+icon="$flnet_icon"
+version="${flnet_VERSION_MAJOR}.${flnet_VERSION_MINOR}"
+appversion="$flnet_VERSION"
+
+bundle
+
+cd "$build"
+echo $ECHO_N "creating disk image"
+hdiutil create -ov -srcfolder "$bundle_dir" -format UDZO -tgtimagekey zlib-level=9 "${APPBUNDLE}-nolibs.dmg"
+echo $ECHO_N "creating disk image"
+hdiutil create -ov -srcfolder "$static_bundle_dir" -format UDZO -tgtimagekey zlib-level=9 "${APPBUNDLE}.dmg"
diff --git a/scripts/mknsisinst.sh b/scripts/mknsisinst.sh
new file mode 100755
index 0000000..28c388f
--- /dev/null
+++ b/scripts/mknsisinst.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+### Script to create a win32 installer file
+### 20090510  Stelios Bounanos M0GLD, Dave Freese W1HKJ
+
+### change for the target application
+flnet_name=flnet
+flnet_bin=flnet.exe
+
+if [ $# -ne 2 ]; then
+    echo "Syntax: $0 data-dir build-dir" >&2
+    exit 1
+fi
+
+if [ -z "$PACKAGE_TARNAME" ]; then
+    echo "E: \$PACKAGE_TARNAME undefined"
+    exit 1
+fi
+
+PWD=`pwd`
+data="${PWD}/$1"
+build="${PWD}/$2"
+
+# more sanity checks
+for d in "$data" "$build"; do
+    test -d "$d" && continue
+    echo "E: ${d}: not a directory" >&2
+    exit 1
+done
+if ! test -w "$build"; then
+    echo "E: ${build} is not writeable" >&2
+    exit 1
+fi
+
+set -e
+
+test "x$NOSTRIP" = "x" && $STRIP -S "$flnet_bin"
+def="$def -Dflnet_NAME=$flnet_name -Dflnet_BINARY=$flnet_bin -Dflnet_VERSION=$PACKAGE_VERSION"
+
+$MAKENSIS -V2 -NOCD -D"INSTALLER_FILE=$INSTALLER_FILE" -D"LICENSE_FILE=$data/../COPYING" \
+    -D"SUPPORT_URL=$PACKAGE_HOME" -D"UPDATES_URL=$PACKAGE_DL" $def "$data/win32/fl_app.nsi"
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..fad4073
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,210 @@
+# Copyright (c) 2008 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com)
+
+bin_PROGRAMS = flnet
+
+flnet_cxxFLAGS = @flnet_BUILD_cxxFLAGS@
+flnet_CXXFLAGS = @flnet_BUILD_CXXFLAGS@
+flnet_CFLAGS = $(flnet_CXXFLAGS)
+flnet_LDFLAGS = @flnet_BUILD_LDFLAGS@
+flnet_LDADD = @flnet_BUILD_LDADD@
+
+MINGW32_SRC = \
+	flnet.rc \
+	include/flnetrc.h \
+	mingw.c \
+	include/compat.h \
+	include/compat-mingw.h
+
+
+# We distribute these but do not always compile them
+EXTRA_flnet_SOURCES = $(flnet_WIN32_RES_SRC) $(MINGW32_SRC)
+
+flnet_SOURCES =
+
+if MINGW32
+if HAVE_WINDRES
+  flnet_SOURCES += $(MINGW32_SRC)
+endif
+endif
+
+########################################################################
+
+
+flnet_VERSION_MAJOR = @flnet_VERSION_MAJOR@
+flnet_VERSION_MINOR = @flnet_VERSION_MINOR@
+flnet_VERSION_PATCH = @flnet_VERSION_PATCH@
+flnet_VERSION = @flnet_VERSION@
+
+.EXPORT_ALL_VARIABLES: nsisinst appbundle
+
+# Sources that are generated,
+BUILT_SOURCES =
+# not distributed,
+nodist_flnet_SOURCES = $(BUILT_SOURCES)
+# and deleted by the clean targets
+CLEANFILES = $(BUILT_SOURCES)
+CLEAN_LOCAL =
+
+if MINGW32
+if HAVE_WINDRES
+.rc.o:
+	$(WINDRES) -I$(srcdir)/include -I$(srcdir)/../data/win32 $< -O coff $@
+endif
+endif
+
+install-data-local:
+	if test -f $(srcdir)/../data/flnet.xpm; then \
+	    $(mkinstalldirs) $(DESTDIR)/$(datadir)/pixmaps; \
+	    $(INSTALL_DATA) $(srcdir)/../data/flnet.xpm $(DESTDIR)/$(datadir)/pixmaps; \
+	fi
+	if test -f $(srcdir)/../data/flnet.desktop; then \
+	    $(mkinstalldirs) $(DESTDIR)/$(datadir)/applications; \
+	    $(INSTALL_DATA) $(srcdir)/../data/flnet.desktop $(DESTDIR)/$(datadir)/applications; \
+	fi
+
+uninstall-local:
+	rm -f $(DESTDIR)/$(datadir)/pixmaps/flnet.xpm
+	rm -f $(DESTDIR)/$(datadir)/applications/flnet.desktop
+
+FL_SRC = net_ui.fl netutils.fl
+
+if HAVE_FLUID
+flgen: $(FL_SRC)
+	(cd $(srcdir)/include; \
+	for f in $(FL_SRC); do \
+	    c=$${f%.fl}.cxx; \
+		h=$${f%.fl}.h; \
+		h=$${h##*/}; \
+	    $(FLUID) -c -o ../$$c -h $$h ../$$f; \
+	done)
+endif
+
+
+INSTALLER_FILE = flnet-$(flnet_VERSION)_setup.exe
+APPBUNDLE=flnet-$(flnet_VERSION)
+APPBUNDLE_NOLIBS=$(APPBUNDLE)-nolibs
+
+if HAVE_NSIS
+nsisinst: $(bin_PROGRAMS)
+	sh $(srcdir)/../scripts/mknsisinst.sh "$(srcdir)/../data" .
+    CLEANFILES += $(INSTALLER_FILE)
+endif
+
+if DARWIN
+appbundle: $(bin_PROGRAMS)
+	sh $(srcdir)/../scripts/mkappbundle.sh "$(srcdir)/../data" .
+    CLEAN_LOCAL += $(APPBUNDLE_NOLIBS) $(APPBUNDLE) $(APPBUNDLE)*.dmg
+endif
+
+#if HAVE_ASCIIDOC
+#$(builddir)/../doc/guide.html: $(builddir)/../doc/guide.txt
+#	$(MAKE) -C $(builddir)/../doc $(AM_MAKEFLAGS) guide.html
+
+#$(builddir)/dialogs/guide.cxx: $(builddir)/../doc/guide.html
+#	mkdir -p $(builddir)/dialogs
+#	sed 's/"/\\"/g; s/$$/\\n\\/g; 1 s/.*/const char* szBeginner = "&/; $$ s/.*/&n";/' $< > $@
+#dialogs/htmlstrings.cxx: $(builddir)/dialogs/guide.cxx
+
+#distclean-local:
+#	@if test "$(builddir)" != "$(srcdir)"; then \
+#	    rm -f $(builddir)/dialogs/guide.cxx; \
+#        fi
+#endif
+
+clean-local:
+	-rm -rf $(CLEAN_LOCAL)
+
+# Sources that we build. It is OK to have headers here.
+flnet_SOURCES += \
+	calendar.cxx \
+	combo.cxx \
+	config.cxx \
+	csv_dbase/csvdb.cxx \
+	date.cxx \
+	loglist.cxx \
+	main.cxx \
+	my_UI.cxx \
+	netedits.cxx \
+	netshared.cxx \
+	netsupport.cxx \
+	net_ui.cxx \
+	netutils.cxx \
+	qrzlib.cxx \
+	timeops.cxx \
+	xml_io.cxx \
+	UI/ui_sizes.cxx \
+	xmlrpcpp/XmlRpcClient.cpp \
+	xmlrpcpp/XmlRpcDispatch.cpp	 \
+	xmlrpcpp/XmlRpcMutex.cpp \
+	xmlrpcpp/XmlRpcServer.cpp \
+	xmlrpcpp/XmlRpcServerConnection.cpp \
+	xmlrpcpp/XmlRpcServerMethod.cpp \
+	xmlrpcpp/XmlRpcSocket.cpp \
+	xmlrpcpp/XmlRpcSource.cpp \
+	xmlrpcpp/XmlRpcThread.cpp \
+	xmlrpcpp/XmlRpcThreadedServer.cpp \
+	xmlrpcpp/XmlRpcUtil.cpp \
+	xmlrpcpp/XmlRpcValue.cpp \
+	xmlrpcpp/base64.h \
+	xmlrpcpp/XmlRpc.h \
+	xmlrpcpp/XmlRpcClient.h \
+	xmlrpcpp/XmlRpcDispatch.h \
+	xmlrpcpp/XmlRpcException.h \
+	xmlrpcpp/XmlRpcMutex.h \
+	xmlrpcpp/XmlRpcServer.h \
+	xmlrpcpp/XmlRpcServerConnection.h \
+	xmlrpcpp/XmlRpcServerMethod.h \
+	xmlrpcpp/XmlRpcSocket.h \
+	xmlrpcpp/XmlRpcSource.h \
+	xmlrpcpp/XmlRpcThread.h \
+	xmlrpcpp/XmlRpcThreadedServer.h \
+	xmlrpcpp/XmlRpcUtil.h \
+	xmlrpcpp/XmlRpcValue.h \
+	include/calendar.h \
+	include/combo.h \
+	include/csvdb.h \
+	include/net_config.h \
+	include/date.h \
+	include/loglist.h \
+	include/my_UI.h \
+	include/netedits.h \
+	include/net_icon.h \
+	include/flnetrc.h \
+	include/netshared.h \
+	include/netsupport.h \
+	include/net_ui.h \
+	include/netutils.h \
+	include/netversion.h \
+	include/qrzlib.h \
+	include/timeops.h \
+	include/util.h \
+	include/xmlreader.h \
+	include/xmlrpc.h \
+	include/xml_io.h
+
+# Additional source files that are distributed
+EXTRA_DIST = \
+	flnet.rc \
+	net_ui.fl \
+	UI/big_ui.fl \
+	UI/small_ui.fl \
+	netutils.fl \
+	net_icon.cxx \
+	icons/calendar.xpm \
+	include/threads.h \
+	include/fl_lock.h
+
+# Additional non-source files that are distributed
+# Additional source files that support non-Linux cross compilation
+EXTRA_DIST += \
+	$(srcdir)/../data/flnet.desktop \
+	$(srcdir)/../data/flnet.xpm \
+	$(srcdir)/../data/win32/fl_app.nsi \
+	$(srcdir)/../data/win32/flnet.ico \
+	$(srcdir)/../scripts/mknsisinst.sh \
+	$(srcdir)/../scripts/build4mingw.sh \
+	$(srcdir)/../data/mac/Info.plist.in \
+	$(srcdir)/../data/mac/flnet.icns \
+	$(srcdir)/../scripts/mkappbundle.sh \
+	$(flnet_WIN32_SRC) \
+	$(flnet_FL_SRC)
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644
index 0000000..7c566ed
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,1206 @@
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+# Copyright (c) 2008 Dave Freese, W1HKJ (w1hkj AT w1hkj DOT com)
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+bin_PROGRAMS = flnet$(EXEEXT)
+ at HAVE_WINDRES_TRUE@@MINGW32_TRUE at am__append_1 = $(MINGW32_SRC)
+ at HAVE_NSIS_TRUE@am__append_2 = $(INSTALLER_FILE)
+ at DARWIN_TRUE@am__append_3 = $(APPBUNDLE_NOLIBS) $(APPBUNDLE) $(APPBUNDLE)*.dmg
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/config.h.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/build.m4 \
+	$(top_srcdir)/m4/debug.m4 $(top_srcdir)/m4/fltk.m4 \
+	$(top_srcdir)/m4/funcs.m4 $(top_srcdir)/m4/macosx.m4 \
+	$(top_srcdir)/m4/np-compat.m4 $(top_srcdir)/m4/opt.m4 \
+	$(top_srcdir)/m4/pkg-config.m4 $(top_srcdir)/m4/static.m4 \
+	$(top_srcdir)/m4/win32.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__flnet_SOURCES_DIST = flnet.rc include/flnetrc.h mingw.c \
+	include/compat.h include/compat-mingw.h calendar.cxx combo.cxx \
+	config.cxx csv_dbase/csvdb.cxx date.cxx loglist.cxx main.cxx \
+	my_UI.cxx netedits.cxx netshared.cxx netsupport.cxx net_ui.cxx \
+	netutils.cxx qrzlib.cxx timeops.cxx xml_io.cxx UI/ui_sizes.cxx \
+	xmlrpcpp/XmlRpcClient.cpp xmlrpcpp/XmlRpcDispatch.cpp \
+	xmlrpcpp/XmlRpcMutex.cpp xmlrpcpp/XmlRpcServer.cpp \
+	xmlrpcpp/XmlRpcServerConnection.cpp \
+	xmlrpcpp/XmlRpcServerMethod.cpp xmlrpcpp/XmlRpcSocket.cpp \
+	xmlrpcpp/XmlRpcSource.cpp xmlrpcpp/XmlRpcThread.cpp \
+	xmlrpcpp/XmlRpcThreadedServer.cpp xmlrpcpp/XmlRpcUtil.cpp \
+	xmlrpcpp/XmlRpcValue.cpp xmlrpcpp/base64.h xmlrpcpp/XmlRpc.h \
+	xmlrpcpp/XmlRpcClient.h xmlrpcpp/XmlRpcDispatch.h \
+	xmlrpcpp/XmlRpcException.h xmlrpcpp/XmlRpcMutex.h \
+	xmlrpcpp/XmlRpcServer.h xmlrpcpp/XmlRpcServerConnection.h \
+	xmlrpcpp/XmlRpcServerMethod.h xmlrpcpp/XmlRpcSocket.h \
+	xmlrpcpp/XmlRpcSource.h xmlrpcpp/XmlRpcThread.h \
+	xmlrpcpp/XmlRpcThreadedServer.h xmlrpcpp/XmlRpcUtil.h \
+	xmlrpcpp/XmlRpcValue.h include/calendar.h include/combo.h \
+	include/csvdb.h include/net_config.h include/date.h \
+	include/loglist.h include/my_UI.h include/netedits.h \
+	include/net_icon.h include/netshared.h include/netsupport.h \
+	include/net_ui.h include/netutils.h include/netversion.h \
+	include/qrzlib.h include/timeops.h include/util.h \
+	include/xmlreader.h include/xmlrpc.h include/xml_io.h
+am__objects_1 = flnet.$(OBJEXT) flnet-mingw.$(OBJEXT)
+ at HAVE_WINDRES_TRUE@@MINGW32_TRUE at am__objects_2 = $(am__objects_1)
+am_flnet_OBJECTS = $(am__objects_2) flnet-calendar.$(OBJEXT) \
+	flnet-combo.$(OBJEXT) flnet-config.$(OBJEXT) \
+	flnet-csvdb.$(OBJEXT) flnet-date.$(OBJEXT) \
+	flnet-loglist.$(OBJEXT) flnet-main.$(OBJEXT) \
+	flnet-my_UI.$(OBJEXT) flnet-netedits.$(OBJEXT) \
+	flnet-netshared.$(OBJEXT) flnet-netsupport.$(OBJEXT) \
+	flnet-net_ui.$(OBJEXT) flnet-netutils.$(OBJEXT) \
+	flnet-qrzlib.$(OBJEXT) flnet-timeops.$(OBJEXT) \
+	flnet-xml_io.$(OBJEXT) flnet-ui_sizes.$(OBJEXT) \
+	flnet-XmlRpcClient.$(OBJEXT) flnet-XmlRpcDispatch.$(OBJEXT) \
+	flnet-XmlRpcMutex.$(OBJEXT) flnet-XmlRpcServer.$(OBJEXT) \
+	flnet-XmlRpcServerConnection.$(OBJEXT) \
+	flnet-XmlRpcServerMethod.$(OBJEXT) \
+	flnet-XmlRpcSocket.$(OBJEXT) flnet-XmlRpcSource.$(OBJEXT) \
+	flnet-XmlRpcThread.$(OBJEXT) \
+	flnet-XmlRpcThreadedServer.$(OBJEXT) \
+	flnet-XmlRpcUtil.$(OBJEXT) flnet-XmlRpcValue.$(OBJEXT)
+am__objects_3 =
+nodist_flnet_OBJECTS = $(am__objects_3)
+flnet_OBJECTS = $(am_flnet_OBJECTS) $(nodist_flnet_OBJECTS)
+flnet_DEPENDENCIES =
+flnet_LINK = $(CXXLD) $(flnet_CXXFLAGS) $(CXXFLAGS) $(flnet_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
+SOURCES = $(flnet_SOURCES) $(EXTRA_flnet_SOURCES) \
+	$(nodist_flnet_SOURCES)
+DIST_SOURCES = $(am__flnet_SOURCES_DIST) $(EXTRA_flnet_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AC_CONFIG_ARGS = @AC_CONFIG_ARGS@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BFD_CFLAGS = @BFD_CFLAGS@
+BFD_LIBS = @BFD_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEBUG_CFLAGS = @DEBUG_CFLAGS@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXTRA_LIBS = @EXTRA_LIBS@
+FLTK_CFLAGS = @FLTK_CFLAGS@
+FLTK_CONFIG = @FLTK_CONFIG@
+FLTK_LIBS = @FLTK_LIBS@
+FLUID = @FLUID@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAC_UNIVERSAL_CFLAGS = @MAC_UNIVERSAL_CFLAGS@
+MAC_UNIVERSAL_LDFLAGS = @MAC_UNIVERSAL_LDFLAGS@
+MAKEINFO = @MAKEINFO@
+MAKENSIS = @MAKENSIS@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+OPT_CFLAGS = @OPT_CFLAGS@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+POW_LIB = @POW_LIB@
+PTW32_CFLAGS = @PTW32_CFLAGS@
+PTW32_LIBS = @PTW32_LIBS@
+RDYNAMIC = @RDYNAMIC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+WINDRES = @WINDRES@
+X_CFLAGS = @X_CFLAGS@
+X_LIBS = @X_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+flnet_BUILD_CPPFLAGS = @flnet_BUILD_CPPFLAGS@
+flnet_BUILD_CXXFLAGS = @flnet_BUILD_CXXFLAGS@
+flnet_BUILD_LDADD = @flnet_BUILD_LDADD@
+flnet_BUILD_LDFLAGS = @flnet_BUILD_LDFLAGS@
+flnet_VERSION = @flnet_VERSION@
+
+########################################################################
+flnet_VERSION_MAJOR = @flnet_VERSION_MAJOR@
+flnet_VERSION_MINOR = @flnet_VERSION_MINOR@
+flnet_VERSION_PATCH = @flnet_VERSION_PATCH@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+flnet_cxxFLAGS = @flnet_BUILD_cxxFLAGS@
+flnet_CXXFLAGS = @flnet_BUILD_CXXFLAGS@
+flnet_CFLAGS = $(flnet_CXXFLAGS)
+flnet_LDFLAGS = @flnet_BUILD_LDFLAGS@
+flnet_LDADD = @flnet_BUILD_LDADD@
+MINGW32_SRC = \
+	flnet.rc \
+	include/flnetrc.h \
+	mingw.c \
+	include/compat.h \
+	include/compat-mingw.h
+
+
+# We distribute these but do not always compile them
+EXTRA_flnet_SOURCES = $(flnet_WIN32_RES_SRC) $(MINGW32_SRC)
+
+# Sources that we build. It is OK to have headers here.
+flnet_SOURCES = $(am__append_1) calendar.cxx combo.cxx config.cxx \
+	csv_dbase/csvdb.cxx date.cxx loglist.cxx main.cxx my_UI.cxx \
+	netedits.cxx netshared.cxx netsupport.cxx net_ui.cxx \
+	netutils.cxx qrzlib.cxx timeops.cxx xml_io.cxx UI/ui_sizes.cxx \
+	xmlrpcpp/XmlRpcClient.cpp xmlrpcpp/XmlRpcDispatch.cpp \
+	xmlrpcpp/XmlRpcMutex.cpp xmlrpcpp/XmlRpcServer.cpp \
+	xmlrpcpp/XmlRpcServerConnection.cpp \
+	xmlrpcpp/XmlRpcServerMethod.cpp xmlrpcpp/XmlRpcSocket.cpp \
+	xmlrpcpp/XmlRpcSource.cpp xmlrpcpp/XmlRpcThread.cpp \
+	xmlrpcpp/XmlRpcThreadedServer.cpp xmlrpcpp/XmlRpcUtil.cpp \
+	xmlrpcpp/XmlRpcValue.cpp xmlrpcpp/base64.h xmlrpcpp/XmlRpc.h \
+	xmlrpcpp/XmlRpcClient.h xmlrpcpp/XmlRpcDispatch.h \
+	xmlrpcpp/XmlRpcException.h xmlrpcpp/XmlRpcMutex.h \
+	xmlrpcpp/XmlRpcServer.h xmlrpcpp/XmlRpcServerConnection.h \
+	xmlrpcpp/XmlRpcServerMethod.h xmlrpcpp/XmlRpcSocket.h \
+	xmlrpcpp/XmlRpcSource.h xmlrpcpp/XmlRpcThread.h \
+	xmlrpcpp/XmlRpcThreadedServer.h xmlrpcpp/XmlRpcUtil.h \
+	xmlrpcpp/XmlRpcValue.h include/calendar.h include/combo.h \
+	include/csvdb.h include/net_config.h include/date.h \
+	include/loglist.h include/my_UI.h include/netedits.h \
+	include/net_icon.h include/flnetrc.h include/netshared.h \
+	include/netsupport.h include/net_ui.h include/netutils.h \
+	include/netversion.h include/qrzlib.h include/timeops.h \
+	include/util.h include/xmlreader.h include/xmlrpc.h \
+	include/xml_io.h
+
+# Sources that are generated,
+BUILT_SOURCES = 
+# not distributed,
+nodist_flnet_SOURCES = $(BUILT_SOURCES)
+# and deleted by the clean targets
+CLEANFILES = $(BUILT_SOURCES) $(am__append_2)
+CLEAN_LOCAL = $(am__append_3)
+FL_SRC = net_ui.fl netutils.fl
+INSTALLER_FILE = flnet-$(flnet_VERSION)_setup.exe
+APPBUNDLE = flnet-$(flnet_VERSION)
+APPBUNDLE_NOLIBS = $(APPBUNDLE)-nolibs
+
+# Additional source files that are distributed
+
+# Additional non-source files that are distributed
+# Additional source files that support non-Linux cross compilation
+EXTRA_DIST = flnet.rc net_ui.fl UI/big_ui.fl UI/small_ui.fl \
+	netutils.fl net_icon.cxx icons/calendar.xpm include/threads.h \
+	include/fl_lock.h $(srcdir)/../data/flnet.desktop \
+	$(srcdir)/../data/flnet.xpm $(srcdir)/../data/win32/fl_app.nsi \
+	$(srcdir)/../data/win32/flnet.ico \
+	$(srcdir)/../scripts/mknsisinst.sh \
+	$(srcdir)/../scripts/build4mingw.sh \
+	$(srcdir)/../data/mac/Info.plist.in \
+	$(srcdir)/../data/mac/flnet.icns \
+	$(srcdir)/../scripts/mkappbundle.sh $(flnet_WIN32_SRC) \
+	$(flnet_FL_SRC)
+all: $(BUILT_SOURCES) config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cpp .cxx .o .obj .rc
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+	@if test ! -f $@; then rm -f stamp-h1; else :; fi
+	@if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status src/config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p; \
+	  then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	      echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	      $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' `; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+installcheck-binPROGRAMS: $(bin_PROGRAMS)
+	bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
+	  case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+	   *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+	  esac; \
+	  f=`echo "$$p" | \
+	     sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  for opt in --help --version; do \
+	    if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+	         2>c$${pid}_.err </dev/null \
+		 && test -n "`cat c$${pid}_.out`" \
+		 && test -z "`cat c$${pid}_.err`"; then :; \
+	    else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+	  done; \
+	done; rm -f c$${pid}_.???; exit $$bad
+flnet$(EXEEXT): $(flnet_OBJECTS) $(flnet_DEPENDENCIES) $(EXTRA_flnet_DEPENDENCIES) 
+	@rm -f flnet$(EXEEXT)
+	$(flnet_LINK) $(flnet_OBJECTS) $(flnet_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcClient.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcDispatch.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcMutex.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcServer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcServerConnection.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcServerMethod.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcSocket.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcSource.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcThread.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcThreadedServer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcUtil.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-XmlRpcValue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-calendar.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-combo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-config.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-csvdb.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-date.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-loglist.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-main.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-mingw.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-my_UI.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-net_ui.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-netedits.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-netshared.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-netsupport.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-netutils.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-qrzlib.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-timeops.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-ui_sizes.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flnet-xml_io.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+flnet-mingw.o: mingw.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CFLAGS) $(CFLAGS) -MT flnet-mingw.o -MD -MP -MF $(DEPDIR)/flnet-mingw.Tpo -c -o flnet-mingw.o `test -f 'mingw.c' || echo '$(srcdir)/'`mingw.c
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/flnet-mingw.Tpo $(DEPDIR)/flnet-mingw.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mingw.c' object='flnet-mingw.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CFLAGS) $(CFLAGS) -c -o flnet-mingw.o `test -f 'mingw.c' || echo '$(srcdir)/'`mingw.c
+
+flnet-mingw.obj: mingw.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CFLAGS) $(CFLAGS) -MT flnet-mingw.obj -MD -MP -MF $(DEPDIR)/flnet-mingw.Tpo -c -o flnet-mingw.obj `if test -f 'mingw.c'; then $(CYGPATH_W) 'mingw.c'; else $(CYGPATH_W) '$(srcdir)/mingw.c'; fi`
+ at am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/flnet-mingw.Tpo $(DEPDIR)/flnet-mingw.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mingw.c' object='flnet-mingw.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CFLAGS) $(CFLAGS) -c -o flnet-mingw.obj `if test -f 'mingw.c'; then $(CYGPATH_W) 'mingw.c'; else $(CYGPATH_W) '$(srcdir)/mingw.c'; fi`
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+flnet-calendar.o: calendar.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-calendar.o -MD -MP -MF $(DEPDIR)/flnet-calendar.Tpo -c -o flnet-calendar.o `test -f 'calendar.cxx' || echo '$(srcdir)/'`calendar.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-calendar.Tpo $(DEPDIR)/flnet-calendar.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='calendar.cxx' object='flnet-calendar.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-calendar.o `test -f 'calendar.cxx' || echo '$(srcdir)/'`calendar.cxx
+
+flnet-calendar.obj: calendar.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-calendar.obj -MD -MP -MF $(DEPDIR)/flnet-calendar.Tpo -c -o flnet-calendar.obj `if test -f 'calendar.cxx'; then $(CYGPATH_W) 'calendar.cxx'; else $(CYGPATH_W) '$(srcdir)/calendar.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-calendar.Tpo $(DEPDIR)/flnet-calendar.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='calendar.cxx' object='flnet-calendar.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-calendar.obj `if test -f 'calendar.cxx'; then $(CYGPATH_W) 'calendar.cxx'; else $(CYGPATH_W) '$(srcdir)/calendar.cxx'; fi`
+
+flnet-combo.o: combo.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-combo.o -MD -MP -MF $(DEPDIR)/flnet-combo.Tpo -c -o flnet-combo.o `test -f 'combo.cxx' || echo '$(srcdir)/'`combo.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-combo.Tpo $(DEPDIR)/flnet-combo.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='combo.cxx' object='flnet-combo.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-combo.o `test -f 'combo.cxx' || echo '$(srcdir)/'`combo.cxx
+
+flnet-combo.obj: combo.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-combo.obj -MD -MP -MF $(DEPDIR)/flnet-combo.Tpo -c -o flnet-combo.obj `if test -f 'combo.cxx'; then $(CYGPATH_W) 'combo.cxx'; else $(CYGPATH_W) '$(srcdir)/combo.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-combo.Tpo $(DEPDIR)/flnet-combo.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='combo.cxx' object='flnet-combo.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-combo.obj `if test -f 'combo.cxx'; then $(CYGPATH_W) 'combo.cxx'; else $(CYGPATH_W) '$(srcdir)/combo.cxx'; fi`
+
+flnet-config.o: config.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-config.o -MD -MP -MF $(DEPDIR)/flnet-config.Tpo -c -o flnet-config.o `test -f 'config.cxx' || echo '$(srcdir)/'`config.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-config.Tpo $(DEPDIR)/flnet-config.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='config.cxx' object='flnet-config.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-config.o `test -f 'config.cxx' || echo '$(srcdir)/'`config.cxx
+
+flnet-config.obj: config.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-config.obj -MD -MP -MF $(DEPDIR)/flnet-config.Tpo -c -o flnet-config.obj `if test -f 'config.cxx'; then $(CYGPATH_W) 'config.cxx'; else $(CYGPATH_W) '$(srcdir)/config.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-config.Tpo $(DEPDIR)/flnet-config.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='config.cxx' object='flnet-config.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-config.obj `if test -f 'config.cxx'; then $(CYGPATH_W) 'config.cxx'; else $(CYGPATH_W) '$(srcdir)/config.cxx'; fi`
+
+flnet-csvdb.o: csv_dbase/csvdb.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-csvdb.o -MD -MP -MF $(DEPDIR)/flnet-csvdb.Tpo -c -o flnet-csvdb.o `test -f 'csv_dbase/csvdb.cxx' || echo '$(srcdir)/'`csv_dbase/csvdb.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-csvdb.Tpo $(DEPDIR)/flnet-csvdb.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='csv_dbase/csvdb.cxx' object='flnet-csvdb.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-csvdb.o `test -f 'csv_dbase/csvdb.cxx' || echo '$(srcdir)/'`csv_dbase/csvdb.cxx
+
+flnet-csvdb.obj: csv_dbase/csvdb.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-csvdb.obj -MD -MP -MF $(DEPDIR)/flnet-csvdb.Tpo -c -o flnet-csvdb.obj `if test -f 'csv_dbase/csvdb.cxx'; then $(CYGPATH_W) 'csv_dbase/csvdb.cxx'; else $(CYGPATH_W) '$(srcdir)/csv_dbase/csvdb.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-csvdb.Tpo $(DEPDIR)/flnet-csvdb.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='csv_dbase/csvdb.cxx' object='flnet-csvdb.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-csvdb.obj `if test -f 'csv_dbase/csvdb.cxx'; then $(CYGPATH_W) 'csv_dbase/csvdb.cxx'; else $(CYGPATH_W) '$(srcdir)/csv_dbase/csvdb.cxx'; fi`
+
+flnet-date.o: date.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-date.o -MD -MP -MF $(DEPDIR)/flnet-date.Tpo -c -o flnet-date.o `test -f 'date.cxx' || echo '$(srcdir)/'`date.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-date.Tpo $(DEPDIR)/flnet-date.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='date.cxx' object='flnet-date.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-date.o `test -f 'date.cxx' || echo '$(srcdir)/'`date.cxx
+
+flnet-date.obj: date.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-date.obj -MD -MP -MF $(DEPDIR)/flnet-date.Tpo -c -o flnet-date.obj `if test -f 'date.cxx'; then $(CYGPATH_W) 'date.cxx'; else $(CYGPATH_W) '$(srcdir)/date.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-date.Tpo $(DEPDIR)/flnet-date.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='date.cxx' object='flnet-date.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-date.obj `if test -f 'date.cxx'; then $(CYGPATH_W) 'date.cxx'; else $(CYGPATH_W) '$(srcdir)/date.cxx'; fi`
+
+flnet-loglist.o: loglist.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-loglist.o -MD -MP -MF $(DEPDIR)/flnet-loglist.Tpo -c -o flnet-loglist.o `test -f 'loglist.cxx' || echo '$(srcdir)/'`loglist.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-loglist.Tpo $(DEPDIR)/flnet-loglist.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='loglist.cxx' object='flnet-loglist.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-loglist.o `test -f 'loglist.cxx' || echo '$(srcdir)/'`loglist.cxx
+
+flnet-loglist.obj: loglist.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-loglist.obj -MD -MP -MF $(DEPDIR)/flnet-loglist.Tpo -c -o flnet-loglist.obj `if test -f 'loglist.cxx'; then $(CYGPATH_W) 'loglist.cxx'; else $(CYGPATH_W) '$(srcdir)/loglist.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-loglist.Tpo $(DEPDIR)/flnet-loglist.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='loglist.cxx' object='flnet-loglist.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-loglist.obj `if test -f 'loglist.cxx'; then $(CYGPATH_W) 'loglist.cxx'; else $(CYGPATH_W) '$(srcdir)/loglist.cxx'; fi`
+
+flnet-main.o: main.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-main.o -MD -MP -MF $(DEPDIR)/flnet-main.Tpo -c -o flnet-main.o `test -f 'main.cxx' || echo '$(srcdir)/'`main.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-main.Tpo $(DEPDIR)/flnet-main.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='main.cxx' object='flnet-main.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-main.o `test -f 'main.cxx' || echo '$(srcdir)/'`main.cxx
+
+flnet-main.obj: main.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-main.obj -MD -MP -MF $(DEPDIR)/flnet-main.Tpo -c -o flnet-main.obj `if test -f 'main.cxx'; then $(CYGPATH_W) 'main.cxx'; else $(CYGPATH_W) '$(srcdir)/main.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-main.Tpo $(DEPDIR)/flnet-main.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='main.cxx' object='flnet-main.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-main.obj `if test -f 'main.cxx'; then $(CYGPATH_W) 'main.cxx'; else $(CYGPATH_W) '$(srcdir)/main.cxx'; fi`
+
+flnet-my_UI.o: my_UI.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-my_UI.o -MD -MP -MF $(DEPDIR)/flnet-my_UI.Tpo -c -o flnet-my_UI.o `test -f 'my_UI.cxx' || echo '$(srcdir)/'`my_UI.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-my_UI.Tpo $(DEPDIR)/flnet-my_UI.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='my_UI.cxx' object='flnet-my_UI.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-my_UI.o `test -f 'my_UI.cxx' || echo '$(srcdir)/'`my_UI.cxx
+
+flnet-my_UI.obj: my_UI.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-my_UI.obj -MD -MP -MF $(DEPDIR)/flnet-my_UI.Tpo -c -o flnet-my_UI.obj `if test -f 'my_UI.cxx'; then $(CYGPATH_W) 'my_UI.cxx'; else $(CYGPATH_W) '$(srcdir)/my_UI.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-my_UI.Tpo $(DEPDIR)/flnet-my_UI.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='my_UI.cxx' object='flnet-my_UI.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-my_UI.obj `if test -f 'my_UI.cxx'; then $(CYGPATH_W) 'my_UI.cxx'; else $(CYGPATH_W) '$(srcdir)/my_UI.cxx'; fi`
+
+flnet-netedits.o: netedits.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-netedits.o -MD -MP -MF $(DEPDIR)/flnet-netedits.Tpo -c -o flnet-netedits.o `test -f 'netedits.cxx' || echo '$(srcdir)/'`netedits.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-netedits.Tpo $(DEPDIR)/flnet-netedits.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='netedits.cxx' object='flnet-netedits.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-netedits.o `test -f 'netedits.cxx' || echo '$(srcdir)/'`netedits.cxx
+
+flnet-netedits.obj: netedits.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-netedits.obj -MD -MP -MF $(DEPDIR)/flnet-netedits.Tpo -c -o flnet-netedits.obj `if test -f 'netedits.cxx'; then $(CYGPATH_W) 'netedits.cxx'; else $(CYGPATH_W) '$(srcdir)/netedits.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-netedits.Tpo $(DEPDIR)/flnet-netedits.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='netedits.cxx' object='flnet-netedits.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-netedits.obj `if test -f 'netedits.cxx'; then $(CYGPATH_W) 'netedits.cxx'; else $(CYGPATH_W) '$(srcdir)/netedits.cxx'; fi`
+
+flnet-netshared.o: netshared.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-netshared.o -MD -MP -MF $(DEPDIR)/flnet-netshared.Tpo -c -o flnet-netshared.o `test -f 'netshared.cxx' || echo '$(srcdir)/'`netshared.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-netshared.Tpo $(DEPDIR)/flnet-netshared.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='netshared.cxx' object='flnet-netshared.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-netshared.o `test -f 'netshared.cxx' || echo '$(srcdir)/'`netshared.cxx
+
+flnet-netshared.obj: netshared.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-netshared.obj -MD -MP -MF $(DEPDIR)/flnet-netshared.Tpo -c -o flnet-netshared.obj `if test -f 'netshared.cxx'; then $(CYGPATH_W) 'netshared.cxx'; else $(CYGPATH_W) '$(srcdir)/netshared.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-netshared.Tpo $(DEPDIR)/flnet-netshared.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='netshared.cxx' object='flnet-netshared.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-netshared.obj `if test -f 'netshared.cxx'; then $(CYGPATH_W) 'netshared.cxx'; else $(CYGPATH_W) '$(srcdir)/netshared.cxx'; fi`
+
+flnet-netsupport.o: netsupport.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-netsupport.o -MD -MP -MF $(DEPDIR)/flnet-netsupport.Tpo -c -o flnet-netsupport.o `test -f 'netsupport.cxx' || echo '$(srcdir)/'`netsupport.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-netsupport.Tpo $(DEPDIR)/flnet-netsupport.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='netsupport.cxx' object='flnet-netsupport.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-netsupport.o `test -f 'netsupport.cxx' || echo '$(srcdir)/'`netsupport.cxx
+
+flnet-netsupport.obj: netsupport.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-netsupport.obj -MD -MP -MF $(DEPDIR)/flnet-netsupport.Tpo -c -o flnet-netsupport.obj `if test -f 'netsupport.cxx'; then $(CYGPATH_W) 'netsupport.cxx'; else $(CYGPATH_W) '$(srcdir)/netsupport.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-netsupport.Tpo $(DEPDIR)/flnet-netsupport.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='netsupport.cxx' object='flnet-netsupport.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-netsupport.obj `if test -f 'netsupport.cxx'; then $(CYGPATH_W) 'netsupport.cxx'; else $(CYGPATH_W) '$(srcdir)/netsupport.cxx'; fi`
+
+flnet-net_ui.o: net_ui.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-net_ui.o -MD -MP -MF $(DEPDIR)/flnet-net_ui.Tpo -c -o flnet-net_ui.o `test -f 'net_ui.cxx' || echo '$(srcdir)/'`net_ui.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-net_ui.Tpo $(DEPDIR)/flnet-net_ui.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='net_ui.cxx' object='flnet-net_ui.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-net_ui.o `test -f 'net_ui.cxx' || echo '$(srcdir)/'`net_ui.cxx
+
+flnet-net_ui.obj: net_ui.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-net_ui.obj -MD -MP -MF $(DEPDIR)/flnet-net_ui.Tpo -c -o flnet-net_ui.obj `if test -f 'net_ui.cxx'; then $(CYGPATH_W) 'net_ui.cxx'; else $(CYGPATH_W) '$(srcdir)/net_ui.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-net_ui.Tpo $(DEPDIR)/flnet-net_ui.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='net_ui.cxx' object='flnet-net_ui.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-net_ui.obj `if test -f 'net_ui.cxx'; then $(CYGPATH_W) 'net_ui.cxx'; else $(CYGPATH_W) '$(srcdir)/net_ui.cxx'; fi`
+
+flnet-netutils.o: netutils.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-netutils.o -MD -MP -MF $(DEPDIR)/flnet-netutils.Tpo -c -o flnet-netutils.o `test -f 'netutils.cxx' || echo '$(srcdir)/'`netutils.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-netutils.Tpo $(DEPDIR)/flnet-netutils.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='netutils.cxx' object='flnet-netutils.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-netutils.o `test -f 'netutils.cxx' || echo '$(srcdir)/'`netutils.cxx
+
+flnet-netutils.obj: netutils.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-netutils.obj -MD -MP -MF $(DEPDIR)/flnet-netutils.Tpo -c -o flnet-netutils.obj `if test -f 'netutils.cxx'; then $(CYGPATH_W) 'netutils.cxx'; else $(CYGPATH_W) '$(srcdir)/netutils.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-netutils.Tpo $(DEPDIR)/flnet-netutils.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='netutils.cxx' object='flnet-netutils.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-netutils.obj `if test -f 'netutils.cxx'; then $(CYGPATH_W) 'netutils.cxx'; else $(CYGPATH_W) '$(srcdir)/netutils.cxx'; fi`
+
+flnet-qrzlib.o: qrzlib.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-qrzlib.o -MD -MP -MF $(DEPDIR)/flnet-qrzlib.Tpo -c -o flnet-qrzlib.o `test -f 'qrzlib.cxx' || echo '$(srcdir)/'`qrzlib.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-qrzlib.Tpo $(DEPDIR)/flnet-qrzlib.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='qrzlib.cxx' object='flnet-qrzlib.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-qrzlib.o `test -f 'qrzlib.cxx' || echo '$(srcdir)/'`qrzlib.cxx
+
+flnet-qrzlib.obj: qrzlib.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-qrzlib.obj -MD -MP -MF $(DEPDIR)/flnet-qrzlib.Tpo -c -o flnet-qrzlib.obj `if test -f 'qrzlib.cxx'; then $(CYGPATH_W) 'qrzlib.cxx'; else $(CYGPATH_W) '$(srcdir)/qrzlib.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-qrzlib.Tpo $(DEPDIR)/flnet-qrzlib.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='qrzlib.cxx' object='flnet-qrzlib.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-qrzlib.obj `if test -f 'qrzlib.cxx'; then $(CYGPATH_W) 'qrzlib.cxx'; else $(CYGPATH_W) '$(srcdir)/qrzlib.cxx'; fi`
+
+flnet-timeops.o: timeops.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-timeops.o -MD -MP -MF $(DEPDIR)/flnet-timeops.Tpo -c -o flnet-timeops.o `test -f 'timeops.cxx' || echo '$(srcdir)/'`timeops.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-timeops.Tpo $(DEPDIR)/flnet-timeops.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='timeops.cxx' object='flnet-timeops.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-timeops.o `test -f 'timeops.cxx' || echo '$(srcdir)/'`timeops.cxx
+
+flnet-timeops.obj: timeops.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-timeops.obj -MD -MP -MF $(DEPDIR)/flnet-timeops.Tpo -c -o flnet-timeops.obj `if test -f 'timeops.cxx'; then $(CYGPATH_W) 'timeops.cxx'; else $(CYGPATH_W) '$(srcdir)/timeops.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-timeops.Tpo $(DEPDIR)/flnet-timeops.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='timeops.cxx' object='flnet-timeops.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-timeops.obj `if test -f 'timeops.cxx'; then $(CYGPATH_W) 'timeops.cxx'; else $(CYGPATH_W) '$(srcdir)/timeops.cxx'; fi`
+
+flnet-xml_io.o: xml_io.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-xml_io.o -MD -MP -MF $(DEPDIR)/flnet-xml_io.Tpo -c -o flnet-xml_io.o `test -f 'xml_io.cxx' || echo '$(srcdir)/'`xml_io.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-xml_io.Tpo $(DEPDIR)/flnet-xml_io.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xml_io.cxx' object='flnet-xml_io.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-xml_io.o `test -f 'xml_io.cxx' || echo '$(srcdir)/'`xml_io.cxx
+
+flnet-xml_io.obj: xml_io.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-xml_io.obj -MD -MP -MF $(DEPDIR)/flnet-xml_io.Tpo -c -o flnet-xml_io.obj `if test -f 'xml_io.cxx'; then $(CYGPATH_W) 'xml_io.cxx'; else $(CYGPATH_W) '$(srcdir)/xml_io.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-xml_io.Tpo $(DEPDIR)/flnet-xml_io.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xml_io.cxx' object='flnet-xml_io.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-xml_io.obj `if test -f 'xml_io.cxx'; then $(CYGPATH_W) 'xml_io.cxx'; else $(CYGPATH_W) '$(srcdir)/xml_io.cxx'; fi`
+
+flnet-ui_sizes.o: UI/ui_sizes.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-ui_sizes.o -MD -MP -MF $(DEPDIR)/flnet-ui_sizes.Tpo -c -o flnet-ui_sizes.o `test -f 'UI/ui_sizes.cxx' || echo '$(srcdir)/'`UI/ui_sizes.cxx
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-ui_sizes.Tpo $(DEPDIR)/flnet-ui_sizes.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='UI/ui_sizes.cxx' object='flnet-ui_sizes.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-ui_sizes.o `test -f 'UI/ui_sizes.cxx' || echo '$(srcdir)/'`UI/ui_sizes.cxx
+
+flnet-ui_sizes.obj: UI/ui_sizes.cxx
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-ui_sizes.obj -MD -MP -MF $(DEPDIR)/flnet-ui_sizes.Tpo -c -o flnet-ui_sizes.obj `if test -f 'UI/ui_sizes.cxx'; then $(CYGPATH_W) 'UI/ui_sizes.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/ui_sizes.cxx'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-ui_sizes.Tpo $(DEPDIR)/flnet-ui_sizes.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='UI/ui_sizes.cxx' object='flnet-ui_sizes.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-ui_sizes.obj `if test -f 'UI/ui_sizes.cxx'; then $(CYGPATH_W) 'UI/ui_sizes.cxx'; else $(CYGPATH_W) '$(srcdir)/UI/ui_sizes.cxx'; fi`
+
+flnet-XmlRpcClient.o: xmlrpcpp/XmlRpcClient.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcClient.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcClient.Tpo -c -o flnet-XmlRpcClient.o `test -f 'xmlrpcpp/XmlRpcClient.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcClient.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcClient.Tpo $(DEPDIR)/flnet-XmlRpcClient.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcClient.cpp' object='flnet-XmlRpcClient.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcClient.o `test -f 'xmlrpcpp/XmlRpcClient.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcClient.cpp
+
+flnet-XmlRpcClient.obj: xmlrpcpp/XmlRpcClient.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcClient.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcClient.Tpo -c -o flnet-XmlRpcClient.obj `if test -f 'xmlrpcpp/XmlRpcClient.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcClient.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcClient.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcClient.Tpo $(DEPDIR)/flnet-XmlRpcClient.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcClient.cpp' object='flnet-XmlRpcClient.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcClient.obj `if test -f 'xmlrpcpp/XmlRpcClient.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcClient.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcClient.cpp'; fi`
+
+flnet-XmlRpcDispatch.o: xmlrpcpp/XmlRpcDispatch.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcDispatch.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcDispatch.Tpo -c -o flnet-XmlRpcDispatch.o `test -f 'xmlrpcpp/XmlRpcDispatch.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcDispatch.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcDispatch.Tpo $(DEPDIR)/flnet-XmlRpcDispatch.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcDispatch.cpp' object='flnet-XmlRpcDispatch.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcDispatch.o `test -f 'xmlrpcpp/XmlRpcDispatch.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcDispatch.cpp
+
+flnet-XmlRpcDispatch.obj: xmlrpcpp/XmlRpcDispatch.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcDispatch.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcDispatch.Tpo -c -o flnet-XmlRpcDispatch.obj `if test -f 'xmlrpcpp/XmlRpcDispatch.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcDispatch.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcDispatch.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcDispatch.Tpo $(DEPDIR)/flnet-XmlRpcDispatch.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcDispatch.cpp' object='flnet-XmlRpcDispatch.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcDispatch.obj `if test -f 'xmlrpcpp/XmlRpcDispatch.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcDispatch.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcDispatch.cpp'; fi`
+
+flnet-XmlRpcMutex.o: xmlrpcpp/XmlRpcMutex.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcMutex.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcMutex.Tpo -c -o flnet-XmlRpcMutex.o `test -f 'xmlrpcpp/XmlRpcMutex.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcMutex.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcMutex.Tpo $(DEPDIR)/flnet-XmlRpcMutex.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcMutex.cpp' object='flnet-XmlRpcMutex.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcMutex.o `test -f 'xmlrpcpp/XmlRpcMutex.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcMutex.cpp
+
+flnet-XmlRpcMutex.obj: xmlrpcpp/XmlRpcMutex.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcMutex.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcMutex.Tpo -c -o flnet-XmlRpcMutex.obj `if test -f 'xmlrpcpp/XmlRpcMutex.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcMutex.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcMutex.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcMutex.Tpo $(DEPDIR)/flnet-XmlRpcMutex.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcMutex.cpp' object='flnet-XmlRpcMutex.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcMutex.obj `if test -f 'xmlrpcpp/XmlRpcMutex.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcMutex.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcMutex.cpp'; fi`
+
+flnet-XmlRpcServer.o: xmlrpcpp/XmlRpcServer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcServer.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcServer.Tpo -c -o flnet-XmlRpcServer.o `test -f 'xmlrpcpp/XmlRpcServer.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServer.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcServer.Tpo $(DEPDIR)/flnet-XmlRpcServer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcServer.cpp' object='flnet-XmlRpcServer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcServer.o `test -f 'xmlrpcpp/XmlRpcServer.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServer.cpp
+
+flnet-XmlRpcServer.obj: xmlrpcpp/XmlRpcServer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcServer.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcServer.Tpo -c -o flnet-XmlRpcServer.obj `if test -f 'xmlrpcpp/XmlRpcServer.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServer.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServer.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcServer.Tpo $(DEPDIR)/flnet-XmlRpcServer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcServer.cpp' object='flnet-XmlRpcServer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcServer.obj `if test -f 'xmlrpcpp/XmlRpcServer.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServer.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServer.cpp'; fi`
+
+flnet-XmlRpcServerConnection.o: xmlrpcpp/XmlRpcServerConnection.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcServerConnection.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcServerConnection.Tpo -c -o flnet-XmlRpcServerConnection.o `test -f 'xmlrpcpp/XmlRpcServerConnection.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServerConnection.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcServerConnection.Tpo $(DEPDIR)/flnet-XmlRpcServerConnection.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcServerConnection.cpp' object='flnet-XmlRpcServerConnection.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcServerConnection.o `test -f 'xmlrpcpp/XmlRpcServerConnection.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServerConnection.cpp
+
+flnet-XmlRpcServerConnection.obj: xmlrpcpp/XmlRpcServerConnection.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcServerConnection.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcServerConnection.Tpo -c -o flnet-XmlRpcServerConnection.obj `if test -f 'xmlrpcpp/XmlRpcServerConnection.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServerConnection.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServerConnection.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcServerConnection.Tpo $(DEPDIR)/flnet-XmlRpcServerConnection.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcServerConnection.cpp' object='flnet-XmlRpcServerConnection.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcServerConnection.obj `if test -f 'xmlrpcpp/XmlRpcServerConnection.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServerConnection.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServerConnection.cpp'; fi`
+
+flnet-XmlRpcServerMethod.o: xmlrpcpp/XmlRpcServerMethod.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcServerMethod.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcServerMethod.Tpo -c -o flnet-XmlRpcServerMethod.o `test -f 'xmlrpcpp/XmlRpcServerMethod.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServerMethod.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcServerMethod.Tpo $(DEPDIR)/flnet-XmlRpcServerMethod.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcServerMethod.cpp' object='flnet-XmlRpcServerMethod.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcServerMethod.o `test -f 'xmlrpcpp/XmlRpcServerMethod.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcServerMethod.cpp
+
+flnet-XmlRpcServerMethod.obj: xmlrpcpp/XmlRpcServerMethod.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcServerMethod.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcServerMethod.Tpo -c -o flnet-XmlRpcServerMethod.obj `if test -f 'xmlrpcpp/XmlRpcServerMethod.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServerMethod.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServerMethod.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcServerMethod.Tpo $(DEPDIR)/flnet-XmlRpcServerMethod.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcServerMethod.cpp' object='flnet-XmlRpcServerMethod.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcServerMethod.obj `if test -f 'xmlrpcpp/XmlRpcServerMethod.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcServerMethod.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcServerMethod.cpp'; fi`
+
+flnet-XmlRpcSocket.o: xmlrpcpp/XmlRpcSocket.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcSocket.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcSocket.Tpo -c -o flnet-XmlRpcSocket.o `test -f 'xmlrpcpp/XmlRpcSocket.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcSocket.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcSocket.Tpo $(DEPDIR)/flnet-XmlRpcSocket.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcSocket.cpp' object='flnet-XmlRpcSocket.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcSocket.o `test -f 'xmlrpcpp/XmlRpcSocket.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcSocket.cpp
+
+flnet-XmlRpcSocket.obj: xmlrpcpp/XmlRpcSocket.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcSocket.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcSocket.Tpo -c -o flnet-XmlRpcSocket.obj `if test -f 'xmlrpcpp/XmlRpcSocket.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcSocket.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcSocket.Tpo $(DEPDIR)/flnet-XmlRpcSocket.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcSocket.cpp' object='flnet-XmlRpcSocket.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcSocket.obj `if test -f 'xmlrpcpp/XmlRpcSocket.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcSocket.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcSocket.cpp'; fi`
+
+flnet-XmlRpcSource.o: xmlrpcpp/XmlRpcSource.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcSource.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcSource.Tpo -c -o flnet-XmlRpcSource.o `test -f 'xmlrpcpp/XmlRpcSource.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcSource.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcSource.Tpo $(DEPDIR)/flnet-XmlRpcSource.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcSource.cpp' object='flnet-XmlRpcSource.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcSource.o `test -f 'xmlrpcpp/XmlRpcSource.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcSource.cpp
+
+flnet-XmlRpcSource.obj: xmlrpcpp/XmlRpcSource.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcSource.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcSource.Tpo -c -o flnet-XmlRpcSource.obj `if test -f 'xmlrpcpp/XmlRpcSource.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcSource.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcSource.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcSource.Tpo $(DEPDIR)/flnet-XmlRpcSource.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcSource.cpp' object='flnet-XmlRpcSource.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcSource.obj `if test -f 'xmlrpcpp/XmlRpcSource.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcSource.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcSource.cpp'; fi`
+
+flnet-XmlRpcThread.o: xmlrpcpp/XmlRpcThread.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcThread.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcThread.Tpo -c -o flnet-XmlRpcThread.o `test -f 'xmlrpcpp/XmlRpcThread.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcThread.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcThread.Tpo $(DEPDIR)/flnet-XmlRpcThread.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcThread.cpp' object='flnet-XmlRpcThread.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcThread.o `test -f 'xmlrpcpp/XmlRpcThread.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcThread.cpp
+
+flnet-XmlRpcThread.obj: xmlrpcpp/XmlRpcThread.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcThread.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcThread.Tpo -c -o flnet-XmlRpcThread.obj `if test -f 'xmlrpcpp/XmlRpcThread.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcThread.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcThread.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcThread.Tpo $(DEPDIR)/flnet-XmlRpcThread.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcThread.cpp' object='flnet-XmlRpcThread.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcThread.obj `if test -f 'xmlrpcpp/XmlRpcThread.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcThread.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcThread.cpp'; fi`
+
+flnet-XmlRpcThreadedServer.o: xmlrpcpp/XmlRpcThreadedServer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcThreadedServer.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcThreadedServer.Tpo -c -o flnet-XmlRpcThreadedServer.o `test -f 'xmlrpcpp/XmlRpcThreadedServer.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcThreadedServer.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcThreadedServer.Tpo $(DEPDIR)/flnet-XmlRpcThreadedServer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcThreadedServer.cpp' object='flnet-XmlRpcThreadedServer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcThreadedServer.o `test -f 'xmlrpcpp/XmlRpcThreadedServer.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcThreadedServer.cpp
+
+flnet-XmlRpcThreadedServer.obj: xmlrpcpp/XmlRpcThreadedServer.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcThreadedServer.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcThreadedServer.Tpo -c -o flnet-XmlRpcThreadedServer.obj `if test -f 'xmlrpcpp/XmlRpcThreadedServer.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcThreadedServer.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcThreadedServer.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcThreadedServer.Tpo $(DEPDIR)/flnet-XmlRpcThreadedServer.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcThreadedServer.cpp' object='flnet-XmlRpcThreadedServer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcThreadedServer.obj `if test -f 'xmlrpcpp/XmlRpcThreadedServer.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcThreadedServer.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcThreadedServer.cpp'; fi`
+
+flnet-XmlRpcUtil.o: xmlrpcpp/XmlRpcUtil.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcUtil.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcUtil.Tpo -c -o flnet-XmlRpcUtil.o `test -f 'xmlrpcpp/XmlRpcUtil.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcUtil.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcUtil.Tpo $(DEPDIR)/flnet-XmlRpcUtil.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcUtil.cpp' object='flnet-XmlRpcUtil.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcUtil.o `test -f 'xmlrpcpp/XmlRpcUtil.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcUtil.cpp
+
+flnet-XmlRpcUtil.obj: xmlrpcpp/XmlRpcUtil.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcUtil.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcUtil.Tpo -c -o flnet-XmlRpcUtil.obj `if test -f 'xmlrpcpp/XmlRpcUtil.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcUtil.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcUtil.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcUtil.Tpo $(DEPDIR)/flnet-XmlRpcUtil.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcUtil.cpp' object='flnet-XmlRpcUtil.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcUtil.obj `if test -f 'xmlrpcpp/XmlRpcUtil.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcUtil.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcUtil.cpp'; fi`
+
+flnet-XmlRpcValue.o: xmlrpcpp/XmlRpcValue.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcValue.o -MD -MP -MF $(DEPDIR)/flnet-XmlRpcValue.Tpo -c -o flnet-XmlRpcValue.o `test -f 'xmlrpcpp/XmlRpcValue.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcValue.cpp
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcValue.Tpo $(DEPDIR)/flnet-XmlRpcValue.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcValue.cpp' object='flnet-XmlRpcValue.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcValue.o `test -f 'xmlrpcpp/XmlRpcValue.cpp' || echo '$(srcdir)/'`xmlrpcpp/XmlRpcValue.cpp
+
+flnet-XmlRpcValue.obj: xmlrpcpp/XmlRpcValue.cpp
+ at am__fastdepCXX_TRUE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -MT flnet-XmlRpcValue.obj -MD -MP -MF $(DEPDIR)/flnet-XmlRpcValue.Tpo -c -o flnet-XmlRpcValue.obj `if test -f 'xmlrpcpp/XmlRpcValue.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcValue.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcValue.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/flnet-XmlRpcValue.Tpo $(DEPDIR)/flnet-XmlRpcValue.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='xmlrpcpp/XmlRpcValue.cpp' object='flnet-XmlRpcValue.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flnet_CXXFLAGS) $(CXXFLAGS) -c -o flnet-XmlRpcValue.obj `if test -f 'xmlrpcpp/XmlRpcValue.cpp'; then $(CYGPATH_W) 'xmlrpcpp/XmlRpcValue.cpp'; else $(CYGPATH_W) '$(srcdir)/xmlrpcpp/XmlRpcValue.cpp'; fi`
+
+.cxx.o:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ at am__fastdepCXX_TRUE@	$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	set x; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS) config.h
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am: installcheck-binPROGRAMS
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-local
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-local ctags distclean distclean-compile \
+	distclean-generic distclean-hdr distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am \
+	install-data-local install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installcheck-binPROGRAMS installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
+	tags uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-local
+
+
+.EXPORT_ALL_VARIABLES: nsisinst appbundle
+
+ at HAVE_WINDRES_TRUE@@MINGW32_TRUE at .rc.o:
+ at HAVE_WINDRES_TRUE@@MINGW32_TRUE@	$(WINDRES) -I$(srcdir)/include -I$(srcdir)/../data/win32 $< -O coff $@
+
+install-data-local:
+	if test -f $(srcdir)/../data/flnet.xpm; then \
+	    $(mkinstalldirs) $(DESTDIR)/$(datadir)/pixmaps; \
+	    $(INSTALL_DATA) $(srcdir)/../data/flnet.xpm $(DESTDIR)/$(datadir)/pixmaps; \
+	fi
+	if test -f $(srcdir)/../data/flnet.desktop; then \
+	    $(mkinstalldirs) $(DESTDIR)/$(datadir)/applications; \
+	    $(INSTALL_DATA) $(srcdir)/../data/flnet.desktop $(DESTDIR)/$(datadir)/applications; \
+	fi
+
+uninstall-local:
+	rm -f $(DESTDIR)/$(datadir)/pixmaps/flnet.xpm
+	rm -f $(DESTDIR)/$(datadir)/applications/flnet.desktop
+
+ at HAVE_FLUID_TRUE@flgen: $(FL_SRC)
+ at HAVE_FLUID_TRUE@	(cd $(srcdir)/include; \
+ at HAVE_FLUID_TRUE@	for f in $(FL_SRC); do \
+ at HAVE_FLUID_TRUE@	    c=$${f%.fl}.cxx; \
+ at HAVE_FLUID_TRUE@		h=$${f%.fl}.h; \
+ at HAVE_FLUID_TRUE@		h=$${h##*/}; \
+ at HAVE_FLUID_TRUE@	    $(FLUID) -c -o ../$$c -h $$h ../$$f; \
+ at HAVE_FLUID_TRUE@	done)
+
+ at HAVE_NSIS_TRUE@nsisinst: $(bin_PROGRAMS)
+ at HAVE_NSIS_TRUE@	sh $(srcdir)/../scripts/mknsisinst.sh "$(srcdir)/../data" .
+
+ at DARWIN_TRUE@appbundle: $(bin_PROGRAMS)
+ at DARWIN_TRUE@	sh $(srcdir)/../scripts/mkappbundle.sh "$(srcdir)/../data" .
+
+#if HAVE_ASCIIDOC
+#$(builddir)/../doc/guide.html: $(builddir)/../doc/guide.txt
+#	$(MAKE) -C $(builddir)/../doc $(AM_MAKEFLAGS) guide.html
+
+#$(builddir)/dialogs/guide.cxx: $(builddir)/../doc/guide.html
+#	mkdir -p $(builddir)/dialogs
+#	sed 's/"/\\"/g; s/$$/\\n\\/g; 1 s/.*/const char* szBeginner = "&/; $$ s/.*/&n";/' $< > $@
+#dialogs/htmlstrings.cxx: $(builddir)/dialogs/guide.cxx
+
+#distclean-local:
+#	@if test "$(builddir)" != "$(srcdir)"; then \
+#	    rm -f $(builddir)/dialogs/guide.cxx; \
+#        fi
+#endif
+
+clean-local:
+	-rm -rf $(CLEAN_LOCAL)
+
+# 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/src/UI/big_ui.fl b/src/UI/big_ui.fl
new file mode 100644
index 0000000..ff69eeb
--- /dev/null
+++ b/src/UI/big_ui.fl
@@ -0,0 +1,354 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0300 
+header_name {.h} 
+code_name {.cpp}
+decl {\#include <stdlib.h>} {private local
+} 
+
+decl {\#include <stdio.h>} {private local
+} 
+
+decl {\#include <string.h>} {private local
+} 
+
+decl {\#include "netshared.h"} {private local
+} 
+
+decl {\#include "config.h"} {private local
+} 
+
+decl {\#include "net_config.h"} {private local
+} 
+
+Function {newNetControl()} {open
+} {
+  Fl_Window {} {
+    label {Net Control ver 5.0} open
+    xywh {582 81 475 635} type Double box BORDER_BOX
+    code0 {\#include "my_UI.h"} visible
+  } {
+    Fl_Menu_Bar mnu_bar {open selected
+      xywh {0 0 475 25}
+    } {
+      Submenu {} {
+        label {&Files} open
+        xywh {0 0 100 20}
+      } {
+        MenuItem mnuOpen {
+          label {&Open}
+          callback cb_mnuOpen
+          xywh {0 0 100 20} divider
+        }
+        MenuItem mnuExit {
+          label {&Exit}
+          callback cb_mnuExit
+          xywh {0 0 100 20}
+        }
+      }
+      MenuItem mnuEditor {
+        label {&Editor}
+        callback cb_mnuEditor
+        xywh {0 0 100 20}
+      }
+      MenuItem mnuConfig {
+        label Config
+        callback cb_mnuConfig
+        xywh {0 0 100 20}
+      }
+      Submenu {} {
+        label {&Help} open
+        xywh {0 0 100 20}
+      } {
+        MenuItem mnu_Content {
+          label Content
+          callback cb_mnuHelpContent
+          xywh {0 0 100 20} divider
+        }
+        MenuItem mnu_About {
+          label About
+          callback cb_mnuAbout
+          xywh {0 0 100 20}
+        }
+      }
+    }
+    Fl_Group myUI {open
+      xywh {0 25 390 430}
+      class my_UI
+    } {
+      Fl_Box txtNcallins {
+        label {0 callins}
+        xywh {140 30 115 20} labelsize 16 align 16
+      }
+      Fl_Group net_grp1 {
+        label {    Call In List} open
+        tooltip {Use UP/DN arrow keys to scroll list} xywh {0 49 275 400} labelfont 1 labelsize 16 align 5
+      } {
+        Fl_Group net_grp2 {open
+          xywh {17 60 240 384} box DOWN_BOX color 7
+        } {
+          Fl_Box txtTitles {
+            label {Call    Name    Time  F}
+            xywh {17 60 240 24} box FLAT_BOX color 23 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[0]} {
+            xywh {17 84 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[1]} {
+            xywh {17 108 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[2]} {
+            xywh {17 132 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[3]} {
+            xywh {17 156 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[4]} {
+            xywh {17 180 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[5]} {
+            xywh {17 204 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[6]} {
+            xywh {17 228 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[7]} {
+            xywh {17 252 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[8]} {
+            xywh {17 276 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[9]} {
+            xywh {17 300 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[10]} {
+            xywh {17 324 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[11]} {
+            xywh {17 348 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[12]} {
+            xywh {17 372 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[13]} {
+            xywh {17 396 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+          Fl_Box {txtLine[14]} {
+            xywh {17 420 240 24} box FLAT_BOX color 7 labelfont 4 labelsize 16 align 20
+          }
+        }
+        Fl_Box ptr_left {
+          label {@>}
+          xywh {1 180 15 24} labelsize 16
+        }
+        Fl_Box ptr_right {
+          label {@<}
+          xywh {258 180 15 24} labelsize 16
+        }
+      }
+      Fl_Group dbSelectGroup {open
+        xywh {284 60 185 375} box ENGRAVED_FRAME align 5
+      } {
+        Fl_Box inpLoginSuffix {
+          tooltip {Enter SUFFIX, Esc to abort} xywh {291 87 60 30} box DOWN_BOX color 7 labelfont 13 labelsize 18 align 20
+        }
+        Fl_Box inpLoginPrefix {
+          tooltip {Enter PREFIX Esc to abort} xywh {355 87 60 30} box DOWN_BOX color 7 labelfont 13 labelsize 18 align 20
+        }
+        Fl_Box inpLoginArea {
+          tooltip {Enter AREA Esc to abort} xywh {419 87 40 30} box DOWN_BOX color 7 labelfont 13 labelsize 18 align 20
+        }
+        Fl_Group net_grp3 {open
+          tooltip {Use UP/DN arrow keys to select callsign} xywh {291 125 170 300} box DOWN_BOX color 7 labelsize 18
+        } {
+          Fl_Box {txtPick[0]} {
+            xywh {291 125 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+          Fl_Box {txtPick[1]} {
+            xywh {291 155 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+          Fl_Box {txtPick[2]} {
+            xywh {291 185 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+          Fl_Box {txtPick[3]} {
+            xywh {291 215 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+          Fl_Box {txtPick[4]} {
+            xywh {291 245 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+          Fl_Box {txtPick[5]} {
+            xywh {291 275 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+          Fl_Box {txtPick[6]} {
+            xywh {291 305 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+          Fl_Box {txtPick[7]} {
+            xywh {291 335 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+          Fl_Box {txtPick[8]} {
+            xywh {291 365 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+          Fl_Box {txtPick[9]} {
+            xywh {291 395 170 30} color 7 labelfont 4 labelsize 18 align 20
+          }
+        }
+        Fl_Box txtPickArrows {
+          xywh {374 195 25 180} hide
+        }
+        Fl_Box bx_suffix {
+          label Suffix
+          xywh {291 60 60 25} labelsize 16
+        }
+        Fl_Box bx_prefix {
+          label Prefix
+          xywh {355 60 61 25} labelsize 16
+        }
+        Fl_Box bx_area {
+          label Area
+          xywh {419 60 40 25} labelsize 16
+        }
+      }
+    }
+    Fl_Box txtInfo {
+      xywh {5 449 465 180} box DOWN_BOX color 20 selection_color 7 labelfont 4 labelsize 16 align 21
+    }
+  }
+} 
+
+Function {configDialog()} {} {
+  Fl_Window {} {
+    label {Net Configuration} open
+    xywh {625 128 444 278} type Double hide
+    code0 {\#include "config.h"}
+    code1 {\#include <FL/fl_show_colormap.H>}
+  } {
+    Fl_Tabs tabsConfig {open
+      xywh {5 10 430 210} color 44
+    } {
+      Fl_Group tabGroupColors {
+        label Colors open
+        xywh {7 38 423 177}
+      } {
+        Fl_Output {txtSample[1]} {
+          label {Logged In}
+          xywh {188 61 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[1]);}
+          code2 {o->textcolor(fgColors[1]);}
+        }
+        Fl_Button {btnFg[1]} {
+          label Fg
+          callback {fgColors[1] = fl_show_colormap(fgColors[1]);
+txtSample[1]->textcolor(fgColors[1]);
+txtSample[1]->redraw();}
+          xywh {248 61 45 25}
+        }
+        Fl_Button {btnBg[2]} {
+          label Bg
+          callback {bgColors[1] = fl_show_colormap(bgColors[1]);
+txtSample[1]->color(bgColors[1]);
+txtSample[1]->redraw();}
+          xywh {313 61 45 25}
+        }
+        Fl_Output {txtSample[2]} {
+          label {First Response}
+          xywh {188 96 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[2]);}
+          code2 {o->textcolor(fgColors[2]);}
+        }
+        Fl_Button {btnFg[2]} {
+          label Fg
+          callback {fgColors[2] = fl_show_colormap(fgColors[2]);
+txtSample[2]->textcolor(fgColors[2]);
+txtSample[2]->redraw();}
+          xywh {248 96 45 25}
+        }
+        Fl_Button {btnBg[2]} {
+          label Bg
+          callback {bgColors[2] = fl_show_colormap(bgColors[2]);
+txtSample[2]->color(bgColors[2]);
+txtSample[2]->redraw();}
+          xywh {313 96 45 25}
+        }
+        Fl_Output {txtSample[3]} {
+          label {Second Response}
+          xywh {188 131 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[3]);}
+          code2 {o->textcolor(fgColors[3]);}
+        }
+        Fl_Button {btnFg[3]} {
+          label Fg
+          callback {fgColors[3] = fl_show_colormap(fgColors[3]);
+txtSample[3]->textcolor(fgColors[3]);
+txtSample[3]->redraw();}
+          xywh {248 131 45 25}
+        }
+        Fl_Button {btnBg[3]} {
+          label Bg
+          callback {bgColors[3] = fl_show_colormap(bgColors[3]);
+txtSample[3]->color(bgColors[3]);
+txtSample[3]->redraw();}
+          xywh {313 131 45 25}
+        }
+        Fl_Output {txtSample[4]} {
+          label {Logged Out}
+          xywh {188 166 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[4]);}
+          code2 {o->textcolor(fgColors[4]);}
+        }
+        Fl_Button {btnFg[4]} {
+          label Fg
+          callback {fgColors[4] = fl_show_colormap(fgColors[4]);
+txtSample[4]->textcolor(fgColors[4]);
+txtSample[4]->redraw();}
+          xywh {248 166 45 25}
+        }
+        Fl_Button {btnBg[4]} {
+          label Bg
+          callback {bgColors[4] = fl_show_colormap(bgColors[4]);
+txtSample[4]->color(bgColors[4]);
+txtSample[4]->redraw();}
+          xywh {313 166 45 25}
+        }
+      }
+      Fl_Group tabGroupPriority {
+        label Priority open
+        xywh {6 35 427 182} hide
+      } {
+        Fl_Input cfgP1 {
+          label {Priority 1 character}
+          xywh {155 70 20 25}
+        }
+        Fl_Input inpStatesList1 {
+          label {States List (ie: FL, AL, GA)}
+          xywh {195 70 225 25} align 5
+        }
+        Fl_Input cfgP2 {
+          label {Priority 2 character}
+          xywh {155 100 20 25}
+        }
+        Fl_Input inpStatesList2 {
+          xywh {195 100 225 25} align 5
+        }
+        Fl_Input cfgP3 {
+          label {Priority 3 character}
+          xywh {155 130 20 25}
+        }
+        Fl_Input inpStatesList3 {
+          xywh {195 130 225 25} align 5
+        }
+        Fl_Check_Button chkAutoPriority {
+          label {Auto By Priority}
+          xywh {155 165 25 25} down_box DOWN_BOX align 4
+        }
+      }
+    }
+    Fl_Return_Button btnConfigOK {
+      label OK
+      callback cb_btnCloseConfig
+      xywh {355 235 75 25}
+    }
+  }
+} 
diff --git a/src/UI/small_ui.fl b/src/UI/small_ui.fl
new file mode 100644
index 0000000..3fd6af3
--- /dev/null
+++ b/src/UI/small_ui.fl
@@ -0,0 +1,360 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0300 
+header_name {.h} 
+code_name {.cpp}
+decl {\#include <stdlib.h>} {private local
+} 
+
+decl {\#include <stdio.h>} {private local
+} 
+
+decl {\#include <string.h>} {private local
+} 
+
+decl {\#include <FL/fl_show_colormap.H>} {private local
+} 
+
+decl {\#include "netshared.h"} {private local
+} 
+
+decl {\#include "config.h"} {private local
+} 
+
+decl {\#include "net_config.h"} {private local
+} 
+
+Function {newNetControl()} {open
+} {
+  Fl_Window {} {
+    label {Net Control ver 5.0} open
+    xywh {582 81 390 455} type Double box BORDER_BOX
+    code0 {\#include "my_UI.h"} visible
+  } {
+    Fl_Menu_Bar mnu_bar {open
+      xywh {0 0 390 25}
+    } {
+      Submenu {} {
+        label {&Files} open
+        xywh {0 0 100 20}
+      } {
+        MenuItem mnuOpen {
+          label {&Open}
+          callback cb_mnuOpen
+          xywh {0 0 100 20} divider
+        }
+        MenuItem mnuExit {
+          label {&Exit}
+          callback cb_mnuExit
+          xywh {0 0 100 20}
+        }
+      }
+      MenuItem mnuEditor {
+        label {&Editor}
+        callback cb_mnuEditor
+        xywh {0 0 100 20}
+      }
+      MenuItem mnuConfig {
+        label Config
+        callback cb_mnuConfig
+        xywh {0 0 100 20}
+      }
+      MenuItem mnuSize {
+        label Size
+        callback {change_size();} selected
+        xywh {0 0 36 21}
+      }
+      Submenu {} {
+        label {&Help} open
+        xywh {0 0 100 20}
+      } {
+        MenuItem mnu_Content {
+          label Content
+          callback cb_mnuHelpContent
+          xywh {0 0 100 20} divider
+        }
+        MenuItem mnu_About {
+          label About
+          callback cb_mnuAbout
+          xywh {0 0 100 20}
+        }
+      }
+    }
+    Fl_Group myUI {open
+      xywh {0 25 390 430}
+      class my_UI
+    } {
+      Fl_Box txtNcallins {
+        label {0 callins}
+        xywh {125 25 75 20} align 20
+      }
+      Fl_Group net_grp1 {
+        label {      Call In List} open
+        tooltip {Use UP/DN arrow keys to scroll list} xywh {0 45 225 255} labelfont 1 align 5
+      } {
+        Fl_Box ptr_left {
+          label {@>}
+          xywh {5 125 15 25}
+        }
+        Fl_Box ptr_right {
+          label {@<}
+          xywh {210 125 15 25}
+        }
+        Fl_Group net_grp2 {open
+          xywh {17 45 196 255} box DOWN_BOX color 7
+        } {
+          Fl_Box txtTitles {
+            label {Call    Name    Time  F}
+            xywh {20 47 190 22} box FLAT_BOX color 23 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[0]} {
+            xywh {20 70 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[1]} {
+            xywh {20 85 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[2]} {
+            xywh {20 100 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[3]} {
+            xywh {20 115 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[4]} {
+            xywh {20 130 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[5]} {
+            xywh {20 145 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[6]} {
+            xywh {20 160 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[7]} {
+            xywh {20 175 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[8]} {
+            xywh {20 190 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[9]} {
+            xywh {20 205 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[10]} {
+            xywh {20 220 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[11]} {
+            xywh {20 235 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[12]} {
+            xywh {20 250 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[13]} {
+            xywh {20 265 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[14]} {
+            xywh {20 280 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+        }
+      }
+      Fl_Group dbSelectGroup {open
+        xywh {230 45 155 250} box ENGRAVED_FRAME align 5
+      } {
+        Fl_Box inpLoginSuffix {
+          tooltip {Enter SUFFIX, Esc to abort} xywh {240 75 40 25} box DOWN_BOX color 7 labelfont 13 align 20
+        }
+        Fl_Box inpLoginPrefix {
+          tooltip {Enter PREFIX Esc to abort} xywh {285 75 30 25} box DOWN_BOX color 7 labelfont 13 align 20
+        }
+        Fl_Box inpLoginArea {
+          tooltip {Enter AREA Esc to abort} xywh {320 75 40 25} box DOWN_BOX color 7 labelfont 13 align 20
+        }
+        Fl_Group net_grp3 {open
+          tooltip {Use UP/DN arrow keys to select callsign} xywh {240 115 75 160} box DOWN_BOX color 7
+        } {
+          Fl_Box {txtPick[0]} {
+            xywh {240 115 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[1]} {
+            xywh {240 131 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[2]} {
+            xywh {240 147 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[3]} {
+            xywh {240 163 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[4]} {
+            xywh {240 179 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[5]} {
+            xywh {240 195 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[6]} {
+            xywh {240 211 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[7]} {
+            xywh {240 227 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[8]} {
+            xywh {240 243 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[9]} {
+            xywh {240 259 75 16} color 7 labelfont 13 align 20
+          }
+        }
+        Fl_Box txtPickArrows {
+          xywh {320 135 25 120} hide
+        }
+        Fl_Box bx_suffix {
+          label Suffix
+          xywh {235 45 40 30}
+        }
+        Fl_Box bx_prefix {
+          label Prefix
+          xywh {280 45 40 30}
+        }
+        Fl_Box bx_area {
+          label Area
+          xywh {320 45 40 30}
+        }
+      }
+    }
+    Fl_Box txtInfo {
+      xywh {5 301 379 150} box DOWN_BOX color 20 selection_color 7 labelfont 5 align 21
+    }
+  }
+} 
+
+Function {configDialog()} {} {
+  Fl_Window {} {
+    label {Net Configuration} open
+    xywh {355 55 444 278} type Double hide
+  } {
+    Fl_Tabs tabsConfig {open
+      xywh {5 10 430 210} color 44
+    } {
+      Fl_Group tabGroupColors {
+        label Colors open
+        xywh {15 45 405 160}
+      } {
+        Fl_Output {txtSample[1]} {
+          label {Logged In}
+          xywh {135 60 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[1]);}
+          code2 {o->textcolor(fgColors[1]);}
+        }
+        Fl_Button {btnFg[1]} {
+          label Fg
+          callback {fgColors[1] = fl_show_colormap(fgColors[1]);
+txtSample[1]->textcolor(fgColors[1]);
+txtSample[1]->redraw();}
+          xywh {195 60 45 25}
+        }
+        Fl_Button {btnBg[2]} {
+          label Bg
+          callback {bgColors[1] = fl_show_colormap(bgColors[1]);
+txtSample[1]->color(bgColors[1]);
+txtSample[1]->redraw();}
+          xywh {260 60 45 25}
+        }
+        Fl_Output {txtSample[2]} {
+          label {First Response}
+          xywh {135 95 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[2]);}
+          code2 {o->textcolor(fgColors[2]);}
+        }
+        Fl_Button {btnFg[2]} {
+          label Fg
+          callback {fgColors[2] = fl_show_colormap(fgColors[2]);
+txtSample[2]->textcolor(fgColors[2]);
+txtSample[2]->redraw();}
+          xywh {195 95 45 25}
+        }
+        Fl_Button {btnBg[2]} {
+          label Bg
+          callback {bgColors[2] = fl_show_colormap(bgColors[2]);
+txtSample[2]->color(bgColors[2]);
+txtSample[2]->redraw();}
+          xywh {260 95 45 25}
+        }
+        Fl_Output {txtSample[3]} {
+          label {Second Response}
+          xywh {135 130 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[3]);}
+          code2 {o->textcolor(fgColors[3]);}
+        }
+        Fl_Button {btnFg[3]} {
+          label Fg
+          callback {fgColors[3] = fl_show_colormap(fgColors[3]);
+txtSample[3]->textcolor(fgColors[3]);
+txtSample[3]->redraw();}
+          xywh {195 130 45 25}
+        }
+        Fl_Button {btnBg[3]} {
+          label Bg
+          callback {bgColors[3] = fl_show_colormap(bgColors[3]);
+txtSample[3]->color(bgColors[3]);
+txtSample[3]->redraw();}
+          xywh {260 130 45 25}
+        }
+        Fl_Output {txtSample[4]} {
+          label {Logged Out}
+          xywh {135 165 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[4]);}
+          code2 {o->textcolor(fgColors[4]);}
+        }
+        Fl_Button {btnFg[4]} {
+          label Fg
+          callback {fgColors[4] = fl_show_colormap(fgColors[4]);
+txtSample[4]->textcolor(fgColors[4]);
+txtSample[4]->redraw();}
+          xywh {195 165 45 25}
+        }
+        Fl_Button {btnBg[4]} {
+          label Bg
+          callback {bgColors[4] = fl_show_colormap(bgColors[4]);
+txtSample[4]->color(bgColors[4]);
+txtSample[4]->redraw();}
+          xywh {260 165 45 25}
+        }
+      }
+      Fl_Group tabGroupPriority {
+        label Priority open
+        xywh {20 35 415 185} hide
+      } {
+        Fl_Input cfgP1 {
+          label {Priority 1 character}
+          xywh {160 70 20 25}
+        }
+        Fl_Input inpStatesList1 {
+          label {States List (ie: FL, AL, GA)}
+          xywh {200 70 225 25} align 5
+        }
+        Fl_Input cfgP2 {
+          label {Priority 2 character}
+          xywh {160 100 20 25}
+        }
+        Fl_Input inpStatesList2 {
+          xywh {200 100 225 25} align 5
+        }
+        Fl_Input cfgP3 {
+          label {Priority 3 character}
+          xywh {160 130 20 25}
+        }
+        Fl_Input inpStatesList3 {
+          xywh {200 130 225 25} align 5
+        }
+        Fl_Check_Button chkAutoPriority {
+          label {Auto By Priority}
+          xywh {160 165 25 25} down_box DOWN_BOX align 4
+        }
+      }
+    }
+    Fl_Return_Button btnConfigOK {
+      label OK
+      callback cb_btnCloseConfig
+      xywh {355 235 75 25}
+    }
+  }
+} 
diff --git a/src/UI/ui_sizes.cxx b/src/UI/ui_sizes.cxx
new file mode 100644
index 0000000..5cb917f
--- /dev/null
+++ b/src/UI/ui_sizes.cxx
@@ -0,0 +1,307 @@
+// =====================================================================
+//
+// ui_sizes.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// =====================================================================
+
+#include "net_ui.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "netshared.h"
+
+extern Fl_Window *main_window;
+
+struct UI_SIZES {
+	int			x;
+	int			y;
+	int			w;
+	int			h;
+	Fl_Font		fnt;
+	int			size;
+};
+
+UI_SIZES UI_small[] = {
+	{ 0, 0, 390, 455, 0, 12}, // window  0
+	{ 0, 0, 390, 25, 0, 12}, // menu_ bar 1
+	{ 0, 25, 390, 430, 0, 12}, // myUI 2
+	{ 125, 25, 74, 20, 1, 14}, // txtNcallins  3
+	{ 0, 45, 225, 255, 1, 14}, // net_grp1  4
+	{ 5, 125, 15, 25, 0, 12}, // ptr_left  4
+	{ 210, 125, 15, 25, 0, 12}, // ptr_right  6
+	{ 17, 45, 196, 256, 0, 12}, // net_grp2  7
+	{ 20, 47, 190, 26, 4, 13}, // txtTitles  8
+	{ 20, 70, 190, 16, 4, 13}, // txtLine[0]  9
+	{ 20, 85, 190, 16, 4, 13}, // txtLine[1]  10
+	{ 20, 100, 190, 16, 4, 13}, // txtLine[2]  11
+	{ 20, 115, 190, 16, 4, 13}, // txtLine[3]  12
+	{ 20, 130, 190, 16, 4, 13}, // txtLine[4]  13
+	{ 20, 145, 190, 16, 4, 13}, // txtLine[5]  14
+	{ 20, 160, 190, 16, 4, 13}, // txtLine[6]  15
+	{ 20, 175, 190, 16, 4, 13}, // txtLine[7]  16
+	{ 20, 190, 190, 16, 4, 13}, // txtLine[8]  17
+	{ 20, 205, 190, 16, 4, 13}, // txtLine[9]  18
+	{ 20, 220, 190, 16, 4, 13}, // txtLine[10]  19
+	{ 20, 235, 190, 16, 4, 13}, // txtLine[11]  20
+	{ 20, 250, 190, 16, 4, 13}, // txtLine[12]  21
+	{ 20, 265, 190, 16, 4, 13}, // txtLine[13]  22
+	{ 20, 280, 190, 16, 4, 13}, // txtLine[14]  23
+	{ 230, 45, 155, 250, 13, 12}, // dbSelectGroup  24
+	{ 240, 75, 40, 25, 13, 12}, // inpLoginSuffix  25
+	{ 285, 75, 30, 25, 13, 13}, // inpLoginPrefix  26
+	{ 320, 75, 40, 25, 13, 13}, // inpLoginArea  27
+	{ 240, 115, 75, 160, 0, 12}, // net_grp3  28
+	{ 240, 115, 75, 16, 13, 12}, // txtPick[0]   29
+	{ 240, 131, 75, 16, 13, 12}, // txtPick[1]  30
+	{ 240, 147, 75, 16, 13, 12}, // txtPick[2]  31
+	{ 240, 163, 75, 16, 13, 12}, // txtPick[3]  32
+	{ 240, 179, 75, 16, 13, 12}, // txtPick[4]  33
+	{ 240, 195, 75, 16, 13, 12}, // txtPick[5]  34
+	{ 240, 211, 75, 16, 13, 12}, // txtPick[6]  35
+	{ 240, 227, 75, 16, 13, 12}, // txtPick[7]  36
+	{ 240, 243, 75, 16, 13, 12}, // txtPick[8]  37
+	{ 240, 259, 75, 16, 13, 12}, // txtPick[9]  38
+	{ 320, 135, 25, 120, 0, 12}, // txtPickArrows  39
+	{ 235, 45, 40, 30, 0, 12}, // bx_suffix  40
+	{ 280, 45, 40, 30, 0, 12}, // bx_prefix  41
+	{ 320, 45, 40, 30, 0, 12}, // bx_area  42
+	{ 5, 301, 379, 150, 5, 14}, // txtInfo  43
+};
+
+UI_SIZES UI_big[] = {
+	{ 0, 0, 475, 635, 0, 16}, // window
+	{ 0, 0, 475, 25, 0, 12}, // menu_ bar
+	{ 0, 25, 475, 414, 0, 16}, // myUI
+	{ 140, 30, 115, 20, 1, 16}, // txtNcallins
+	{ 0, 49, 275, 396, 1, 16}, // net_grp1
+	{ 2, 180, 15, 24, 0, 16}, // ptr_left
+	{ 258, 180, 15, 24, 0, 16}, // ptr_right
+	{ 17, 60, 240, 384, 0, 16}, // net_grp2
+	{ 17, 60, 240, 24, 4, 16}, // txtTitles
+	{ 17, 84, 240, 24, 4, 16}, // txtLine[0]
+	{ 17, 108, 240, 24, 4, 16}, // txtLine[1]
+	{ 17, 132, 240, 24, 4, 16}, // txtLine[2]
+	{ 17, 156, 240, 24, 4, 16}, // txtLine[3]
+	{ 17, 180, 240, 24, 4, 16}, // txtLine[4]
+	{ 17, 204, 240, 24, 4, 16}, // txtLine[5]
+	{ 17, 228, 240, 24, 4, 16}, // txtLine[6]
+	{ 17, 252, 240, 24, 4, 16}, // txtLine[7]
+	{ 17, 276, 240, 24, 4, 16}, // txtLine[8]
+	{ 17, 300, 240, 24, 4, 16}, // txtLine[9]
+	{ 17, 324, 240, 24, 4, 16}, // txtLine[10]
+	{ 17, 348, 240, 24, 4, 16}, // txtLine[11]
+	{ 17, 372, 240, 24, 4, 16}, // txtLine[12]
+	{ 17, 396, 240, 24, 4, 16}, // txtLine[13]
+	{ 17, 420, 240, 24, 4, 16}, // txtLine[14]
+	{ 284, 60, 185, 380, 13, 18}, // dbSelectGroup
+	{ 291, 87, 60, 30, 13, 18}, // inpLoginSuffix
+	{ 355, 87, 60, 30, 13, 18}, // inpLoginPrefix
+	{ 419, 87, 40, 30, 13, 18}, // inpLoginArea
+	{ 291, 125, 170, 300, 0, 18}, // net_grp3
+	{ 291, 125, 170, 30, 4, 18}, //  txtPick[0]
+	{ 291, 155, 170, 30, 4, 18}, //  txtPick[1]
+	{ 291, 185, 170, 30, 4, 18}, //  txtPick[2]
+	{ 291, 215, 170, 30, 4, 18}, //  txtPick[3]
+	{ 291, 245, 170, 30, 4, 18}, //  txtPick[4]
+	{ 291, 275, 170, 30, 4, 18}, //  txtPick[5]
+	{ 291, 305, 170, 30, 4, 18}, //  txtPick[6]
+	{ 291, 335, 170, 30, 4, 18}, //  txtPick[7]
+	{ 291, 365, 170, 30, 4, 18}, //  txtPick[8]
+	{ 291, 395, 170, 30, 4, 18}, //  txtPick[9]
+	{ 374, 195, 25, 180, 0, 18}, // txtPickArrows
+	{ 291, 60, 60, 25, 0, 16}, // bx_suffix
+	{ 355, 60, 61, 25, 0, 16}, // bx_prefix
+	{ 419, 60, 40, 25, 0, 16}, // bx_area
+	{ 5, 449, 465, 180, 5, 16}, // txtInfo
+};
+
+UI_SIZES *ui_last = UI_small;
+
+void change_size()
+{
+	UI_SIZES *ui = ui_last;
+
+	if (ui == UI_small)
+		ui = ui_last = UI_big;
+	else
+		ui = ui_last = UI_small;
+
+	int X = main_window->x();
+	int Y = main_window->y();
+
+	main_window->resize(X, Y, ui->w, ui->h);
+	ui++;
+	mnu_bar->resize(ui->x, ui->y, ui->w, ui->h);
+	ui++;
+	myUI->resize(ui->x, ui->y, ui->w, ui->h);
+	ui++;
+	txtNcallins->resize(ui->x, ui->y, ui->w, ui->h);
+	ui++;
+	net_grp1->resize(ui->x, ui->y, ui->w, ui->h);
+	net_grp1->labelfont(ui->fnt);
+	net_grp1->labelsize(ui->size);
+	ui++;
+	ptr_left->resize(ui->x, ui->y, ui->w, ui->h);
+	ui++;
+	ptr_right->resize(ui->x, ui->y, ui->w, ui->h);
+	ui++;
+	net_grp2->resize(ui->x, ui->y, ui->w, ui->h);
+	ui++;
+	txtTitles->resize(ui->x, ui->y, ui->w, ui->h);
+	txtTitles->labelfont(ui->fnt);
+	txtTitles->labelsize(ui->size);
+	ui++;
+	txtLine[0]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[0]->labelfont(ui->fnt);
+	txtLine[0]->labelsize(ui->size);
+	ui++;
+	txtLine[1]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[1]->labelfont(ui->fnt);
+	txtLine[1]->labelsize(ui->size);
+	ui++;
+	txtLine[2]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[2]->labelfont(ui->fnt);
+	txtLine[2]->labelsize(ui->size);
+	ui++;
+	txtLine[3]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[3]->labelfont(ui->fnt);
+	txtLine[3]->labelsize(ui->size);
+	ui++;
+	txtLine[4]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[4]->labelfont(ui->fnt);
+	txtLine[4]->labelsize(ui->size);
+	ui++;
+	txtLine[5]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[5]->labelfont(ui->fnt);
+	txtLine[5]->labelsize(ui->size);
+	ui++;
+	txtLine[6]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[6]->labelfont(ui->fnt);
+	txtLine[6]->labelsize(ui->size);
+	ui++;
+	txtLine[7]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[7]->labelfont(ui->fnt);
+	txtLine[7]->labelsize(ui->size);
+	ui++;
+	txtLine[8]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[8]->labelfont(ui->fnt);
+	txtLine[8]->labelsize(ui->size);
+	ui++;
+	txtLine[9]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[9]->labelfont(ui->fnt);
+	txtLine[9]->labelsize(ui->size);
+	ui++;
+	txtLine[10]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[10]->labelfont(ui->fnt);
+	txtLine[10]->labelsize(ui->size);
+	ui++;
+	txtLine[11]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[11]->labelfont(ui->fnt);
+	txtLine[11]->labelsize(ui->size);
+	ui++;
+	txtLine[12]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[12]->labelfont(ui->fnt);
+	txtLine[12]->labelsize(ui->size);
+	ui++;
+	txtLine[13]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[13]->labelfont(ui->fnt);
+	txtLine[13]->labelsize(ui->size);
+	ui++;
+	txtLine[14]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtLine[14]->labelfont(ui->fnt);
+	txtLine[14]->labelsize(ui->size);
+	ui++;
+	dbSelectGroup->resize(ui->x, ui->y, ui->w, ui->h);
+	ui++;
+	inpLoginSuffix->resize(ui->x, ui->y, ui->w, ui->h);
+	inpLoginSuffix->labelfont(ui->fnt);
+	inpLoginSuffix->labelsize(ui->size);
+	ui++;
+	inpLoginPrefix->resize(ui->x, ui->y, ui->w, ui->h);
+	inpLoginPrefix->labelfont(ui->fnt);
+	inpLoginPrefix->labelsize(ui->size);
+	ui++;
+	inpLoginArea->resize(ui->x, ui->y, ui->w, ui->h);
+	inpLoginArea->labelfont(ui->fnt);
+	inpLoginArea->labelsize(ui->size);
+	ui++;
+	net_grp3->resize(ui->x, ui->y, ui->w, ui->h);
+	net_grp3->labelsize(ui->size);
+	ui++;
+	txtPick[0]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[0]->labelfont(ui->fnt);
+	txtPick[0]->labelsize(ui->size);
+	ui++;
+	txtPick[1]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[1]->labelfont(ui->fnt);
+	txtPick[1]->labelsize(ui->size);
+	ui++;
+	txtPick[2]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[2]->labelfont(ui->fnt);
+	txtPick[2]->labelsize(ui->size);
+	ui++;
+	txtPick[3]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[3]->labelfont(ui->fnt);
+	txtPick[3]->labelsize(ui->size);
+	ui++;
+	txtPick[4]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[4]->labelfont(ui->fnt);
+	txtPick[4]->labelsize(ui->size);
+	ui++;
+	txtPick[5]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[5]->labelfont(ui->fnt);
+	txtPick[5]->labelsize(ui->size);
+	ui++;
+	txtPick[6]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[6]->labelfont(ui->fnt);
+	txtPick[6]->labelsize(ui->size);
+	ui++;
+	txtPick[7]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[7]->labelfont(ui->fnt);
+	txtPick[7]->labelsize(ui->size);
+	ui++;
+	txtPick[8]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[8]->labelfont(ui->fnt);
+	txtPick[8]->labelsize(ui->size);
+	ui++;
+	txtPick[9]->resize(ui->x, ui->y, ui->w, ui->h);
+	txtPick[9]->labelfont(ui->fnt);
+	txtPick[9]->labelsize(ui->size);
+	ui++;
+	txtPickArrows->resize(ui->x, ui->y, ui->w, ui->h);
+	ui++;
+	bx_suffix->resize(ui->x, ui->y, ui->w, ui->h);
+	bx_suffix->labelsize(ui->size);
+	ui++;
+	bx_prefix->resize(ui->x, ui->y, ui->w, ui->h);
+	bx_prefix->labelsize(ui->size);
+	ui++;
+	bx_area->resize(ui->x, ui->y, ui->w, ui->h);
+	bx_area->labelsize(ui->size);
+	ui++;
+	txtInfo->resize(ui->x, ui->y, ui->w, ui->h);
+	txtInfo->labelfont(ui->fnt);
+	txtInfo->labelsize(ui->size);
+	
+	main_window->redraw();
+}
+
diff --git a/src/calendar.cxx b/src/calendar.cxx
new file mode 100644
index 0000000..d148d12
--- /dev/null
+++ b/src/calendar.cxx
@@ -0,0 +1,638 @@
+//======================================================================
+// calendar.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+// Copyright (C) 2014, Robert Stiles, KK5VD
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// xmlrpc interface to fldigi
+//
+// fetches current list of modem types from fldigi
+// fetches current modem in use in fldigi
+// sets fldigi modem-by-name when required
+//
+//======================================================================
+
+#include <FL/Fl.H>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "calendar.h"
+
+void popcal_cb (Fl_Widget *v, long d);
+
+static void fl_calendar_button_cb (Fl_Button *a, void *b)
+{
+	long j=0;
+	Fl_Calendar *c = (Fl_Calendar *)b;
+	Fl_Button   *sb;
+	int numdays = c->daysinmonth () + 1;
+	for (int i=1; i < numdays; i++) {
+		sb = c->day_button(i);
+		sb->color (52);
+		if (a == sb) {
+			c->Day (i);
+			j = i;
+			sb->color (sb->selection_color());
+			if (c->target) {
+				((Fl_Input *)(c->target))->value(c->szDate(c->calfmt));
+				(c->target)->redraw();
+			}
+		}
+	}
+	c->redraw();
+	c->do_callback(c, j);
+}
+
+void
+Fl_Calendar_Base::setTarget (Fl_Widget *tgt)
+{
+	target = tgt;
+}
+
+Fl_Calendar_Base::Fl_Calendar_Base (int x, int y, int w, int h,
+									const char *l) : Fl_Group (x, y, w, h, l), Date ()
+{
+	int i;
+
+	for (i = 0; i<(7*6); i++)
+	{
+		days[i] = new Fl_Button ((w/7)*(i%7) + x,
+								 (h/6)*(i/7) + y,
+								 (w/7),
+								 (h/6));
+		days[i]->down_box (FL_THIN_DOWN_BOX);
+		days[i]->labelsize (10);
+		days[i]->box (FL_THIN_UP_BOX);
+		days[i]->color (52);
+		days[i]->callback ((Fl_Callback*)&fl_calendar_button_cb, (void *)this);
+	}
+	calfmt = 0;
+}
+
+void Fl_Calendar_Base::csize (int cx, int cy, int cw, int ch)
+{
+	int i;
+	for (i = 0; i<(7*6); i++)
+	{
+		days[i]->resize ((cw/7)*(i%7) + cx,
+						 (ch/6)*(i/7) + cy,
+						 (cw/7),
+						 (ch/6));
+	}
+}
+
+
+void
+Fl_Calendar_Base::update ()
+{
+	int dow = dayofweek (Year(), Month(), 1);
+	int dim = daysinmonth (Month(), isleapyear (Year()));
+	int i;
+
+	for (i=0; i<dow; i++)
+	{
+		days[i]->hide ();
+	}
+
+	for (i=(dim+dow); i<(6*7); i++)
+	{
+		days[i]->hide ();
+	}
+
+	for (i=dow; i<(dim+dow); i++)
+	{
+		char t[8];
+		sprintf (t, "%d", (i-dow+1));
+		days[i]->label (strdup(t));
+		days[i]->color (52);
+		if ((i-dow+1) == Day())
+			days[i]->color (selection_color());
+		days[i]->show ();
+	}
+}
+
+Fl_Button *
+Fl_Calendar_Base::day_button (int i)
+{
+	if ((i > 0) && (i <= daysinmonth ()))
+		return days[i + dayofweek (Year(), Month(), 1) - 1];
+	return 0;
+}
+
+
+
+static void
+fl_calendar_prv_month_cb (Fl_Button *, void *b)
+{
+	Fl_Calendar *c = (Fl_Calendar *)b;
+	c->previous_month ();
+	c->do_callback(c, (long)0);
+}
+
+static void
+fl_calendar_nxt_month_cb (Fl_Button *, void *b)
+{
+	Fl_Calendar *c = (Fl_Calendar *)b;
+	c->next_month ();
+	c->do_callback(c, (long)0);
+}
+
+static void
+fl_calendar_prv_year_cb (Fl_Button *, void *b)
+{
+	Fl_Calendar *c = (Fl_Calendar *)b;
+	c->previous_year ();
+	c->do_callback(c, (long)0);
+}
+
+static void
+fl_calendar_nxt_year_cb (Fl_Button *, void *b)
+{
+	Fl_Calendar *c = (Fl_Calendar *)b;
+	c->next_year ();
+	c->do_callback(c, (long)0);
+}
+
+Fl_Calendar::Fl_Calendar (int x, int y, int w, int h,
+						  const char *l) : Fl_Calendar_Base (x, y, w, h, l)
+{
+	int i, bw;
+	for (i = 0; i<7; i++) {
+		//    weekdays[i] = new Fl_Button ((w/7)*(i%7) + x,
+		weekdays[i] = new Fl_Box ((w/7)*(i%7) + x,
+								  (h/8)*((i/7)+1) + y,
+								  (w/7),
+								  (h/8));
+		weekdays[i]->box (FL_THIN_UP_BOX);
+		weekdays[i]->labelsize (10);
+		weekdays[i]->color (52);
+	}
+
+	weekdays[SUNDAY]->label ("S");
+	weekdays[MONDAY]->label ("M");
+	weekdays[TUESDAY]->label ("T");
+	weekdays[WEDNESDAY]->label ("W");
+	weekdays[THURSDAY]->label ("T");
+	weekdays[FRIDAY]->label ("F");
+	weekdays[SATURDAY]->label ("S");
+
+	bw = w/10 < 16 ? 16 : w/10;
+	prv_year = new Fl_Button (x, y, bw, (h/8), "@<<");
+	prv_year->box (FL_THIN_UP_BOX);
+	prv_year->labeltype (FL_SYMBOL_LABEL);
+	prv_year->labelsize (10);
+	prv_year->down_box (FL_THIN_DOWN_BOX);
+	prv_year->callback ((Fl_Callback*)&fl_calendar_prv_year_cb, (void *)this);
+
+	prv_month = new Fl_Button (x + bw, y, bw, (h/8), "@<");
+	prv_month->box (FL_THIN_UP_BOX);
+	prv_month->labeltype (FL_SYMBOL_LABEL);
+	prv_month->labelsize (10);
+	prv_month->down_box (FL_THIN_DOWN_BOX);
+	prv_month->callback ((Fl_Callback*)&fl_calendar_prv_month_cb, (void *)this);
+
+	nxt_month = new Fl_Button (x + w - 2*bw, y, bw, (h/8), "@>");
+	nxt_month->box (FL_THIN_UP_BOX);
+	nxt_month->labeltype (FL_SYMBOL_LABEL);
+	nxt_month->labelsize (10);
+	nxt_month->down_box (FL_THIN_DOWN_BOX);
+	nxt_month->callback ((Fl_Callback*)&fl_calendar_nxt_month_cb, (void *)this);
+
+	nxt_year = new Fl_Button (x + w - bw, y, bw, (h/8), "@>>");
+	nxt_year->box (FL_THIN_UP_BOX);
+	nxt_year->labeltype (FL_SYMBOL_LABEL);
+	nxt_year->labelsize (10);
+	nxt_year->down_box (FL_THIN_DOWN_BOX);
+	nxt_year->callback ((Fl_Callback*)&fl_calendar_nxt_year_cb, (void *)this);
+
+	//  caption = new Fl_Button (x + (w/10)*2, y, (6*w/10), (h/8));
+	caption = new Fl_Box (x + 2*bw, y, w - 4*bw, (h/8));
+	caption->box (FL_THIN_UP_BOX);
+	caption->labeltype (FL_SYMBOL_LABEL);
+	caption->labelfont (1);
+	if (bw < 20)
+		caption->labelsize (9);
+	else
+		caption->labelsize (11);
+	//  caption->down_box (FL_THIN_DOWN_BOX);
+
+	Fl_Calendar_Base::csize (x, y + (2*h/8), w, (6*h/8));
+
+	target = 0;
+
+	update ();
+}
+
+void
+Fl_Calendar::csize (int cx, int cy, int cw, int ch)
+{
+	int i;
+	for (i = 0; i<7; i++)
+	{
+		//      weekdays[i] = new Fl_Button ((cw/7)*(i%7) + cx,
+		weekdays[i] = new Fl_Box ((cw/7)*(i%7) + cx,
+								  (ch/8)*((i/7)+1) + cy,
+								  (cw/7),
+								  (ch/8));
+	}
+
+	prv_month->resize (cx + (cw/10), cy, (cw/10), (ch/8));
+	nxt_month->resize (cx + (cw/10)*8, cy, (cw/10), (ch/8));
+	prv_year->resize (cx, cy, (cw/10), (ch/8));
+	nxt_year->resize (cx + (cw/10)*9, cy, (cw/10), (ch/8));
+	caption->resize (cx + (cw/10)*2, cy, (cw/10)*6, (ch/8));
+
+	Fl_Calendar_Base::csize (cx, cy + (2*ch/8), cw, (6*ch/8));
+}
+
+void
+Fl_Calendar::update ()
+{
+	int dow = dayofweek (Year(), Month(), 1);
+	int dim = daysinmonth (Month(), isleapyear (Year()));
+	int i;
+
+	for (i=dow; i<(dim+dow); i++)
+	{
+		char t[8];
+		sprintf (t, "%d", (i-dow+1));
+		days[i]->label (strdup(t));
+	}
+
+	char tmp[32];
+	sprintf (tmp, "%s %d", month_name[Month()-1], Year());
+	Fl_Calendar_Base::update ();
+	if (caption->label ())
+		free ((void *) caption->label ());
+	caption->label (strdup(tmp));
+	redraw ();
+}
+
+void Fl_Calendar::today ()
+{
+	Date::today();
+	update ();
+}
+
+void Fl_Calendar::previous_month ()
+{
+	Date::previous_month();
+	update ();
+}
+
+void
+Fl_Calendar::next_month ()
+{
+	Date::next_month();
+	update ();
+}
+
+void
+Fl_Calendar::previous_year ()
+{
+	Date::previous_year();
+	update ();
+}
+
+void Fl_Calendar::next_year ()
+{
+	Date::next_year();
+	update ();
+}
+
+void Fl_Calendar::setDate(int m, int d, int y)
+{
+	Date::setDate(m,d,y);
+}
+
+int
+Fl_Calendar::handle (int event)
+{
+	int m, d, y, o, md;
+
+	switch (event)
+	{
+		case FL_FOCUS:
+		case FL_UNFOCUS:
+			return 1;
+
+		case FL_KEYBOARD:
+			m = Month ();
+			d = Day ();
+			y = Year ();
+			switch(Fl::event_key ())
+		{
+			case FL_Enter:
+				do_callback(this, d);
+				return 1;
+				break;
+			case FL_Up:
+				o = -7;
+				break;
+			case FL_Down:
+				o = 7;
+				break;
+			case FL_Right:
+				o = 1;
+				break;
+			case FL_Left:
+				o = -1;
+				break;
+			case FL_Page_Up:
+				previous_month ();
+				return 1;
+			case FL_Page_Down:
+				next_month ();
+				return 1;
+			default:
+				return Fl_Group::handle (event);
+		}
+			if (datevalid (y, m, d + o))
+				setDate (m, d + o, y);
+			else
+			{
+				if (o < 0)
+				{
+					previous_month ();
+					m = Month ();
+					y = Year ();
+					md = daysinmonth (m, isleapyear (y));
+					d = d + o + md;
+					setDate (m, d, y);
+				}
+				else
+				{
+					md = daysinmonth (m, isleapyear (y));
+					next_month ();
+					m = Month ();
+					y = Year ();
+					d = d + o - md;
+					setDate (m, d, y);
+				}
+			}
+			return 1;
+	}
+	return Fl_Group::handle (event);
+}
+
+
+// Popup Calendar class
+
+Fl_PopCal::Fl_PopCal (int X, int Y, int W, int H, Fl_Input * tgt)
+: Fl_Window (X, Y, W, H, "")
+{
+	target = tgt;
+	clear_border();
+	box(FL_UP_BOX);
+	//  popcal = new Fl_Calendar(2, 2);
+	popcal = new Fl_Calendar(2, 2, W-4, H-4);
+	popcal->callback ( (Fl_Callback*)popcal_cb);
+	Fl_Window *window = popcal->window();
+	window->set_modal();
+	end();
+}
+
+
+Fl_PopCal::~Fl_PopCal ()
+{
+}
+
+void Fl_PopCal::popcalfmt (int i)
+{
+	popcalfmt_ = i;
+}
+
+int Fl_PopCal::popcalfmt ()
+{
+	return popcalfmt_;
+}
+
+void Fl_PopCal::setDate (int m, int d, int y)
+{
+	popcal->setDate (m,d,y);
+	popcal->update();
+}
+
+int Fl_PopCal::handle(int event)
+{
+	int ex = Fl::event_x_root(),
+	ey = Fl::event_y_root();
+	if (event == FL_PUSH) {
+		if ( ex < x() || ex > (x() + w()) ||
+			ey < y() || ey > (y() + h()) ) {
+			pophide();
+			return 1;
+		}
+	}
+	if (Fl_Group::handle(event)) return 1;
+	return 0;
+}
+
+void Fl_PopCal::popposition (int x, int y)
+{
+	position (x, y);
+}
+
+void Fl_PopCal::popshow ()
+{
+	show ();
+	Fl::grab(this);
+}
+
+void Fl_PopCal::pophide ()
+{
+	hide ();
+	Fl::release();
+}
+
+void Fl_PopCal::popcal_cb_i (Fl_Widget *v, long d)
+{
+	int ey = Fl::event_y_root();
+	Fl_PopCal *me = (Fl_PopCal *)(v->parent());
+	Fl_Input *tgt = me->target;
+	if (ey > me->y() + 40) {
+		if (d && tgt)
+			tgt->value (((Fl_Calendar *)v)->szDate (me->popcalfmt_));
+		me->pophide();
+	}
+	return;
+}
+
+void popcal_cb (Fl_Widget *v, long d)
+{
+	((Fl_PopCal *)(v))->popcal_cb_i (v, d);
+	return;
+}
+
+/* XPM Calendar Label */
+static const char *cal_16[] = {
+	/* width height num_colors chars_per_pixel */
+	"    14    14        3            1",
+	/* colors */
+	". c #000000",
+	"d c none",
+	"e c #ffffff",
+	/* pixels */
+	"dddddddddddddd",
+	".............d",
+	".eeeeeeeeeee.d",
+	".............d",
+	".e.e.e.e.e.e.d",
+	".............d",
+	".e.e.e.e.e.e.d",
+	".............d",
+	".e.e.e.e.e.e.d",
+	".............d",
+	".e.e.e.e.e.e.d",
+	".............d",
+	".e.e.e.e.e.e.d",
+	"dddddddddddddd",
+};
+
+void
+Fl_DateInput::fl_popcal()
+{
+	Fl_Widget *who = this, *parent;
+	int xpos = who->x(), ypos = who->h() + who->y();
+	int w = who->w(), h;
+	int m = 0, d = 0, y = 0;
+
+	w = w < 140 ? 140 : w;
+	w = w - (w % 7);
+	h = 8*(w/7);
+	w += 4; h += 4;
+	parent = who;
+	while (parent) {
+		who = parent;
+		parent = parent->parent();
+		if (parent == 0) {
+			xpos += who->x();
+			ypos += who->y();
+		}
+	}
+	if (!Cal)
+		//    Cal = new Fl_PopCal(xpos, ypos, 7*20+4, 8*20+4, Input);
+		Cal = new Fl_PopCal(xpos, ypos, w, h, Input);
+	else
+		Cal->popposition(xpos, ypos);
+
+	if (popcalfmt_ < 3) {
+		switch (popcalfmt_) {
+			case 0:
+			case 1:
+				sscanf(Input->value(), "%d/%d/%d", &m, &d, &y);
+				break;
+			case 2:
+			default:
+				sscanf(Input->value(),"%4d%2d%2d", &y, &m, &d);
+				break;
+		}
+		if (y < 10) y+=2000;
+		if (y < 100) y+=1900;
+		Cal->setDate (m,d,y);
+	}
+	Cal->popcalfmt (popcalfmt_);
+
+	Cal->popshow();
+	return;
+}
+
+void btnDateInput_cb (Fl_Widget *v, void *d)
+{
+	((Fl_DateInput *)(v->parent()))->fl_popcal ();
+	return;
+}
+
+
+Fl_DateInput::Fl_DateInput (int X,int Y,int W,int H, char *L)
+: Fl_Group (X, Y, W, H, 0)
+{
+	Btn = new Fl_Button (X + W - H + 1, Y + 1, H - 2, H - 2);
+	(new Fl_Pixmap (cal_16))->label (Btn);
+	Btn->callback ((Fl_Callback *)btnDateInput_cb, 0);
+	Input = new Fl_Input (X, Y, W-H, H, L);
+
+	popcalfmt_ = 0;
+	Cal = 0;
+	end();
+}
+
+void Fl_DateInput::align (Fl_Align how)
+{
+	Input->align(how);
+}
+
+// DateInput value is contained in the Input widget
+
+void Fl_DateInput::value( const char *s )
+{
+	Input->value (s);
+}
+
+const char *Fl_DateInput::value()
+{
+	return (Input->value ());
+}
+
+
+void Fl_DateInput::textfont(int tf)
+{
+	Input->textfont (tf);
+}
+
+void Fl_DateInput::textsize(int sz)
+{
+	Input->textsize (sz);
+}
+
+void Fl_DateInput::labelfont(int fnt)
+{
+	Input->labelfont(fnt);
+}
+
+void Fl_DateInput::labelsize(int size)
+{
+	Input->labelsize(size);
+}
+
+void Fl_DateInput::labelcolor(int clr)
+{
+	Input->labelcolor(clr);
+}
+
+void Fl_DateInput::format (int fmt)
+{
+	switch (fmt) {
+		case 0: 
+		case 1: 
+		case 2:
+		case 3:
+		case 4: 
+			popcalfmt_ = fmt; 
+			break;
+		default : 
+			popcalfmt_ = 0;
+	}
+}
+
+void Fl_DateInput::take_focus() {
+	Input->take_focus();
+}
diff --git a/src/combo.cxx b/src/combo.cxx
new file mode 100644
index 0000000..ad53494
--- /dev/null
+++ b/src/combo.cxx
@@ -0,0 +1,351 @@
+//======================================================================
+// combo.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// xmlrpc interface to fldigi
+//
+// fetches current list of modem types from fldigi
+// fetches current modem in use in fldigi
+// sets fldigi modem-by-name when required
+//
+//======================================================================
+#include "combo.h"
+
+void popbrwsr_cb (Fl_Widget *v, long d);
+
+Fl_PopBrowser::Fl_PopBrowser (int X, int Y, int W, int H, retvals R)
+: Fl_Window (X, Y, W, H, "")
+{
+	Rvals = R;
+	hRow  = H-9;
+	wRow  = W;
+	clear_border();
+	box(FL_BORDER_BOX);
+	popbrwsr = new Fl_Select_Browser(0,0,wRow,hRow,0);
+	popbrwsr->callback ( (Fl_Callback*)popbrwsr_cb);
+	parent = 0;
+	end();
+}
+
+Fl_PopBrowser::~Fl_PopBrowser ()
+{
+	if (popbrwsr) delete popbrwsr;
+}
+
+int Fl_PopBrowser::handle(int event)
+{
+	if (!Fl::event_inside( child(0) ) && event == FL_PUSH) {
+		pophide();
+		return 1;
+	}
+	return Fl_Group::handle(event);
+}
+
+void Fl_PopBrowser::add(char *s, void *d)
+{
+	popbrwsr->add(s,d);
+}
+
+void Fl_PopBrowser::clear()
+{
+	popbrwsr->clear();
+}
+
+void Fl_PopBrowser::sort()
+{
+	return;
+}
+
+void Fl_PopBrowser::popshow (int x, int y)
+{
+	int nRows = popbrwsr->size();
+	int height = (nRows > 10 ? 10 : nRows)*hRow + 4;
+	if (nRows == 0) return;
+	popbrwsr->resize (0, 0, wRow, height);
+	resize (x, y, wRow, height);
+	// locate first occurance of Output string value in the list
+	// and display that if found
+	int i = 0;
+	while (	i < parent->listsize &&
+		   strcasecmp (
+					   parent->Output->value(),
+					   parent->datalist[i]->s ) != 0
+		   ) i++;
+	if (i > parent->listsize) i = 0;
+	show ();
+	popbrwsr->topline (i+1);
+
+	Fl::grab(this);
+}
+
+void Fl_PopBrowser::pophide ()
+{
+	hide ();
+	Fl::release();
+}
+
+void Fl_PopBrowser::popbrwsr_cb_i (Fl_Widget *v, long d)
+{
+	Fl_PopBrowser *me = (Fl_PopBrowser *)(v->parent());
+	//  Fl_Output *tgt = me->Rvals.Inp;
+	Fl_Input *tgt = me->Rvals.Inp;
+	// update the return values
+	if (tgt) {
+		int row = (me->popbrwsr)->value();
+		if (row > 0) {
+			tgt->value ((me->popbrwsr)->text (row));
+			me->Rvals.retval = (me->popbrwsr)->data (row);
+			*(me->Rvals.idx) = row;
+		}
+	}
+	me->pophide();
+	// user selected an item from the browser list, so execute the
+	// callback if one is registered.
+	if (me->parent)
+		(me->parent)->do_callback();
+	return;
+}
+
+void popbrwsr_cb (Fl_Widget *v, long d)
+{
+	((Fl_PopBrowser *)(v))->popbrwsr_cb_i (v, d);
+	return;
+}
+
+/* XPM Select_Browser Label */
+static const char *brws_12[] = {
+	/* width height num_colors chars_per_pixel */
+	"    12    12        3            1",
+	/* colors */
+	". c #000000",
+	"d c none",
+	"e c #ffffff",
+	/* pixels */
+	"dddddddddddd",
+	"dddddddddddd",
+	"dddddddddddd",
+	"............",
+	"d..........d",
+	"dd........dd",
+	"ddd......ddd",
+	"dddd....dddd",
+	"ddddd..ddddd",
+	"dddddddddddd",
+	"dddddddddddd",
+	"dddddddddddd",
+};
+
+
+void Fl_ComboBox::fl_popbrwsr(Fl_Widget *p)
+{
+	Fl_Widget *who = this, *parent;
+	// compute the x,y position for the pop-up browser window
+	// x() and y() are locations relative to the current window
+	// also need to know where the root window for the application
+	// to compute the screen x,y position of the popup
+	int xpos = who->x(), ypos = who->h() + who->y();
+	parent = who;
+	while (parent) {
+		who = parent;
+		parent = parent->parent();
+		if (parent == 0) {
+			xpos += who->x();
+			ypos += who->y();
+		}
+	}
+	if (Brwsr == 0) {
+		Brwsr = new Fl_PopBrowser(xpos, ypos, width, height, R);
+	}
+	// pass the calling widget to the popup browser so that the
+	// correct callback function can be called when the user selects an item
+	// from the browser list
+	Brwsr->parent = (Fl_ComboBox *) p;
+	Brwsr->popshow(xpos, ypos);
+	return;
+}
+
+void btnComboBox_cb (Fl_Widget *v, void *d)
+{
+	Fl_Widget *p = v->parent();
+	((Fl_ComboBox *)p)->fl_popbrwsr (p);
+	return;
+}
+
+
+Fl_ComboBox::Fl_ComboBox (int X,int Y,int W,int H, const char *L)
+: Fl_Group (X, Y, W, H, L)
+{
+	width = W; height = H;
+	Btn = new Fl_Button (X + W - 18, Y + 1, 18, H - 2);
+	(new Fl_Pixmap (brws_12))->label (Btn);
+	Btn->callback ((Fl_Callback *)btnComboBox_cb, 0);
+	//  Output = new Fl_Output (X, Y, W-18, H);
+	Output = new Fl_Input (X, Y, W-18, H);
+	Brwsr = 0;
+	datalist = new datambr *[FL_COMBO_LIST_INCR];
+	maxsize = FL_COMBO_LIST_INCR;
+	for (int i = 0; i < FL_COMBO_LIST_INCR; i++) datalist[i] = 0;
+	listsize = 0;
+	listtype = 0;
+	end();
+	R.Inp = Output;
+	R.retval = retdata;
+	R.idx = &idx;
+}
+
+void Fl_ComboBox::type (int t)
+{
+	listtype = t;
+}
+
+void Fl_ComboBox::readonly()
+{
+	Output->type(FL_NORMAL_OUTPUT);
+}
+
+// ComboBox value is contained in the Output widget
+
+void Fl_ComboBox::value( const char *s )
+{
+	int i;
+	if ((listtype & FL_COMBO_UNIQUE_NOCASE) == FL_COMBO_UNIQUE_NOCASE) {
+		for (i = 0; i < listsize; i++) {
+			if (strcasecmp (s, datalist[i]->s) == 0)
+				break;
+		}
+	} else {
+		for (i = 0; i < listsize; i++) {
+			if (strcmp (s, datalist[i]->s) == 0)
+				break;
+		}
+	}
+	if ( i < listsize)
+		Output->value(datalist[i]->s);
+}
+
+void Fl_ComboBox::index(int i)
+{
+	if (i >= 0 && i < listsize)
+		Output->value( datalist[i]->s);
+}
+
+
+const char *Fl_ComboBox::value()
+{
+	return (Output->value ());
+}
+
+int Fl_ComboBox::index() {
+	return idx;
+}
+
+void * Fl_ComboBox::data() {
+	return retdata;
+}
+
+void Fl_ComboBox::add( const char *s, void * d)
+{
+	if (Brwsr == 0) {
+		Brwsr = new Fl_PopBrowser(0, 0, width, height, R);
+	}
+	// test for uniqueness of entry if required
+	if ((listtype & FL_COMBO_UNIQUE) == FL_COMBO_UNIQUE) {
+		if ((listtype & FL_COMBO_UNIQUE_NOCASE) == FL_COMBO_UNIQUE_NOCASE) {
+			for (int i = 0; i < listsize; i++) {
+				if (strcasecmp (s, datalist[i]->s) == 0)
+					return;
+			}
+		} else {
+			for (int i = 0; i < listsize; i++) {
+				if (strcmp (s, datalist[i]->s) == 0)
+					return;
+			}
+		}
+	}
+	// not unique or not in list, so add this entry
+	datalist[listsize] = new datambr;
+	datalist[listsize]->s = new char [strlen(s) + 1];
+	datalist[listsize]->s[0] = 0;
+	strcpy (datalist[listsize]->s, s);
+	datalist[listsize]->d = d;
+	Brwsr->add(datalist[listsize]->s,d);
+	listsize++;
+	if (listsize == maxsize) {
+		int nusize = maxsize + FL_COMBO_LIST_INCR;
+		datambr **temparray = new datambr *[nusize];
+		for (int i = 0; i < listsize; i++) temparray[i] = datalist[i];
+		delete [] datalist;
+		datalist = temparray;
+		maxsize = nusize;
+	}
+}
+
+void Fl_ComboBox::clear()
+{
+	if (Brwsr == 0)
+		Brwsr = new Fl_PopBrowser(0, 0, width, height, R);
+	else
+		Brwsr->clear();
+
+	if (listsize == 0) return;
+	for (int i = 0; i < listsize; i++) {
+		delete [] datalist[i]->s;
+		delete datalist[i];
+	}
+	listsize = 0;
+}
+
+int DataCompare( const void *x1, const void *x2 )
+{
+	int cmp;
+	datambr *X1, *X2;
+	X1 = *(datambr **)(x1);
+	X2 = *(datambr **)(x2);
+	cmp = strcasecmp (X1->s, X2->s);
+	if (cmp < 0)
+		return -1;
+	if (cmp > 0)
+		return 1;
+	return 0;
+}
+
+void Fl_ComboBox::sort() {
+	Brwsr->clear ();
+	qsort (&datalist[0],
+		   listsize,
+		   sizeof (datambr *),
+		   DataCompare);
+	for (int i = 0; i < listsize; i++)
+		Brwsr->add (datalist[i]->s, datalist[i]->d);
+}
+
+void Fl_ComboBox::textfont (int fnt)
+{
+	Output->textfont (fnt);
+}
+
+void Fl_ComboBox::textsize (uchar n)
+{
+	Output->textsize (n);
+}
+
+
+
diff --git a/src/config.cxx b/src/config.cxx
new file mode 100644
index 0000000..83cd71c
--- /dev/null
+++ b/src/config.cxx
@@ -0,0 +1,155 @@
+//======================================================================
+// config.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+#include <string>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+//#include <mem.h>
+
+#include "FL/Fl.H"
+
+#include "config.h"
+#include "net_ui.h"
+#include "loglist.h"
+#include "netshared.h"
+
+extern loglist callinlist;
+
+char chP1[] = "A";
+char chP2[] = "B";
+char chP3[] = "C";
+char chAuto = 'n';
+char szP1[256] = "";
+char szP2[256] = "";
+char szP3[256] = "";
+
+Fl_Color  fgColors[] = {FL_BLACK, FL_BLACK, FL_WHITE, FL_YELLOW, FL_WHITE};
+Fl_Color  bgColors[] = {FL_BLACK, FL_WHITE, FL_BLUE, FL_DARK_GREEN, FL_DARK_RED};
+
+int disp_new_login = 0;
+int open_editor = 0;
+int callin_is_up = 0;
+
+void readConfig ()
+{
+	std::string filename = selected_file;
+	FILE *cfgFile;
+	int fg1,fg2,fg3,fg4, bg1,bg2,bg3,bg4;
+	size_t p = filename.rfind(".csv");
+	if (p != std::string::npos) filename.erase(p);
+	filename.append(".cfg");
+	cfgFile = fopen (filename.c_str(), "r");
+	if (cfgFile) {
+		fscanf (cfgFile,
+				"%c%c%c%c\t%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
+				chP1, chP2, chP3, &chAuto,
+				szP1, szP2, szP3,
+				&fg1, &fg2, &fg3, &fg4, &bg1, &bg2, &bg3, &bg4);
+		fgColors[1] = (Fl_Color)fg1;
+		fgColors[2] = (Fl_Color)fg2;
+		fgColors[3] = (Fl_Color)fg3;
+		fgColors[4] = (Fl_Color)fg4;
+		bgColors[1] = (Fl_Color)bg1;
+		bgColors[2] = (Fl_Color)bg2;
+		bgColors[3] = (Fl_Color)bg3;
+		bgColors[4] = (Fl_Color)bg4;
+		fscanf (cfgFile, "%d\t%d\t%d\n", &disp_new_login, &open_editor, &callin_is_up);
+		fclose (cfgFile);
+	}
+}
+
+void writeConfig ()
+{
+	std::string filename = selected_file;
+	FILE *cfgFile;
+	size_t p = filename.rfind(".csv");
+	if (p != std::string::npos) filename.erase(p);
+	filename.append(".cfg");
+	cfgFile = fopen (filename.c_str(), "w");
+	if (!*szP1) strcpy(szP1, "none");
+	if (!*szP2) strcpy(szP2, "none");
+	if (!*szP3) strcpy(szP3, "none");
+	if (cfgFile) {
+		fprintf (cfgFile,
+				 "%c%c%c%c\t%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
+				 chP1[0], chP2[0], chP3[0], chAuto,
+				 szP1, szP2, szP3,
+				 fgColors[1], fgColors[2], fgColors[3], fgColors[4],
+				 bgColors[1], bgColors[2], bgColors[3], bgColors[4]);
+		fprintf(cfgFile,"%d\t%d\t%d\n", disp_new_login, open_editor, callin_is_up);
+		fclose(cfgFile);
+	}
+}
+
+static Fl_Window *cfgDialog = 0;
+
+void cbConfig ()
+{
+	if (!cfgDialog)
+		cfgDialog = configDialog ();
+	cfgP1->value (chP1);
+	cfgP2->value (chP2);
+	cfgP3->value (chP3);
+	inpStatesList1->value(szP1);
+	inpStatesList2->value(szP2);
+	inpStatesList3->value(szP3);
+	if (chAuto == 'y' || chAuto == 'Y')
+		chkAutoPriority->value (1);
+	else
+		chkAutoPriority->value (0);
+	cfgDialog->show();
+}
+
+void cbCloseConfig ()
+{
+	strncpy (chP1, cfgP1->value(), 1);
+	if (strlen(chP1) == 0) chP1[0] = ' ';
+	strncpy (chP2, cfgP2->value(), 1);
+	if (strlen(chP2) == 0) chP2[0] = ' ';
+	strncpy (chP3, cfgP3->value(), 1);
+	if (strlen(chP3) == 0) chP3[0] = ' ';
+
+	strncpy (szP1, inpStatesList1->value(), 255);
+	strncpy (szP2, inpStatesList2->value(), 255);
+	strncpy (szP3, inpStatesList3->value(), 255);
+
+	callinlist.setPri_1 (chP1[0]);
+	callinlist.setPri_2 (chP2[0]);
+	callinlist.setPri_3 (chP3[0]);
+
+	if (chkAutoPriority->value() == 1) {
+		chAuto = 'y';
+		callinlist.AutoPriority (1);
+	} else {
+		chAuto = ' ';
+		callinlist.AutoPriority (0);
+	}
+	
+	writeConfig ();
+	
+	cfgDialog->hide ();
+
+}
diff --git a/src/config.h.in b/src/config.h.in
new file mode 100644
index 0000000..315db59
--- /dev/null
+++ b/src/config.h.in
@@ -0,0 +1,413 @@
+/* src/config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Build platform */
+#undef BUILD_BUILD_PLATFORM
+
+/* Compiler */
+#undef BUILD_COMPILER
+
+/* Configure arguments */
+#undef BUILD_CONFIGURE_ARGS
+
+/* Build date */
+#undef BUILD_DATE
+
+/* Build host */
+#undef BUILD_HOST
+
+/* Host platform */
+#undef BUILD_HOST_PLATFORM
+
+/* Target platform */
+#undef BUILD_TARGET_PLATFORM
+
+/* Build user */
+#undef BUILD_USER
+
+/* Define to 1 if the `closedir' function returns void instead of `int'. */
+#undef CLOSEDIR_VOID
+
+/* FLTK API major version */
+#undef FLNET_FLTK_API_MAJOR
+
+/* FLTK API minor version */
+#undef FLNET_FLTK_API_MINOR
+
+/* FLTK version */
+#undef FLTK_BUILD_VERSION
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define to 1 if we have clock_gettime */
+#undef HAVE_CLOCK_GETTIME
+
+/* Define to 0 if not using dbg::stack */
+#undef HAVE_DBG_STACK
+
+/* Define to 1 if you have the <dev/ppbus/ppi.h> header file. */
+#undef HAVE_DEV_PPBUS_PPI_H
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_DIRENT_H
+
+/* Define to 1 if we have dlopen */
+#undef HAVE_DLOPEN
+
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#undef HAVE_GETADDRINFO
+
+/* Define to 1 if you have the `gethostbyname' function. */
+#undef HAVE_GETHOSTBYNAME
+
+/* Define to 1 if you have the `gmtime_r' function. */
+#undef HAVE_GMTIME_R
+
+/* Define to 1 if you have the `hstrerror' function. */
+#undef HAVE_HSTRERROR
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <linux/ppdev.h> header file. */
+#undef HAVE_LINUX_PPDEV_H
+
+/* Define to 1 if you have the `localtime_r' function. */
+#undef HAVE_LOCALTIME_R
+
+/* Define to 1 if you have the `memmove' function. */
+#undef HAVE_MEMMOVE
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the `mkdir' function. */
+#undef HAVE_MKDIR
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+#undef HAVE_NDIR_H
+
+/* Define to 1 if you have the <netdb.h> header file. */
+#undef HAVE_NETDB_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the <regex.h> header file. */
+#undef HAVE_REGEX_H
+
+/* Define to 1 if you have the `select' function. */
+#undef HAVE_SELECT
+
+/* Define to 1 if we have sem_timedwait */
+#undef HAVE_SEM_TIMEDWAIT
+
+/* Define to 1 if we have sem_unlink */
+#undef HAVE_SEM_UNLINK
+
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the `socket' function. */
+#undef HAVE_SOCKET
+
+/* Define to 1 if you have the `socketpair' function. */
+#undef HAVE_SOCKETPAIR
+
+/* Define to 1 if stdbool.h conforms to C99. */
+#undef HAVE_STDBOOL_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strcasestr' function. */
+#undef HAVE_STRCASESTR
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the `strftime' function. */
+#undef HAVE_STRFTIME
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strlcpy' function. */
+#undef HAVE_STRLCPY
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the `strrchr' function. */
+#undef HAVE_STRRCHR
+
+/* Define to 1 if you have the `strstr' function. */
+#undef HAVE_STRSTR
+
+/* Define to 1 if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_DIR_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+   */
+#undef HAVE_SYS_NDIR_H
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+#undef HAVE_SYS_UTSNAME_H
+
+/* Define to 1 if you have the <termios.h> header file. */
+#undef HAVE_TERMIOS_H
+
+/* Define to 1 if you have the `uname' function. */
+#undef HAVE_UNAME
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `unsetenv' function. */
+#undef HAVE_UNSETENV
+
+/* Define to 1 if you have the <values.h> header file. */
+#undef HAVE_VALUES_H
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define to 1 if the system has the type `_Bool'. */
+#undef HAVE__BOOL
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* Define to the type of arg 1 for `select'. */
+#undef SELECT_TYPE_ARG1
+
+/* Define to the type of args 2, 3 and 4 for `select'. */
+#undef SELECT_TYPE_ARG234
+
+/* Define to the type of arg 5 for `select'. */
+#undef SELECT_TYPE_ARG5
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to 1 if we are using x */
+#undef USE_X
+
+/* Version number of package */
+#undef VERSION
+
+/* x version */
+#undef X_BUILD_VERSION
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
+   #define below would cause a syntax error. */
+#undef _UINT32_T
+
+/* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>,
+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
+   #define below would cause a syntax error. */
+#undef _UINT64_T
+
+/* Define for Solaris 2.5.1 so the uint8_t typedef from <sys/synch.h>,
+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
+   #define below would cause a syntax error. */
+#undef _UINT8_T
+
+/* Define to 1 if we are building on mingw */
+#undef __WOE32__
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* flnet compiler flags */
+#undef flnet_BUILD_CXXFLAGS
+
+/* flnet linker flags */
+#undef flnet_BUILD_LDFLAGS
+
+/* version string */
+#undef flnet_VERSION
+
+/* major version number */
+#undef flnet_VERSION_MAJOR
+
+/* minor version number */
+#undef flnet_VERSION_MINOR
+
+/* patch/alpha version string */
+#undef flnet_VERSION_PATCH
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to the type of a signed integer type of width exactly 16 bits if
+   such a type exists and the standard includes do not define it. */
+#undef int16_t
+
+/* Define to the type of a signed integer type of width exactly 32 bits if
+   such a type exists and the standard includes do not define it. */
+#undef int32_t
+
+/* Define to the type of a signed integer type of width exactly 64 bits if
+   such a type exists and the standard includes do not define it. */
+#undef int64_t
+
+/* Define to the type of a signed integer type of width exactly 8 bits if such
+   a type exists and the standard includes do not define it. */
+#undef int8_t
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to the type of an unsigned integer type of width exactly 16 bits if
+   such a type exists and the standard includes do not define it. */
+#undef uint16_t
+
+/* Define to the type of an unsigned integer type of width exactly 32 bits if
+   such a type exists and the standard includes do not define it. */
+#undef uint32_t
+
+/* Define to the type of an unsigned integer type of width exactly 64 bits if
+   such a type exists and the standard includes do not define it. */
+#undef uint64_t
+
+/* Define to the type of an unsigned integer type of width exactly 8 bits if
+   such a type exists and the standard includes do not define it. */
+#undef uint8_t
+
+/* Define to empty if the keyword `volatile' does not work. Warning: valid
+   code using `volatile' can become incorrect without. Disable with care. */
+#undef volatile
diff --git a/src/csv_dbase/csvdb.cxx b/src/csv_dbase/csvdb.cxx
new file mode 100644
index 0000000..1437aeb
--- /dev/null
+++ b/src/csv_dbase/csvdb.cxx
@@ -0,0 +1,400 @@
+//======================================================================
+// csvdb.cxx
+//
+// Authors:
+//
+// Copyright (C) 2013, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+#include "csvdb.h"
+
+enum FIELDS {
+	PREFIX,AREA,SUFFIX,CALLSIGN,NAME,NETNBR,LOGDATE,NBRLOGINS,STATUS,JOINED,
+	FNAME,LNAME,ADDR,CITY,STATE,ZIP,PHONE,BIRTHDATE,SPOUSE,SP_BIRTH,
+	COMMENT1,COMMENT2,EMAIL,PREVDATE };
+
+//szFields on 10 char spacing
+static string szFields = "\
+PREFIX    AREA      SUFFIX    CALLSIGN  \
+NAME      NETNBR    LOGDATE   NBRLOGINS \
+STATUS    JOINED    FNAME     LNAME     \
+ADDR      CITY      STATE     ZIP       \
+PHONE     BIRTHDATE SPOUSE    SP_BIRTH  \
+COMMENT1  COMMENT2  EMAIL     PREVDATE  ";
+
+const char *csvdb::csvFields = "\
+PREFIX,AREA,SUFFIX,CALLSIGN,NAME,NETNBR,LOGDATE,NBRLOGINS,STATUS,JOINED,\
+FNAME,LNAME,ADDR,CITY,STATE,ZIP,PHONE,BIRTHDATE,SPOUSE,SP_BIRTH,\
+COMMENT1,COMMENT2,EMAIL,PREVDATE";
+
+bool csvdb::mapheader(string header)
+{
+	bool ok = false;
+	size_t p;
+	string hfield;
+	for (int i = 0; i < 24; fpos[i++] = -1);
+	for (int i = 0; i < 24; i++) {
+		if (header.empty()) break;
+		field( header, hfield);
+		p = szFields.find(hfield);
+		if (p != string::npos) {
+			fpos[i] = p/10;
+			ok = true;
+		}
+	}
+	return ok;
+}
+
+static int compfunc(const void *r1, const void *r2) {
+	callsigns *p1 = (callsigns *)r1;
+	callsigns *p2 = (callsigns *)r2;
+	// sort by area / prefix / suffix
+	int comp = p1->area.compare(p2->area);
+	if (comp == 0) {
+		comp = p1->prefix.compare(p2->prefix);
+		if (comp == 0)
+			comp = p1->suffix.compare(p2->suffix);
+	}
+	return comp;
+}
+
+//----------------------------------------------------------------------
+// split separates a comma delimited string into the record components
+// string may be simple comma separated, quoted-comma delimited or a
+// mix of the two.  The csv file may be opened by a 3rd party program
+// such as gnumeric or Excel and then resaved as a csv file.
+// field may appear as:
+// field,    first field unquoted
+// ,field    last field unquoted
+// ,"field a b c",
+// ,"field ""a"" b c",
+// ,"field a, b, c",
+// "field",  first field quoted
+// ,"field"   last field quoted
+//
+// field extracts the leading field in the referenced string
+// the leading field is removed from the string
+//----------------------------------------------------------------------
+void csvdb::field(string &s, string &fld)
+{
+	// empty reference string ==> empty field
+	if (s.empty()) {
+		fld.clear();
+		return;
+	}
+	size_t p;
+	// remove leading comma
+	if (s[0] == ',') {
+		s.erase(0, 1);
+	}
+	if (s[0] == '"') {
+		// field is quoted
+		s.erase(0, 1);
+		p = s.find("\","); // find end of field
+		if (p == string::npos) {
+			p = s.find("\""); // possibly last record
+			if ( p != string::npos) {
+				fld = s.substr(0, p);
+				s.clear();
+				return;
+			} else {
+				s.clear(); // error in reference line
+				fld.clear();
+				return;
+			}
+		}
+		if (p == 0) {
+			fld.clear();
+			s.erase(0, 1);
+		} else {
+			fld = s.substr(0, p);
+			s.erase(0, p+1);
+		}
+	} else {
+		// field is only comma delimited
+		if (s[0] == ',') {
+			fld.clear();
+		} else {
+			p = s.find(",");
+			if (p == string::npos) {
+				fld = s;
+				s.clear();
+			} else {
+				fld = s.substr(0, p);
+				s.erase(0, p);
+			}
+		}
+	}
+	// change double quotes to single
+	while ((p = fld.find("\"\"")) != string::npos)
+		fld.erase(p, 1);
+}
+
+bool csvdb::split(string s, csvRecord &rec)
+{
+	clearrec(rec);
+
+	if (s[0] == ',')
+		s.insert(0,","); // first field is empty !
+
+	for (int i = 0; i < 24; i++) {
+		switch (fpos[i]) {
+			case -1 : break;
+			case PREFIX :		field(s, rec.prefix); break;
+			case AREA :			field(s, rec.area); break;
+			case SUFFIX :		field(s, rec.suffix); break;
+			case CALLSIGN :		field(s, rec.callsign); break;
+			case NAME :			field(s, rec.name); break;
+			case NETNBR :		field(s, rec.netnbr); break;
+			case LOGDATE :		field(s, rec.logdate); break;
+			case NBRLOGINS :	field(s, rec.nbrlogins); break;
+			case STATUS :		field(s, rec.status); break;
+			case JOINED :		field(s, rec.joined); break;
+			case FNAME :		field(s, rec.fname); break;
+			case LNAME :		field(s, rec.lname); break;
+			case ADDR :			field(s, rec.addr); break;
+			case CITY :			field(s, rec.city); break;
+			case STATE :		field(s, rec.state); break;
+			case ZIP :			field(s, rec.zip); break;
+			case PHONE :		field(s, rec.phone); break;
+			case BIRTHDATE :	field(s, rec.birthdate); break;
+			case SPOUSE :		field(s, rec.spouse); break;
+			case SP_BIRTH :		field(s, rec.sp_birth); break;
+			case COMMENT1 :		field(s, rec.comment1); break;
+			case COMMENT2 :		field(s, rec.comment2); break;
+			case EMAIL :		field(s, rec.email); break;
+			case PREVDATE :		field(s, rec.prevdate);
+		}
+	}
+	if (rec.prefix.empty() && rec.area.empty() && rec.suffix.empty())
+		return false;
+	if (rec.callsign.empty())
+		rec.callsign.assign(trim(rec.prefix)).append(trim(rec.area)).append(trim(rec.suffix));
+	return true;
+}
+
+int csvdb::load()
+{
+#define LINESIZE 1024
+	char buff[LINESIZE + 1];
+	fstream dbfile(dbfilename.c_str(), ios::in | ios::binary);
+	if (!dbfile) return 0;
+
+	csvRecord rec;
+	dbrecs.clear();
+
+	// read & map header line
+	memset(buff, 0, LINESIZE + 1);
+	dbfile.getline(buff, LINESIZE);
+	if (!mapheader(buff)) return -1;
+
+	// header passes test, read rest of file
+	string sbuff;
+	while (dbfile) {
+		memset(buff, 0, LINESIZE + 1);
+		dbfile.getline(buff, LINESIZE);
+		if (dbfile && strlen(buff)) {
+			sbuff = buff;
+			if (split(buff, rec)) dbrecs.push_back(rec);
+		}
+	}
+	dbfile.close();
+	return 0;
+}
+
+string csvdb::trim(string s)
+{
+	string trimmed;
+	trimmed.assign(s);
+	while (trimmed.length() && trimmed[0] == ' ') trimmed.erase(0);
+	while (trimmed.length() && trimmed[trimmed.length()-1] == ' ')
+		trimmed.erase(trimmed.length() - 1);
+	return trimmed;
+}
+
+string csvdb::delimit(string s)
+{
+	static string delimited;
+	bool quoted = false;
+	delimited.assign(trim(s));
+	size_t p = delimited.find("\"");
+	while (p != string::npos) {
+		delimited.insert(p, "\"");
+		quoted = true;
+		p = delimited.find("\"", p+2);
+	}
+	if (delimited.find(" ") != string::npos ||
+		delimited.find(",") != string::npos ||
+		delimited.find(";") != string::npos ||
+		delimited.find("'") != string::npos) quoted = true;
+	if (quoted) {
+		delimited.insert(0, "\"");
+		delimited.append("\"");
+	}
+	return delimited;
+}
+
+//----------------------------------------------------------------------
+// join combines the separate elements of a record into a comma
+// separated string.  Quotes are used to delimit a field if that field
+// contains an embedded comma or a ".  Quotes within a field are saved
+// as a double quote.  All fields which contain white space including the
+// quote, space, comma etc are quoted.  Trailing and leading spaces are
+// removed to conserve file size
+//----------------------------------------------------------------------
+void csvdb::join(csvRecord &rec, string &str)
+{
+	str.assign(delimit(rec.prefix)).append(",");
+	str.append(delimit(rec.area)).append(",");
+	str.append(delimit(rec.suffix)).append(",");
+	str.append(delimit(rec.callsign)).append(",");
+	str.append(delimit(rec.name)).append(",");
+	str.append(delimit(rec.netnbr)).append(",");
+	str.append(delimit(rec.logdate)).append(",");
+	str.append(delimit(rec.nbrlogins)).append(",");
+	str.append(delimit(rec.status)).append(",");
+	str.append(delimit(rec.joined)).append(",");
+	str.append(delimit(rec.fname)).append(",");
+	str.append(delimit(rec.lname)).append(",");
+	str.append(delimit(rec.addr)).append(",");
+	str.append(delimit(rec.city)).append(",");
+	str.append(delimit(rec.state)).append(",");
+	str.append(delimit(rec.zip)).append(",");
+	str.append(delimit(rec.phone)).append(",");
+	str.append(delimit(rec.birthdate)).append(",");
+	str.append(delimit(rec.spouse)).append(",");
+	str.append(delimit(rec.sp_birth)).append(",");
+	str.append(delimit(rec.comment1)).append(",");
+	str.append(delimit(rec.comment2)).append(",");
+	str.append(delimit(rec.email)).append(",");
+	str.append(delimit(rec.prevdate));
+}
+
+int csvdb::save()
+{
+	fstream dbfile(dbfilename.c_str(), ios::out | ios::binary);
+	if (!dbfile) return -1;
+
+	struct callsigns *clist = (struct callsigns *) new callsigns[dbrecs.size()];
+
+	if(!clist) {
+		printf("In Function %s near Line %d: Allocation Error", __func__, __LINE__);
+		return -1;
+	}
+
+	for (size_t n = 0; n < dbrecs.size(); n++) {
+		clist[n].prefix = dbrecs[n].prefix;
+		clist[n].area   = dbrecs[n].area;
+		clist[n].suffix = dbrecs[n].suffix;
+		clist[n].nbr = n;
+	}
+	qsort ( &(clist[0]), dbrecs.size(), sizeof(callsigns), compfunc);
+
+	// csv file header line
+	dbfile << csvFields << "\n";
+	// records
+	string line;
+	for (size_t n = 0; n < dbrecs.size(); n++) {
+		join(dbrecs[clist[n].nbr], line);
+		dbfile << line << "\n";
+	}
+
+	dbfile.close();
+
+	delete [] clist;
+
+	return 0;
+}
+
+void csvdb::clearrec(csvRecord &rec)
+{
+	rec.prefix.clear();
+	rec.area.clear();
+	rec.suffix.clear();
+	rec.callsign.clear();
+	rec.name.clear();
+	rec.netnbr.clear();
+	rec.logdate.clear();
+	rec.nbrlogins.clear();
+	rec.status.clear();
+	rec.joined.clear();
+	rec.fname.clear();
+	rec.lname.clear();
+	rec.addr.clear();
+	rec.city.clear();
+	rec.state.clear();
+	rec.zip.clear();
+	rec.phone.clear();
+	rec.birthdate.clear();
+	rec.spouse.clear();
+	rec.sp_birth.clear();
+	rec.comment1.clear();
+	rec.comment2.clear();
+	rec.email.clear();
+	rec.prevdate.clear();
+}
+
+int csvdb::get(size_t n, csvRecord &rec)
+{
+	rec.prefix = rec.area = rec.suffix = rec.callsign = rec.name =
+	rec.netnbr = rec.logdate = rec.nbrlogins = rec.status = rec.joined =
+	rec.fname = rec.lname = rec.addr = rec.city = rec.state =
+	rec.zip = rec.phone = rec.birthdate = rec.spouse = rec.sp_birth =
+	rec.comment1 = rec.comment2 = rec.email = rec.prevdate = "";
+
+	if (n < 0 || n >= dbrecs.size()) return -1;
+
+	if (!dbrecs.size()) return -2;
+
+	rec = dbrecs[n];
+	
+	cur_recnbr = n;
+	
+	return 0;
+}
+
+
+int csvdb::put(size_t recnbr, csvRecord &rec)
+{
+	dbrecs[recnbr] = rec;
+	return 0;
+}
+
+
+int csvdb::add(csvRecord &rec)
+{
+	dbrecs.push_back(rec);
+	return 0;
+}
+
+
+int csvdb::erase(size_t n)
+{
+	csvRecord rec;
+	get(n, rec);
+	vector<csvRecord>::iterator p = dbrecs.begin();
+	while (p != dbrecs.end()) {
+		if (p->callsign == rec.callsign) {
+			dbrecs.erase(p);
+			return 0;
+		}
+		p++;
+	}
+	return 1;
+}
diff --git a/src/date.cxx b/src/date.cxx
new file mode 100644
index 0000000..29c1f14
--- /dev/null
+++ b/src/date.cxx
@@ -0,0 +1,372 @@
+//======================================================================
+// combo.cxx
+//
+// Authors:
+//
+// Copyright (C) 1998, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+
+#include "date.h"
+
+const int Date::mdays[] = 
+  { 0, 31, 28, 31, 30,  31,  30,  31,  31,  30,  31,  30, 31 };
+
+const int Date::jdays[2][13] = {
+  { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 },
+  { 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }
+};
+
+const char *Date::month_name[] =
+{
+  "January",
+  "Febuary",
+  "March",
+  "April",
+  "May",
+  "June",
+  "July",
+  "August",
+  "September",
+  "October",
+  "November",
+  "December"
+};
+
+void Date::today()
+{
+  time_t t;
+  struct tm *now;
+  time( &t );
+  now = localtime( &t );
+  year = now->tm_year + 1900;
+  month = now->tm_mon + 1;
+  day = now->tm_mday;
+}
+
+Date::Date()
+{
+  today();
+  fmt = 0;
+}
+
+Date::Date( int m, int d, int y )
+{
+  setDate( m, d, y );
+  fmt = 1;
+}
+
+void Date::setDate( int mm, int dd, int yy )
+{
+  if( isvalid( mm, dd, yy ) ) {
+    year = yy; month = mm; day = dd;
+  } else
+    today();
+}
+
+void Date::setDate( Date &dt )
+{
+  year = dt.year;
+  month = dt.month;
+  day = dt.day;
+}
+
+void Date::setFormat( int iFmt )
+{
+  fmt = iFmt;
+}
+
+void Date::Year( int y )
+{
+  year = y;
+}
+
+int Date::Year()
+{
+  return year;
+}
+
+void Date::Month( int m )
+{
+  month = m;
+}
+
+int Date::Month()
+{
+  return month;
+}
+
+void Date::Day( int d )
+{
+  day = d;
+}
+
+int Date::Day()
+{
+  return day;
+}
+
+bool Date::leapYear( int y )
+{
+  if( y % 400 == 0 || ( y % 100 != 0 && y % 4 == 0 ) )
+    return true;
+  return false;
+}
+
+
+bool Date::isvalid( int m, int d, int y )
+{
+  if( y > 2035 ) return false;
+  if( m < 1 || m > 12 ) return false;
+  if( d < 1 ) return false;
+  if( leapYear( y ) ){
+    if( m == 2 && d > 29 )
+      return false;
+    else
+      return true;
+  }
+  if( d > mdays[m] ) return false;
+  return true;
+}
+
+int Date::daysinmonth (int month, int leap)
+{
+  /* Validate the month. */
+  if (month < JANUARY || month > DECEMBER)
+    return -1;
+  
+  /* Return 28, 29, 30, or 31 based on month/leap. */
+  switch (month) {
+    case FEBRUARY:
+      return leap ? 29 : 28;
+    default:
+      return mdays[month];
+  }
+}
+
+
+int Date::dayofyear (int year, int mon, int mday)
+{
+  /* Return day of year. */
+  return mday + jdays[isleapyear (year) ? 1 : 0][mon];
+}
+
+int Date::dayofepoch (int year, int mon, int mday)
+{
+  int  doe;
+  int  era, cent, quad, rest;
+  
+  /* break down the year into 400, 100, 4, and 1 year multiples */
+  rest = year - 1;
+  quad = rest / 4;        rest %= 4;
+  cent = quad / 25;       quad %= 25;
+  era = cent / 4;         cent %= 4;
+  
+  /* set up doe */
+  doe = dayofyear (year, mon, mday);
+  doe += era * (400 * 365 + 97);
+  doe += cent * (100 * 365 + 24);
+  doe += quad * (4 * 365 + 1);
+  doe += rest * 365;
+  
+  return doe;
+}
+
+int Date::dayofweek (int year, int mon, int mday)
+{
+  return dayofepoch (year, mon, mday) % 7;
+}
+
+void Date::previous_month ()
+{
+  if (month == 1)
+    {
+      month = 12;
+      year--;
+    }
+  else
+    month--;
+
+  while ((day >= 1) && (!datevalid ()))
+    day--;
+}
+
+void Date::next_month ()
+{
+  if (month == 12)
+    {
+      month = 1;
+      year++;
+    }
+  else
+    month++;
+
+  while ((day >= 1) && (!datevalid ()))
+    day--;
+}
+
+void Date::previous_year ()
+{
+  if (month == 2 && day == 29)
+    day = 28;
+  year--;
+}
+
+void Date::next_year ()
+{
+  if (month == 2 && day == 29)
+    day = 28;
+  year++;
+}
+
+
+char *Date::szDate (int fmt)
+{
+  static char temp[20];
+  char        szMonth[10];
+  switch (fmt) {
+    case 1 :
+      sprintf (temp, "%02d/%02d/%02d",
+      month, 
+      day, 
+      year > 1999 ? year - 2000 : year - 1900);
+      break;
+    case 2 :
+      sprintf (temp, "%4d%02d%02d", year, month, day);
+      break;
+    case 3 :  
+      sprintf (temp, "%s %2d, %4d",
+      month_name[month - 1], 
+      day, 
+      year);
+      break;
+    case 4 :
+      strcpy (szMonth, month_name [month - 1]);
+      szMonth[3] = 0; 
+      sprintf (temp, "%s %2d, %4d", szMonth, day, year);
+      break;
+    case 0 :
+    default :
+      sprintf (temp, "%02d/%02d/%04d",
+      month, 
+      day,
+      year); 
+      break;
+  }      
+  return temp;
+}
+
+char *Date::szDate ()
+{
+  return szDate (fmt);
+}
+
+// operator functions
+
+ostream &operator<<( ostream &output, Date &d )
+{
+  output << d.szDate ();
+  return output;
+}
+
+bool Date::endOfMonth( int d )
+{
+  if( month == 2 && leapYear( year ) )
+    return (d == 29 );  // last day of Feb in leap year
+  else
+    return (d == mdays[ month ] );
+}
+
+void Date::helpIncrement()
+{
+  if( endOfMonth( day ) && month == 12 ) {  // end year
+    day = 1;
+    month = 1;
+    ++year;
+  } else if ( endOfMonth( day ) ) {
+    day = 1;
+    ++month;
+  } else
+    ++day;
+}
+
+Date &Date::operator++()
+{
+  helpIncrement();
+  return *this;     // reference return to create an lvalue
+}
+
+Date Date::operator++( int )
+{
+  Date temp = *this;
+  helpIncrement();
+  return temp;     // return non-increment, saved temporary object
+}
+
+const Date &Date::operator+=( int ndays )
+{
+  for( int i = 0; i < ndays; i++ )
+    helpIncrement();
+  return *this;    // enables cascading
+}
+
+
+bool Date::operator==( const Date &d )
+{
+  if( this->year != d.year ) return false;
+  if( this->month != d.month ) return false;
+  if( this->day != d.day ) return false;
+  return true;
+}
+
+bool Date::operator!=( const Date &d )
+{
+  return ( !( *this == d ) );
+}
+
+bool Date::operator<( const Date &d )
+{
+  if( this->year < d.year ) return true;
+  if( this->year > d.year ) return false;
+  if( this->month < d.month ) return true;
+  if( this->month > d.month ) return false;
+  if( this->day < d.day ) return true;
+  return false;
+}
+
+bool Date::operator>( const Date &d )
+{
+  if( *this < d ) return false;
+  if( *this == d ) return false;
+  return true;
+}
+
+void Date::operator=( const Date &d )
+{
+  this->year = d.year;
+  this->month = d.month;
+  this->day = d.day;
+}
+
+double Date::dJulian ()
+{
+  int DaysInYear = 365;
+  if (leapYear ()) DaysInYear++;
+  return ( year + 1.0 * (dayofyear (year, month, day) - 1) / DaysInYear);
+}
diff --git a/src/flnet.rc b/src/flnet.rc
new file mode 100644
index 0000000..572f4d3
--- /dev/null
+++ b/src/flnet.rc
@@ -0,0 +1,7 @@
+#include <windows.h> // include for version info constants
+
+#include "flnetrc.h"
+
+IDI_ICON ICON DISCARDABLE "flnet.ico"
+
+
diff --git a/src/icons/calendar.xpm b/src/icons/calendar.xpm
new file mode 100644
index 0000000..a32ecad
--- /dev/null
+++ b/src/icons/calendar.xpm
@@ -0,0 +1,26 @@
+/* XPM Calendar Label */
+static char *cal_16[] = {
+/* width height num_colors chars_per_pixel */
+"    16    16        3            1",
+/* colors */
+". c #000000",
+"d c none",
+"e c #ffffff",
+/* pixels */
+"dddddddddddddddd",
+"...............d",
+".eeeeeeeeeeeee.d",
+"...............d",
+".e.e.e.e.e.e.e.d",
+"...............d",
+".e.e.e.e.e.e.e.d",
+"...............d",
+".e.e.e.e.e.e.e.d",
+"...............d",
+".e.e.e.e.e.e.e.d",
+"...............d",
+".e.e.e.e.e.e.e.d",
+"...............d",
+"dddddddddddddddd",
+"dddddddddddddddd",
+};
diff --git a/src/include/calendar.h b/src/include/calendar.h
new file mode 100644
index 0000000..16e9201
--- /dev/null
+++ b/src/include/calendar.h
@@ -0,0 +1,152 @@
+/* -*-C++-*-
+
+ "$Id: Fl_Calendar.H,v 1.4 2000/02/13 04:43:56 jamespalmer Exp $"
+
+ Copyright 1999-2000 by the Flek development team.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+
+ Please report all bugs and problems to "flek-devel at sourceforge.net".
+
+ */
+
+#ifndef _FL_CALENDAR_H
+#define _FL_CALENDAR_H
+
+#include <FL/Fl_Window.H>
+#include <FL/Fl_Group.H>
+#include <FL/Fl_Button.H>
+#include <FL/Fl_Box.H>
+#include <FL/Fl_Input.H>
+#include <FL/Fl_Pixmap.H>
+
+#include "date.h"
+
+class Fl_Calendar_Base : public Fl_Group , public Date
+{
+private:
+
+protected:
+
+	int cal_x;
+	int cal_y;
+	int cal_w;
+	int cal_h;
+
+	Fl_Button * days[6*7];
+
+public:
+	Fl_Widget *target;
+	int calfmt;
+
+	/**
+	 * The constructor for an empty Fl_Calendar_Base.
+	 */
+	Fl_Calendar_Base (int x, int y, int w = (7*20), int h = (6*20),
+					  const char *l = 0);
+
+	Fl_Button * day_button (int i);
+
+	void update ();
+	void csize (int cx, int cy, int cw, int ch);
+	void setTarget (Fl_Widget *tgt);
+};
+
+class Fl_Calendar : public Fl_Calendar_Base
+{
+public:
+	/**
+	 * The constructor for an empty Fl_Calendar.
+	 */
+	Fl_Calendar (int x, int y, int w = (7*20), int h = (8*20),
+				 const char *l = 0);
+
+	void today ();
+	void previous_month ();
+	void next_month ();
+	void previous_year ();
+	void next_year ();
+	void setDate (int, int, int);
+
+	void update ();
+	void csize (int cx, int cy, int cw, int ch);
+	int  handle (int);
+
+protected:
+	//  Fl_Button * weekdays[7];
+	//  Fl_Button * caption;
+	Fl_Box * weekdays[7];
+	Fl_Box * caption;
+	Fl_Button * nxt_month;
+	Fl_Button * prv_month;
+	Fl_Button * nxt_year;
+	Fl_Button * prv_year;
+};
+
+class Fl_PopCal : public Fl_Window {
+
+	friend void popcal_cb(Fl_Widget *, long);
+
+protected:
+	int popcalfmt_;
+	//    Fl_Window popcal_form;
+	Fl_Calendar *popcal;
+	Fl_Input *target;
+public:
+	Fl_PopCal (int x, int y, int w, int h, Fl_Input *inp = 0);
+	~Fl_PopCal ();
+	void popposition (int, int);
+	void popshow ();
+	void pophide ();
+	void popcal_cb_i (Fl_Widget *, long);
+	void popcalfmt (int);
+	int  popcalfmt ();
+	int  handle (int);
+	void setDate (int, int, int);
+};
+
+class Fl_DateInput : public Fl_Group  {
+
+protected:
+	Fl_Button  *Btn;
+	Fl_Input   *Input;
+	Fl_PopCal  *Cal;
+
+	Fl_Window *popcal_form;
+	Fl_Calendar *popcal;
+	int popcalfmt_;
+
+	void makepopcal();
+
+public:
+	Fl_DateInput (int x, int y, int w, int h, char * = 0);
+
+	void format (int);
+	const char *value ();
+	void value (const char *);
+	void textfont (int);
+	void textsize (int);
+	void labelfont (int);
+	void labelsize (int);
+	void labelcolor (int);
+	void align (Fl_Align);
+	void fl_popcal();
+	void take_focus();
+
+};
+
+
+#endif
diff --git a/src/include/combo.h b/src/include/combo.h
new file mode 100644
index 0000000..310f55d
--- /dev/null
+++ b/src/include/combo.h
@@ -0,0 +1,127 @@
+/* -*-C++-*-
+
+ "$Id: Fl_Combobox.H,v 1.4 2000/02/13 04:43:56 dhfreese Exp $"
+
+ Copyright 1999-2000 by the Dave Freese.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+
+ Please report all bugs and problems to "flek-devel at sourceforge.net".
+
+ */
+
+#ifndef _FL_COMBOBOX_H
+#define _FL_COMBOBOX_H
+
+#include <FL/Fl.H>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+
+#include <FL/Fl_Window.H>
+#include <FL/Fl_Group.H>
+#include <FL/Fl_Button.H>
+#include <FL/Fl_Output.H>
+#include <FL/Fl_Select_Browser.H>
+#include <FL/Fl_Pixmap.H>
+
+#define FL_COMBO_UNIQUE 1
+#define FL_COMBO_UNIQUE_NOCASE 2
+#define FL_COMBO_LIST_INCR 100
+
+class Fl_ComboBox;
+
+struct datambr {
+	char *s;
+	void *d;
+};
+
+struct retvals {
+	//  Fl_Output * Inp;
+	Fl_Input *Inp;
+	void     * retval;
+	int      * idx;};
+
+class Fl_PopBrowser : public Fl_Window {
+
+	friend void popbrwsr_cb(Fl_Widget *, long);
+
+protected:
+	Fl_Select_Browser *popbrwsr;
+	retvals  Rvals;
+	int hRow;
+	int wRow;
+public:
+	Fl_PopBrowser (int x, int y, int w, int h, retvals R);
+	~Fl_PopBrowser ();
+	void popshow (int, int);
+	void pophide ();
+	void popbrwsr_cb_i (Fl_Widget *, long);
+
+	void add (char *s, void *d = 0);
+	void clear ();
+	void sort ();
+	int  handle (int);
+
+	Fl_ComboBox *parent;
+
+};
+
+class Fl_ComboBox : public Fl_Group  {
+	friend int DataCompare (const void *, const void *);
+	friend class Fl_PopBrowser;
+
+protected:
+	Fl_Button     *Btn;
+	//    Fl_Output     *Output;
+	Fl_Input      *Output;
+	Fl_PopBrowser *Brwsr;
+	datambr       **datalist;
+	int           listsize;
+	int           maxsize;
+	int           listtype;
+
+private:
+	int width;
+	int height;
+	void *retdata;
+	int  idx;
+	retvals R;
+
+public:
+
+	Fl_ComboBox (int x, int y, int w, int h, const char * = 0);
+
+	const char *value ();
+	void value (const char *);
+	void fl_popbrwsr(Fl_Widget *);
+
+	void type (int = 0);
+	void add (const char *s, void *d = 0);
+	void clear ();
+	void sort ();
+	int  index ();
+	void index (int i);
+	void *data ();
+	void textfont (int);
+	void textsize (uchar);
+	void readonly();
+
+};
+
+
+#endif
diff --git a/src/include/compat-mingw.h b/src/include/compat-mingw.h
new file mode 100644
index 0000000..d2e8e03
--- /dev/null
+++ b/src/include/compat-mingw.h
@@ -0,0 +1,97 @@
+#ifndef MINGW_H_
+#define MINGW_H_
+
+#include <sys/types.h>
+#include <pthread.h>
+#include <winsock2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+	typedef int pid_t;
+	typedef long suseconds_t;
+#define hstrerror strerror
+
+#ifndef SIGUSR2
+#  define SIGUSR2 100
+#endif
+
+	/*
+	 * simple adaptors
+	 */
+
+	static inline int mingw_mkdir(const char *path, int mode)
+	{
+		return mkdir(path);
+	}
+#define mkdir mingw_mkdir
+
+	static inline int mingw_unlink(const char *pathname)
+	{
+		/* read-only files cannot be removed */
+		chmod(pathname, 0666);
+		return unlink(pathname);
+	}
+#define unlink mingw_unlink
+
+	/*
+	 * implementations of missing functions
+	 */
+
+	unsigned int sleep (unsigned int seconds);
+	char *mingw_getcwd(char *pointer, int len);
+#define getcwd mingw_getcwd
+	char *mingw_getenv(const char *name);
+#define getenv mingw_getenv
+	int mingw_rename(const char*, const char*);
+#define rename mingw_rename
+
+#ifndef SHUT_WR
+#  define SHUT_WR SD_SEND
+#endif
+#ifndef SHUT_RD
+#  define SHUT_RD SD_RECEIVE
+#endif
+#ifndef SHUT_RDWR
+#  define SHUT_RDWR SD_BOTH
+#endif
+#ifndef EADDRINUSE
+#  define EADDRINUSE WSAEADDRINUSE
+#endif
+
+	int nanosleep (const struct timespec *req, struct timespec *rem);
+	int socketpair(int family, int type, int protocol, int *sv);
+
+	/* uname */
+#define UTSNAME_MAX_ 257
+	struct utsname
+	{
+		char sysname[UTSNAME_MAX_];
+		char nodename[UTSNAME_MAX_];
+		char release[UTSNAME_MAX_];
+		char version[UTSNAME_MAX_];
+		char machine[UTSNAME_MAX_];
+	};
+	int uname(struct utsname *name);
+
+	/* getrusage */
+#define RUSAGE_SELF	 0
+#define RUSAGE_CHILDREN (-1)
+	struct rusage
+	{
+		struct timeval ru_utime;
+		struct timeval ru_stime;
+	};
+	int getrusage(int who, struct rusage *usage);
+
+	/* fsync, fdatasync */
+#include <io.h>
+#define fsync _commit
+#define fdatasync fsync
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/include/compat.h b/src/include/compat.h
new file mode 100644
index 0000000..cb658fb
--- /dev/null
+++ b/src/include/compat.h
@@ -0,0 +1,67 @@
+#ifndef COMPAT_H
+#define COMPAT_H
+
+/* adapted from compat.h in git-1.6.1.2 */
+
+#if !defined(__APPLE__) && !defined(__FreeBSD__)  && !defined(__USLC__) && !defined(_M_UNIX)
+#  define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs 600 for S_ISLNK() */
+#  define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */
+#endif
+#define _ALL_SOURCE 1
+#define _GNU_SOURCE 1
+#define _BSD_SOURCE 1
+
+#include <config.h>
+
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+#include <signal.h>
+#include <assert.h>
+
+#ifdef __WIN32__
+#  define dirent fl_dirent_no_thanks
+#  else
+#  include <dirent.h>
+#  include <sys/utsname.h>
+#  include <sys/ipc.h>
+#  include <sys/msg.h>
+#endif
+
+#include "compat-mingw.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__WOE32__) && (!defined(__GNUC__) || __GNUC__ < 4)
+#  define SNPRINTF_RETURNS_BOGUS 1
+#else
+#  define SNPRINTF_RETURNS_BOGUS 0
+#endif
+
+#if SNPRINTF_RETURNS_BOGUS
+#define snprintf git_snprintf
+	extern int git_snprintf(char *str, size_t maxsize,
+							const char *format, ...);
+#define vsnprintf git_vsnprintf
+	extern int git_vsnprintf(char *str, size_t maxsize,
+							 const char *format, va_list ap);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // MINGW32_H
diff --git a/src/include/csvdb.h b/src/include/csvdb.h
new file mode 100644
index 0000000..028cba7
--- /dev/null
+++ b/src/include/csvdb.h
@@ -0,0 +1,119 @@
+//======================================================================
+// cvsdb.cxx
+//
+// Authors:
+//
+// Copyright (C) 2013, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+
+#ifndef CSVDB_H
+#define CSVDB_H
+
+#include <stdlib.h>
+
+#include <string.h>
+#include <string>
+#include <vector>
+#include <list>
+#include <iostream>
+#include <fstream>
+
+using namespace std;
+
+struct callsigns {
+	string prefix;
+	string area;
+	string suffix;
+	int nbr;
+	callsigns() {
+		prefix.clear();
+		area.clear();
+		suffix.clear();
+		nbr = -1; }
+};
+
+struct csvRecord {
+	string prefix;
+	string area;
+	string suffix;
+	string callsign;
+	string name;
+	string netnbr;
+	string logdate;
+	string nbrlogins;
+	string status;
+	string joined;
+	string fname;
+	string lname;
+	string addr;
+	string city;
+	string state;
+	string zip;
+	string phone;
+	string birthdate;
+	string spouse;
+	string sp_birth;
+	string comment1;
+	string comment2;
+	string email;
+	string prevdate;
+	csvRecord() {
+		prefix.clear(); area.clear(); suffix.clear(); callsign.clear();
+		name.clear(); netnbr.clear(); logdate.clear(); nbrlogins.clear();
+		status.clear(); joined.clear(); fname.clear(); lname.clear();
+		addr.clear(); city.clear(); state.clear(); zip.clear();
+		phone.clear(); birthdate.clear(); spouse.clear(); sp_birth.clear();
+		comment1.clear(); comment2.clear(); email.clear(); prevdate.clear();
+	}
+};
+
+class csvdb {
+private:
+	static const char *csvFields;
+	string dbfilename;
+	vector<csvRecord> dbrecs;
+	csvRecord record;
+	int cur_recnbr;
+	int fpos[24];
+public:
+	csvdb() {
+		dbfilename.assign("test.csv");
+		cur_recnbr = 0;
+	}
+	~csvdb() {}
+	void filename(string fname) { dbfilename.assign(fname); }
+	int save();
+	int load();
+	int numrecs() { return (int)dbrecs.size(); }
+	int get(size_t n, csvRecord &rec);
+	int put(size_t n, csvRecord &rec);
+	int add(csvRecord &rec);
+	int recnbr() { return cur_recnbr; }
+	int erase(size_t n);
+	string delimit(string s);
+	string trim(string s);
+	void field(string &s, string &fld);
+	bool split(string s, csvRecord &rec);
+	void join(csvRecord &rec, string &s);
+	void clearrec(csvRecord &rec);
+	bool mapheader(string s);
+};
+
+#endif
diff --git a/src/include/date.h b/src/include/date.h
new file mode 100644
index 0000000..59ccc22
--- /dev/null
+++ b/src/include/date.h
@@ -0,0 +1,144 @@
+/* -*-C++-*-
+
+ "$Id: Fl_Date.H,v 1.4 2000/03/30 04:43:56 davefreese Exp $"
+
+ Copyright 1999-2000 by the Dave Freese & the Flek development team.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library 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
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+
+ Please report all bugs and problems to "flek-devel at sourceforge.net".
+
+ */
+#ifndef DATE_H
+#define DATE_H
+
+#include <iostream>
+#include <istream>
+#include <ostream>
+#include <sstream>
+
+#include <iomanip>
+#include <time.h>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <string>
+
+using namespace std;
+
+typedef enum {
+	SUNDAY,
+	MONDAY,
+	TUESDAY,
+	WEDNESDAY,
+	THURSDAY,
+	FRIDAY,
+	SATURDAY
+} weekday_t;
+
+typedef enum {
+	JANUARY = 1,
+	FEBRUARY,
+	MARCH,
+	APRIL,
+	MAY,
+	JUNE,
+	JULY,
+	AUGUST,
+	SEPTEMBER,
+	OCTOBER,
+	NOVEMBER,
+	DECEMBER
+} month_t;
+
+class Date {
+	friend ostream &operator<<( ostream &, Date &);
+
+protected:
+	int  year;
+	int  month;
+	int  day;
+	int  fmt;
+	static const int mdays[];
+	static const int jdays[][13];
+	static const char *month_name[];
+	void helpIncrement();
+
+public:
+	Date();
+	Date( int m, int d, int y );
+
+	void setDate( int, int, int );      // set the date
+	void setDate( Date & );
+	void setFormat (int);
+	void today();                       // set date to the present day
+	void Year( int );
+	int Year();
+	void Month( int );
+	int Month();
+	void Day( int );
+	int Day();
+
+	void previous_month ();
+	void next_month ();
+	void previous_year ();
+	void next_year ();
+
+	bool endOfMonth( int );
+
+	bool leapYear (int);
+	bool leapYear () { return leapYear (year); }
+	bool isleapyear (int year) { return leapYear (year); }
+	bool isleapyear () { return isleapyear (year); }
+
+	int daysinmonth (int, int);
+	int daysinmonth ()
+	{ return daysinmonth (month, isleapyear (year)); }
+
+	bool isvalid (int, int, int);
+	bool datevalid (int year, int mon, int day)
+	{ return isvalid (mon, day, year); }
+	bool datevalid ()
+	{ return isvalid (month, day, year); }
+
+	int dayofyear (int, int, int);
+	int dayofyear ()
+	{ return dayofyear (year, month, day); }
+
+	int dayofepoch (int, int, int);
+	int dayofepoch ()
+	{ return dayofepoch (year, month, day); }
+
+	int dayofweek (int, int, int);
+	int dayofweek ()
+	{ return dayofweek (year, month, day); }
+
+	char *szDate (int);
+	char *szDate ();
+	double dJulian ();
+
+	bool operator==( const Date & );
+	bool operator!=( const Date & );
+	bool operator<( const Date & );
+	bool operator>( const Date & );
+	void operator=( const Date & );
+	const Date &operator+=( int);        // add days, modify object
+	Date &operator++();                  // pre-increment operator
+	Date operator++( int );              // post-increment operator
+
+};
+
+#endif
diff --git a/src/include/fl_lock.h b/src/include/fl_lock.h
new file mode 100644
index 0000000..8ea5057
--- /dev/null
+++ b/src/include/fl_lock.h
@@ -0,0 +1,78 @@
+// ----------------------------------------------------------------------------
+//	fl_lock.h
+//
+// Copyright (C) 2007
+//		Stelios Bounanos, M0GLD
+//
+// This file is part of flnet.
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef FL_LOCK_H_
+#define FL_LOCK_H_
+
+// disabled calls
+#define FL_LOCK_D(x)   ((void)0)
+#define FL_UNLOCK_D(x) ((void)0)
+#define FL_AWAKE_D(x)  ((void)0)
+// enabled calls
+#define FL_LOCK_E(x)   FL_LOCK(x)
+#define FL_UNLOCK_E(x) FL_UNLOCK(x)
+#define FL_AWAKE_E(x)  FL_AWAKE(x)
+
+#if !defined(NDEBUG) && !defined(NO_LOCKS)
+#	include <FL/Fl.H>
+#endif
+
+#ifdef NDEBUG
+#	define FL_LOCK(x)   Fl::lock(x)
+#	define FL_UNLOCK(x) Fl::unlock(x)
+#	define FL_AWAKE(x)  Fl::awake(x)
+#else // debugging
+#	include <stacktrace.h>
+
+#	ifndef NO_LOCKS
+#               include "debug.h"
+#		define FL_LOCK(x)           \
+do {                                \
+	switch (GET_THREAD_ID()) {      \
+		case TRX_TID:               \
+			LOG_ERROR("trx lock");	\
+			break;                  \
+	case FLMAIN_TID:                \
+			LOG_WARN("flrun lock"); \
+			break;                  \
+	default:                        \
+		LOG_VERBOSE("lock");		\
+	}                               \
+	pstack_maybe();                 \
+	Fl::lock(x);                    \
+} while (0);
+
+#		define FL_UNLOCK(x) Fl::unlock(x)
+#		define FL_AWAKE(x)  Fl::awake(x)
+#	else // no locks
+#		define FL_LOCK(x)   ((void)0)
+#		define FL_UNLOCK(x) ((void)0)
+#		define FL_AWAKE(x)  ((void)0)
+#	endif // NO_LOCKS
+#endif // NDEBUG
+
+#endif // FL_LOCK_H_
+
+// Local Variables:
+// mode: c++
+// c-file-style: "linux"
+// End:
diff --git a/src/include/flnetrc.h b/src/include/flnetrc.h
new file mode 100644
index 0000000..bf7f645
--- /dev/null
+++ b/src/include/flnetrc.h
@@ -0,0 +1,3 @@
+// MS include file for application icon
+
+#define IDI_ICON  101
diff --git a/src/include/loglist.h b/src/include/loglist.h
new file mode 100644
index 0000000..0c3c475
--- /dev/null
+++ b/src/include/loglist.h
@@ -0,0 +1,100 @@
+//======================================================================
+// combo.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//
+//======================================================================
+
+#ifndef _LOGLIST
+#define _LOGLIST
+
+#include <stdlib.h>
+#include <string.h>
+
+enum logStatus{EMPTY,LOGIN,FIRST,SECOND,LOGOUT};
+
+#define LISTINCR 500
+#define DLINESIZE 24
+#define BLANKS 4
+
+struct _logged {
+	long    recN;
+	logStatus status;
+	char szPrefix[3];
+	char szArea[2];
+	char szSuffix[4];
+	char szName[10];
+	char szTime[6];
+	char chPriority;
+	char displine[DLINESIZE + 1];
+};
+
+class loglist {
+private:
+	_logged *llist;
+	int nlist;
+	int lsize;
+	int iLastup;
+	char cP1;
+	char cP2;
+	char cP3;
+	int  iAutoPriority;
+	void CreateDispLine (int n);
+public:
+	loglist ();
+
+	int  numlist (void) { return nlist - BLANKS; }
+	long recN (int n);
+	logStatus status (int n);
+	void status(int n, logStatus st);
+	int add (long N,
+			 const char *prefix, const char *area, const char *suffix,
+			 const char *name, const char *szTime, char flg = ' ');
+	void modify (int n,
+				 long N,
+				 const char *prefix, const char *area, const char *suffix,
+				 const char *name);
+	int del (int n);
+	void clear (void);
+	char *displine (int n);
+	char *report_line(int n);
+	char *prefix (int n);
+	char *area (int n);
+	char *suffix (long n);
+	int inList (long N);
+	int Pri_0 (int n);
+	int Pri_1 (int n);
+	int Pri_2 (int n);
+	int Pri_3 (int n);
+	int AutoPriority () {return iAutoPriority;}
+	void AutoPriority (int n) {iAutoPriority = n;}
+	void setPri_1 (char c) {cP1 = c;}
+	void setPri_2 (char c) {cP2 = c;}
+	void setPri_3 (char c) {cP3 = c;}
+	int nextup (void);
+	int MoveEarlier (int);
+	int MoveLater (int);
+	void lastup (int);
+	int  lastup ();
+};
+
+#endif
+
diff --git a/src/include/my_UI.h b/src/include/my_UI.h
new file mode 100644
index 0000000..eed2e69
--- /dev/null
+++ b/src/include/my_UI.h
@@ -0,0 +1,56 @@
+//======================================================================
+// my_UI.h
+//
+// Authors:
+//
+// Copyright (C) 2013, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+#ifndef _MY_UI
+#define _MY_UI
+
+#include <FL/Fl_Group.H>
+#include "loglist.h"
+
+extern int WhoIsUp;
+extern void updateCallins (bool);
+extern loglist callinlist;
+
+enum MYGUI_STATUS {LOGLIST, SUFFIX, PREFIX, AREA, PICKLIST};
+
+class my_UI : public Fl_Group
+{
+private:
+	MYGUI_STATUS my_status;
+	//    int WhoIsUP;
+	void clearSAP ();
+	void fillPickList ();
+	void PickedToCallins (int);
+	void PickedColors ();
+	void clearPickList ();
+public:
+	my_UI (int x, int y, int w, int h, const char *l = 0);
+	int handle (int);
+	void dispCallIns (bool flag);
+	void UpdateWhoIsUp (long L);
+	void PickedToCallinsDB(size_t);
+};
+
+#endif
+
diff --git a/src/include/net_config.h b/src/include/net_config.h
new file mode 100644
index 0000000..812d515
--- /dev/null
+++ b/src/include/net_config.h
@@ -0,0 +1,44 @@
+//======================================================================
+// net_config.h
+//
+// Authors:
+//
+// Copyright (C) 2013, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include <FL/Enumerations.H>
+
+extern char chP1[], chP2[], chP3[];
+extern char chAuto;
+extern char szP1[], szP2[], szP3[];
+
+extern Fl_Color  fgColors[];
+extern Fl_Color  bgColors[];
+
+extern int disp_new_login;
+extern int open_editor;
+extern int callin_is_up;
+
+void readConfig ();
+void writeConfig ();
+
+#endif
diff --git a/src/include/net_icon.h b/src/include/net_icon.h
new file mode 100644
index 0000000..439eb16
--- /dev/null
+++ b/src/include/net_icon.h
@@ -0,0 +1,1404 @@
+/* XPM */
+const char * net_icon[] = {
+	"64 64 1336 2",
+	"  	c None",
+	". 	c #FCF5EF",
+	"+ 	c #F4F0EB",
+	"@ 	c #E8E3DC",
+	"# 	c #DFDBD3",
+	"$ 	c #AFAEA4",
+	"% 	c #8D8C84",
+	"& 	c #9B998F",
+	"* 	c #CDC9BD",
+	"= 	c #979287",
+	"- 	c #817C72",
+	"; 	c #D8D5C9",
+	"> 	c #C6C2B8",
+	", 	c #EEEADC",
+	"' 	c #D4CCBC",
+	") 	c #DDD5C5",
+	"! 	c #B6AD9C",
+	"~ 	c #6F6855",
+	"{ 	c #46402F",
+	"] 	c #666250",
+	"^ 	c #B2B0A0",
+	"/ 	c #908F7F",
+	"( 	c #090600",
+	"_ 	c #69655C",
+	": 	c #B7B1A4",
+	"< 	c #191307",
+	"[ 	c #5D554A",
+	"} 	c #8B8376",
+	"| 	c #2C241E",
+	"1 	c #C3BDB2",
+	"2 	c #DCD7C5",
+	"3 	c #C4BDAA",
+	"4 	c #B0AA92",
+	"5 	c #BDB59D",
+	"6 	c #DBD4B9",
+	"7 	c #DFD8BD",
+	"8 	c #847E64",
+	"9 	c #0C0700",
+	"0 	c #464431",
+	"a 	c #FFFFF2",
+	"b 	c #807E6C",
+	"c 	c #000000",
+	"d 	c #C0BAAD",
+	"e 	c #DCD5C9",
+	"f 	c #BCB3A4",
+	"g 	c #6E6557",
+	"h 	c #3B3125",
+	"i 	c #BFB9AF",
+	"j 	c #EAE8D8",
+	"k 	c #CDC8B6",
+	"l 	c #938E7B",
+	"m 	c #AFA990",
+	"n 	c #CDC4A8",
+	"o 	c #50462B",
+	"p 	c #130A00",
+	"q 	c #E5E0C0",
+	"r 	c #EAE8CB",
+	"s 	c #48442E",
+	"t 	c #070500",
+	"u 	c #85836E",
+	"v 	c #D7D4C2",
+	"w 	c #201D18",
+	"x 	c #0D0700",
+	"y 	c #FDFDEE",
+	"z 	c #41382E",
+	"A 	c #62574D",
+	"B 	c #D5C8B7",
+	"C 	c #0A0000",
+	"D 	c #6D6455",
+	"E 	c #938E86",
+	"F 	c #D0D0C4",
+	"G 	c #9E9B8D",
+	"H 	c #B1AD9D",
+	"I 	c #E1DBC8",
+	"J 	c #C9C1AA",
+	"K 	c #80775B",
+	"L 	c #2C220E",
+	"M 	c #2A2003",
+	"N 	c #2A2103",
+	"O 	c #CEC8AB",
+	"P 	c #C2BEA3",
+	"Q 	c #1C180A",
+	"R 	c #27211C",
+	"S 	c #FFFFF4",
+	"T 	c #858578",
+	"U 	c #535044",
+	"V 	c #FBF6E8",
+	"W 	c #D8D2BF",
+	"X 	c #948B78",
+	"Y 	c #F8EBD9",
+	"Z 	c #655845",
+	"` 	c #7E7262",
+	" .	c #63594E",
+	"..	c #8E8D81",
+	"+.	c #C0BAB2",
+	"@.	c #FBF7EC",
+	"#.	c #FFF6E8",
+	"$.	c #E2D7C5",
+	"%.	c #C3B8A2",
+	"&.	c #5E5238",
+	"*.	c #2B1F04",
+	"=.	c #241901",
+	"-.	c #BDB39B",
+	";.	c #FFF8E4",
+	">.	c #C2BCAC",
+	",.	c #CFCDC0",
+	"'.	c #F6F4E8",
+	").	c #F3F5EB",
+	"!.	c #ECECE0",
+	"~.	c #FFFFEF",
+	"{.	c #FFF3DF",
+	"].	c #E4D4C0",
+	"^.	c #AF9F8D",
+	"/.	c #716656",
+	"(.	c #B0B3A6",
+	"_.	c #8F9183",
+	":.	c #C3C2B9",
+	"<.	c #FFF8F6",
+	"[.	c #FEF6F5",
+	"}.	c #FEFBF5",
+	"|.	c #FAF0E3",
+	"1.	c #BDB1A0",
+	"2.	c #887B69",
+	"3.	c #746852",
+	"4.	c #938673",
+	"5.	c #D5C9B8",
+	"6.	c #E0D5C8",
+	"7.	c #FFFFF6",
+	"8.	c #FFFAF3",
+	"9.	c #F0F0E6",
+	"0.	c #F6F3E6",
+	"a.	c #C3BAAA",
+	"b.	c #B0A38F",
+	"c.	c #8E7E66",
+	"d.	c #8C7A64",
+	"e.	c #7A6956",
+	"f.	c #786A58",
+	"g.	c #928A7F",
+	"h.	c #C4C2B4",
+	"i.	c #99998B",
+	"j.	c #B7B9AB",
+	"k.	c #E6E6DD",
+	"l.	c #FBF4F5",
+	"m.	c #FCF3F3",
+	"n.	c #FDF4F0",
+	"o.	c #FDFBF0",
+	"p.	c #D0C3B4",
+	"q.	c #918572",
+	"r.	c #847764",
+	"s.	c #C0B3A0",
+	"t.	c #D7CCBB",
+	"u.	c #CABEB1",
+	"v.	c #A4998F",
+	"w.	c #918680",
+	"x.	c #635E57",
+	"y.	c #323329",
+	"z.	c #18180C",
+	"A.	c #130E03",
+	"B.	c #EBE3D2",
+	"C.	c #968874",
+	"D.	c #0B0000",
+	"E.	c #1D0C00",
+	"F.	c #231302",
+	"G.	c #281B08",
+	"H.	c #171616",
+	"I.	c #A19987",
+	"J.	c #A5A191",
+	"K.	c #E3E3D7",
+	"L.	c #EBECE4",
+	"M.	c #F6F3F3",
+	"N.	c #FFFDFD",
+	"O.	c #F3EDE8",
+	"P.	c #FAF7EB",
+	"Q.	c #F2EADA",
+	"R.	c #9B8F7C",
+	"S.	c #60543D",
+	"T.	c #594D37",
+	"U.	c #463A2B",
+	"V.	c #1D1102",
+	"W.	c #180C00",
+	"X.	c #060000",
+	"Y.	c #090500",
+	"Z.	c #151003",
+	"`.	c #1A1304",
+	" +	c #B4A99A",
+	".+	c #E9DBCA",
+	"++	c #554741",
+	"@+	c #5B4C3C",
+	"#+	c #5A4D3C",
+	"$+	c #372D22",
+	"%+	c #5A5340",
+	"&+	c #A09883",
+	"*+	c #C4C0AF",
+	"=+	c #F1F0E3",
+	"-+	c #F0F0E9",
+	";+	c #FAF9F8",
+	">+	c #F2EFEC",
+	",+	c #FEFDF6",
+	"'+	c #FFFFF3",
+	")+	c #BFB8A6",
+	"!+	c #453A25",
+	"~+	c #1B1000",
+	"{+	c #2B1F06",
+	"]+	c #1A0E00",
+	"^+	c #1C1101",
+	"/+	c #322616",
+	"(+	c #3F3326",
+	"_+	c #7B7366",
+	":+	c #979385",
+	"<+	c #C0BFAF",
+	"[+	c #C2C0B0",
+	"}+	c #EBE5D5",
+	"|+	c #F9EFDF",
+	"1+	c #FAEBDB",
+	"2+	c #E4D6C4",
+	"3+	c #D4C7B6",
+	"4+	c #A69D8A",
+	"5+	c #8E8774",
+	"6+	c #A5A190",
+	"7+	c #A8A08B",
+	"8+	c #B4AC98",
+	"9+	c #D2CEBC",
+	"0+	c #EEEBDF",
+	"a+	c #FDFDF5",
+	"b+	c #EFEEEB",
+	"c+	c #F7F5F0",
+	"d+	c #736E5F",
+	"e+	c #231B07",
+	"f+	c #1F1504",
+	"g+	c #251A01",
+	"h+	c #2D2107",
+	"i+	c #40341C",
+	"j+	c #948973",
+	"k+	c #F1E9D7",
+	"l+	c #FBF0DE",
+	"m+	c #FFFBEA",
+	"n+	c #E8E2D4",
+	"o+	c #B2AC9C",
+	"p+	c #7D7666",
+	"q+	c #716758",
+	"r+	c #AB9F8F",
+	"s+	c #978A7A",
+	"t+	c #1C0F09",
+	"u+	c #2D2212",
+	"v+	c #372E1B",
+	"w+	c #37301D",
+	"x+	c #3A331F",
+	"y+	c #8E8671",
+	"z+	c #C0B8A3",
+	"A+	c #DCD5C4",
+	"B+	c #ECEADC",
+	"C+	c #FCFCF3",
+	"D+	c #FBFAF5",
+	"E+	c #D6D4CE",
+	"F+	c #252117",
+	"G+	c #1B1506",
+	"H+	c #302814",
+	"I+	c #463C23",
+	"J+	c #73674E",
+	"K+	c #766B4F",
+	"L+	c #B6AA91",
+	"M+	c #B2A791",
+	"N+	c #796E5B",
+	"O+	c #362B17",
+	"P+	c #100800",
+	"Q+	c #090300",
+	"R+	c #100900",
+	"S+	c #130C00",
+	"T+	c #160D09",
+	"U+	c #C6BCAC",
+	"V+	c #FFFBEB",
+	"W+	c #2D2111",
+	"X+	c #20150B",
+	"Y+	c #27210B",
+	"Z+	c #221C11",
+	"`+	c #EAE5D0",
+	" @	c #9E937E",
+	".@	c #CAC0AB",
+	"+@	c #D4CDBB",
+	"@@	c #FBFAF1",
+	"#@	c #ACACA4",
+	"$@	c #25241A",
+	"%@	c #242014",
+	"&@	c #373121",
+	"*@	c #7B7464",
+	"=@	c #EFE6CB",
+	"-@	c #C3B79C",
+	";@	c #423722",
+	">@	c #1D1100",
+	",@	c #100600",
+	"'@	c #150A00",
+	")@	c #1F1707",
+	"!@	c #211B0C",
+	"~@	c #2E2619",
+	"{@	c #575041",
+	"]@	c #514841",
+	"^@	c #B6AD9E",
+	"/@	c #FEFAEB",
+	"(@	c #BFB7A7",
+	"_@	c #B3A897",
+	":@	c #ADA593",
+	"<@	c #827C66",
+	"[@	c #857F68",
+	"}@	c #C9C4AF",
+	"|@	c #A59A84",
+	"1@	c #CBC1AB",
+	"2@	c #DCD6C2",
+	"3@	c #FAF6EA",
+	"4@	c #BFBDB1",
+	"5@	c #1B1B12",
+	"6@	c #19180B",
+	"7@	c #635F52",
+	"8@	c #D5D3C3",
+	"9@	c #F0E9D3",
+	"0@	c #696054",
+	"a@	c #2C210B",
+	"b@	c #271C06",
+	"c@	c #281D07",
+	"d@	c #1C1100",
+	"e@	c #3D3318",
+	"f@	c #6D6350",
+	"g@	c #A59C8B",
+	"h@	c #CBC7B4",
+	"i@	c #DFDECD",
+	"j@	c #FFFAE9",
+	"k@	c #FDF4E4",
+	"l@	c #CBC3B4",
+	"m@	c #CBC1B4",
+	"n@	c #B3ADA0",
+	"o@	c #847A6A",
+	"p@	c #645B49",
+	"q@	c #6D6753",
+	"r@	c #554F38",
+	"s@	c #4E4831",
+	"t@	c #978C76",
+	"u@	c #C6BCA6",
+	"v@	c #DBD4C0",
+	"w@	c #EFECDD",
+	"x@	c #B2B0A4",
+	"y@	c #AAA99C",
+	"z@	c #F8F5E6",
+	"A@	c #B4AE9E",
+	"B@	c #1B1207",
+	"C@	c #211705",
+	"D@	c #201400",
+	"E@	c #1C1000",
+	"F@	c #483C22",
+	"G@	c #887D63",
+	"H@	c #E8DEC3",
+	"I@	c #FCF2D8",
+	"J@	c #B1A78F",
+	"K@	c #857D69",
+	"L@	c #746C5B",
+	"M@	c #2D2415",
+	"N@	c #261E11",
+	"O@	c #090200",
+	"P@	c #C9C1B5",
+	"Q@	c #E3DACD",
+	"R@	c #282110",
+	"S@	c #140D00",
+	"T@	c #231B09",
+	"U@	c #1D1501",
+	"V@	c #282111",
+	"W@	c #C6C5B4",
+	"X@	c #B2A68F",
+	"Y@	c #CEC2AC",
+	"Z@	c #C9C0AD",
+	"`@	c #F8F4E5",
+	" #	c #EEECE0",
+	".#	c #D0D1C4",
+	"+#	c #FDFCEF",
+	"@#	c #868374",
+	"##	c #010000",
+	"$#	c #352C18",
+	"%#	c #372C16",
+	"&#	c #80755F",
+	"*#	c #CFC3AB",
+	"=#	c #8E826A",
+	"-#	c #655B42",
+	";#	c #382E13",
+	">#	c #2A2009",
+	",#	c #040000",
+	"'#	c #191001",
+	")#	c #251C0B",
+	"!#	c #20180B",
+	"~#	c #120B06",
+	"{#	c #645C52",
+	"]#	c #FFFFF5",
+	"^#	c #968F81",
+	"/#	c #6A6351",
+	"(#	c #8A826D",
+	"_#	c #625A43",
+	":#	c #6E674D",
+	"<#	c #D1CEBB",
+	"[#	c #988C73",
+	"}#	c #685C45",
+	"|#	c #89806C",
+	"1#	c #E6DFD1",
+	"2#	c #FAF9EC",
+	"3#	c #F3F4E8",
+	"4#	c #55544A",
+	"5#	c #0E0B01",
+	"6#	c #3A3425",
+	"7#	c #595142",
+	"8#	c #E9E1D0",
+	"9#	c #EFEAD7",
+	"0#	c #766A5C",
+	"a#	c #1F1403",
+	"b#	c #0D0300",
+	"c#	c #2C2207",
+	"d#	c #372C12",
+	"e#	c #493D28",
+	"f#	c #615745",
+	"g#	c #817B6A",
+	"h#	c #9C9588",
+	"i#	c #DDD8CC",
+	"j#	c #F3EDE2",
+	"k#	c #F7F0E4",
+	"l#	c #FFFFF8",
+	"m#	c #E0DCCA",
+	"n#	c #AAA28E",
+	"o#	c #BBB39B",
+	"p#	c #92896F",
+	"q#	c #76735D",
+	"r#	c #999C89",
+	"s#	c #FFFFF9",
+	"t#	c #6C6149",
+	"u#	c #827964",
+	"v#	c #DDD6C7",
+	"w#	c #FBF9ED",
+	"x#	c #B6B6AA",
+	"y#	c #605C52",
+	"z#	c #B0A99F",
+	"A#	c #F2EEE1",
+	"B#	c #9A9182",
+	"C#	c #352822",
+	"D#	c #24180D",
+	"E#	c #221604",
+	"F#	c #241904",
+	"G#	c #41371E",
+	"H#	c #7C7259",
+	"I#	c #C8BDA5",
+	"J#	c #ECE1CC",
+	"K#	c #EADECB",
+	"L#	c #CFC9B8",
+	"M#	c #AEA79B",
+	"N#	c #837D72",
+	"O#	c #4B463D",
+	"P#	c #EAE5DB",
+	"Q#	c #FFFEF1",
+	"R#	c #C4BEAD",
+	"S#	c #191100",
+	"T#	c #281F0D",
+	"U#	c #41371C",
+	"V#	c #1A1800",
+	"W#	c #A4A792",
+	"X#	c #33240D",
+	"Y#	c #51432C",
+	"Z#	c #C9C0AB",
+	"`#	c #D4CEBD",
+	" $	c #E8E6DA",
+	".$	c #DCDCD1",
+	"+$	c #8F8D84",
+	"@$	c #E5E1D6",
+	"#$	c #FDFCF2",
+	"$$	c #483E39",
+	"%$	c #251911",
+	"&$	c #2D1F13",
+	"*$	c #170A00",
+	"=$	c #655745",
+	"-$	c #9A8F7A",
+	";$	c #948A72",
+	">$	c #9F957B",
+	",$	c #71674E",
+	"'$	c #322617",
+	")$	c #1B0F0D",
+	"!$	c #1E150A",
+	"~$	c #211A0C",
+	"{$	c #050000",
+	"]$	c #2C2820",
+	"^$	c #F2F0E4",
+	"/$	c #EAE3D3",
+	"($	c #D8D0BC",
+	"_$	c #746A52",
+	":$	c #180D00",
+	"<$	c #48462C",
+	"[$	c #E8EBD5",
+	"}$	c #45371D",
+	"|$	c #908269",
+	"1$	c #A49A87",
+	"2$	c #A8A191",
+	"3$	c #E3E1D4",
+	"4$	c #F6F4EB",
+	"5$	c #FFFFF7",
+	"6$	c #E9E5DC",
+	"7$	c #160E06",
+	"8$	c #1A1008",
+	"9$	c #31241B",
+	"0$	c #6C5F54",
+	"a$	c #F4E8DA",
+	"b$	c #D9D4C4",
+	"c$	c #4C402C",
+	"d$	c #281E05",
+	"e$	c #130900",
+	"f$	c #261B08",
+	"g$	c #2C2313",
+	"h$	c #1A120D",
+	"i$	c #454035",
+	"j$	c #D2CEC5",
+	"k$	c #FDFDF2",
+	"l$	c #EDE9DC",
+	"m$	c #EEE8D7",
+	"n$	c #D4C9B0",
+	"o$	c #CEC4A7",
+	"p$	c #AEAA8F",
+	"q$	c #A2A68E",
+	"r$	c #B3B5A3",
+	"s$	c #827763",
+	"t$	c #796B55",
+	"u$	c #241707",
+	"v$	c #736853",
+	"w$	c #DFD7C7",
+	"x$	c #F2EFE7",
+	"y$	c #DBD8D0",
+	"z$	c #0C0800",
+	"A$	c #272118",
+	"B$	c #60594E",
+	"C$	c #CAC2B7",
+	"D$	c #F1E8DA",
+	"E$	c #A29E91",
+	"F$	c #231507",
+	"G$	c #221405",
+	"H$	c #261905",
+	"I$	c #1B0D00",
+	"J$	c #41341E",
+	"K$	c #574B35",
+	"L$	c #877D67",
+	"M$	c #CAC5B1",
+	"N$	c #F5F1DF",
+	"O$	c #FBF3E5",
+	"P$	c #EBE8DC",
+	"Q$	c #FFFBEE",
+	"R$	c #F1ECDF",
+	"S$	c #F3ECDB",
+	"T$	c #E1D9C7",
+	"U$	c #C2B8A4",
+	"V$	c #554C38",
+	"W$	c #4A442A",
+	"X$	c #363324",
+	"Y$	c #6F6B59",
+	"Z$	c #453826",
+	"`$	c #302009",
+	" %	c #AC9B80",
+	".%	c #E8D9C5",
+	"+%	c #F7F1E9",
+	"@%	c #D6D2CA",
+	"#%	c #231F15",
+	"$%	c #A09D91",
+	"%%	c #FBFAEC",
+	"&%	c #C5C2B1",
+	"*%	c #39342E",
+	"=%	c #191101",
+	"-%	c #201505",
+	";%	c #1A0B00",
+	">%	c #51402E",
+	",%	c #6B5849",
+	"'%	c #B2A28C",
+	")%	c #DCD2B5",
+	"!%	c #BBB296",
+	"~%	c #7E7760",
+	"{%	c #665E4C",
+	"]%	c #494036",
+	"^%	c #463D2C",
+	"/%	c #7F7869",
+	"(%	c #FBF8E8",
+	"_%	c #E3DDCD",
+	":%	c #F6F0DF",
+	"<%	c #86806F",
+	"[%	c #100A00",
+	"}%	c #261D07",
+	"|%	c #251A0C",
+	"1%	c #E3D8C7",
+	"2%	c #4A3D2C",
+	"3%	c #7F7059",
+	"4%	c #AD9C81",
+	"5%	c #B0A18B",
+	"6%	c #D6CDC6",
+	"7%	c #FBF9F2",
+	"8%	c #E1DDD2",
+	"9%	c #FEFEF2",
+	"0%	c #858272",
+	"a%	c #1D1A0A",
+	"b%	c #35301E",
+	"c%	c #1D1603",
+	"d%	c #7B715F",
+	"e%	c #F1E2D0",
+	"f%	c #9C8B78",
+	"g%	c #574432",
+	"h%	c #392A17",
+	"i%	c #281F0C",
+	"j%	c #271D06",
+	"k%	c #2B200B",
+	"l%	c #191000",
+	"m%	c #080000",
+	"n%	c #5C5544",
+	"o%	c #F6F4E4",
+	"p%	c #FAF4E4",
+	"q%	c #A29C8C",
+	"r%	c #ADA894",
+	"s%	c #A99F8A",
+	"t%	c #978B75",
+	"u%	c #C8BCA9",
+	"v%	c #D9D1C2",
+	"w%	c #93846F",
+	"x%	c #4C3C24",
+	"y%	c #564731",
+	"z%	c #EEE5DC",
+	"A%	c #F4EDE5",
+	"B%	c #666258",
+	"C%	c #272413",
+	"D%	c #57523F",
+	"E%	c #C2BCAA",
+	"F%	c #A69C8A",
+	"G%	c #190802",
+	"H%	c #220F00",
+	"I%	c #261704",
+	"J%	c #221804",
+	"K%	c #150B04",
+	"L%	c #2A200C",
+	"M%	c #413621",
+	"N%	c #756D5B",
+	"O%	c #ADA492",
+	"P%	c #F1EADA",
+	"Q%	c #FFFEEE",
+	"R%	c #EFEADA",
+	"S%	c #CDC7B7",
+	"T%	c #D7D2C1",
+	"U%	c #ADA895",
+	"V%	c #968B77",
+	"W%	c #8C8068",
+	"X%	c #685C49",
+	"Y%	c #887F70",
+	"Z%	c #635642",
+	"`%	c #1D0D00",
+	" &	c #7B6E57",
+	".&	c #D5CDC1",
+	"+&	c #F6F0E6",
+	"@&	c #050100",
+	"#&	c #484537",
+	"$&	c #B2B0A1",
+	"%&	c #FFFFEE",
+	"&&	c #BCB9A8",
+	"*&	c #594E40",
+	"=&	c #140700",
+	"-&	c #291907",
+	";&	c #2D1B0D",
+	">&	c #3D2F16",
+	",&	c #605639",
+	"'&	c #A99F82",
+	")&	c #DED4BA",
+	"!&	c #E9E0CB",
+	"~&	c #D8D4C2",
+	"{&	c #C6BDAC",
+	"]&	c #ABA594",
+	"^&	c #686053",
+	"/&	c #8D8678",
+	"(&	c #BFBAAA",
+	"_&	c #5D5747",
+	":&	c #312710",
+	"<&	c #231700",
+	"[&	c #170B00",
+	"}&	c #98917F",
+	"|&	c #463B28",
+	"1&	c #665A40",
+	"2&	c #CFC3AE",
+	"3&	c #CDC4B6",
+	"4&	c #E8E0D4",
+	"5&	c #FFFAED",
+	"6&	c #C0B9AC",
+	"7&	c #E3E2D4",
+	"8&	c #E6E4D6",
+	"9&	c #655F50",
+	"0&	c #1C1403",
+	"a&	c #20160A",
+	"b&	c #1E1100",
+	"c&	c #685845",
+	"d&	c #8C7B6C",
+	"e&	c #8E8067",
+	"f&	c #978E70",
+	"g&	c #8D8468",
+	"h&	c #5A5043",
+	"i&	c #423726",
+	"j&	c #312714",
+	"k&	c #211706",
+	"l&	c #0E0700",
+	"m&	c #292218",
+	"n&	c #F9F8E8",
+	"o&	c #B1AA9A",
+	"p&	c #453F2D",
+	"q&	c #70654F",
+	"r&	c #665A42",
+	"s&	c #675B4A",
+	"t&	c #BAB3A0",
+	"u&	c #A69B85",
+	"v&	c #7F745F",
+	"w&	c #5E5443",
+	"x&	c #E4DBCB",
+	"y&	c #F9F2E2",
+	"z&	c #C9C4B6",
+	"A&	c #353223",
+	"B&	c #332D1D",
+	"C&	c #1A1403",
+	"D&	c #544C3A",
+	"E&	c #D2CEBB",
+	"F&	c #FFFFF1",
+	"G&	c #8B7B65",
+	"H&	c #211302",
+	"I&	c #1F1501",
+	"J&	c #241A02",
+	"K&	c #221706",
+	"L&	c #271E0D",
+	"M&	c #4D4636",
+	"N&	c #BBB3A4",
+	"O&	c #F8F2E2",
+	"P&	c #FEFCEC",
+	"Q&	c #FBFAE8",
+	"R&	c #F1E7D1",
+	"S&	c #CABEA4",
+	"T&	c #ACA088",
+	"U&	c #A8A08C",
+	"V&	c #A5A195",
+	"W&	c #665E4A",
+	"X&	c #4E4430",
+	"Y&	c #D1C9B6",
+	"Z&	c #EDE5D3",
+	"`&	c #F4F4E3",
+	" *	c #403A30",
+	".*	c #1F1C13",
+	"+*	c #3C3628",
+	"@*	c #AFAA9A",
+	"#*	c #D9D1BF",
+	"$*	c #322511",
+	"%*	c #120300",
+	"&*	c #33250C",
+	"**	c #2B2105",
+	"=*	c #372D14",
+	"-*	c #675D48",
+	";*	c #D6CCB9",
+	">*	c #FEFDED",
+	",*	c #F8F7E6",
+	"'*	c #DFD9CA",
+	")*	c #B6B0A0",
+	"!*	c #B5AF9E",
+	"~*	c #625C49",
+	"{*	c #1A1000",
+	"]*	c #35290F",
+	"^*	c #42361F",
+	"/*	c #928E7C",
+	"(*	c #49412A",
+	"_*	c #AFA48D",
+	":*	c #D7CEB9",
+	"<*	c #EAE2CE",
+	"[*	c #FAF5E3",
+	"}*	c #857E6F",
+	"|*	c #7B786A",
+	"1*	c #FFFFFC",
+	"2*	c #E2E0D1",
+	"3*	c #746C5D",
+	"4*	c #1B1401",
+	"5*	c #201500",
+	"6*	c #32260D",
+	"7*	c #3E331B",
+	"8*	c #51482B",
+	"9*	c #8E8469",
+	"0*	c #E7DEC5",
+	"a*	c #D8D4BF",
+	"b*	c #B4AC9A",
+	"c*	c #A09785",
+	"d*	c #5E5647",
+	"e*	c #312A1E",
+	"f*	c #0B0400",
+	"g*	c #FBF5E5",
+	"h*	c #BBB5A1",
+	"i*	c #30260F",
+	"j*	c #4C4125",
+	"k*	c #392D16",
+	"l*	c #47402E",
+	"m*	c #D2D0BC",
+	"n*	c #7E7661",
+	"o*	c #9D9379",
+	"p*	c #7A6F58",
+	"q*	c #EBE3CE",
+	"r*	c #EBE7D5",
+	"s*	c #F6F1E1",
+	"t*	c #8D8A7E",
+	"u*	c #342E21",
+	"v*	c #1D1606",
+	"w*	c #211907",
+	"x*	c #6E654D",
+	"y*	c #CAC6AD",
+	"z*	c #BFB397",
+	"A*	c #6B6244",
+	"B*	c #574D31",
+	"C*	c #423829",
+	"D*	c #2C210E",
+	"E*	c #1B1100",
+	"F*	c #120B00",
+	"G*	c #362F1E",
+	"H*	c #433D2E",
+	"I*	c #E2DCCC",
+	"J*	c #F7F4E0",
+	"K*	c #D4CFB8",
+	"L*	c #D1C6AB",
+	"M*	c #C3B79D",
+	"N*	c #BDB79D",
+	"O*	c #B7B49E",
+	"P*	c #ADAC9A",
+	"Q*	c #473C22",
+	"R*	c #3B3018",
+	"S*	c #DAD1BA",
+	"T*	c #EDE7D4",
+	"U*	c #7A7366",
+	"V*	c #241E12",
+	"W*	c #251F11",
+	"X*	c #5E5847",
+	"Y*	c #C9C1AD",
+	"Z*	c #FFFFE7",
+	"`*	c #CAC1A7",
+	" =	c #3D331D",
+	".=	c #221800",
+	"+=	c #1F1500",
+	"@=	c #130800",
+	"#=	c #241A09",
+	"$=	c #534A3A",
+	"%=	c #8C8575",
+	"&=	c #DDD7C7",
+	"*=	c #F6F3E3",
+	"==	c #FBFBEB",
+	"-=	c #DBD6C2",
+	";=	c #A89F88",
+	">=	c #6F6448",
+	",=	c #54482E",
+	"'=	c #514A31",
+	")=	c #37341C",
+	"!=	c #63624D",
+	"~=	c #4F4832",
+	"{=	c #372D10",
+	"]=	c #8F8568",
+	"^=	c #C0B8A0",
+	"/=	c #F4ECDA",
+	"(=	c #FFFAEA",
+	"_=	c #59544F",
+	":=	c #1E180E",
+	"<=	c #ABA697",
+	"[=	c #FEF8E9",
+	"}=	c #E2DBC7",
+	"|=	c #655E44",
+	"1=	c #0F0500",
+	"2=	c #241B02",
+	"3=	c #342B0D",
+	"4=	c #2C2206",
+	"5=	c #483E25",
+	"6=	c #A19680",
+	"7=	c #E5DBC9",
+	"8=	c #F9F7E6",
+	"9=	c #D7D0C1",
+	"0=	c #958D7E",
+	"a=	c #554E3E",
+	"b=	c #272213",
+	"c=	c #CBC6B2",
+	"d=	c #B3A98F",
+	"e=	c #190E04",
+	"f=	c #372C11",
+	"g=	c #322B10",
+	"h=	c #2A270F",
+	"i=	c #CCCBB6",
+	"j=	c #FCFDEF",
+	"k=	c #72684A",
+	"l=	c #C5BB9E",
+	"m=	c #9E977C",
+	"n=	c #DFD8C5",
+	"o=	c #FFFDEE",
+	"p=	c #EEEADD",
+	"q=	c #FDF9ED",
+	"r=	c #FCFBEE",
+	"s=	c #928C7D",
+	"t=	c #1F180B",
+	"u=	c #231C03",
+	"v=	c #32270C",
+	"w=	c #574E35",
+	"x=	c #867C60",
+	"y=	c #8C8266",
+	"z=	c #A1977E",
+	"A=	c #BDB29D",
+	"B=	c #867C6E",
+	"C=	c #413827",
+	"D=	c #2A2313",
+	"E=	c #0F0800",
+	"F=	c #140E00",
+	"G=	c #19140F",
+	"H=	c #B7B3A0",
+	"I=	c #F4ECD5",
+	"J=	c #837859",
+	"K=	c #857A5E",
+	"L=	c #878065",
+	"M=	c #8D8970",
+	"N=	c #DFDDC8",
+	"O=	c #B5B7A4",
+	"P=	c #91876B",
+	"Q=	c #52492C",
+	"R=	c #342D14",
+	"S=	c #C5BFAD",
+	"T=	c #FFFEF0",
+	"U=	c #D9D6CD",
+	"V=	c #504D40",
+	"W=	c #130F00",
+	"X=	c #2E2715",
+	"Y=	c #686048",
+	"Z=	c #BCB89D",
+	"`=	c #F9F1D4",
+	" -	c #B7A78D",
+	".-	c #483927",
+	"+-	c #35260F",
+	"@-	c #342711",
+	"#-	c #110600",
+	"$-	c #27200D",
+	"%-	c #4D4635",
+	"&-	c #888373",
+	"*-	c #A09B8E",
+	"=-	c #C1BEB1",
+	"--	c #DDDACE",
+	";-	c #EFE8D4",
+	">-	c #ECE0C7",
+	",-	c #E4D8BF",
+	"'-	c #CFC4AB",
+	")-	c #C3B9A0",
+	"!-	c #D4CBB5",
+	"~-	c #9E9986",
+	"{-	c #DDD9CA",
+	"]-	c #6E674B",
+	"^-	c #372F12",
+	"/-	c #7C765D",
+	"(-	c #D5D0BE",
+	"_-	c #F0EDE0",
+	":-	c #FFFFFD",
+	"<-	c #747168",
+	"[-	c #5C5849",
+	"}-	c #C3BCAB",
+	"|-	c #FAF9E4",
+	"1-	c #F9F0D6",
+	"2-	c #584B35",
+	"3-	c #1F0D02",
+	"4-	c #3A2813",
+	"5-	c #3C2C15",
+	"6-	c #2D1F07",
+	"7-	c #4C402A",
+	"8-	c #988D77",
+	"9-	c #CBC4AF",
+	"0-	c #F8F8E6",
+	"a-	c #FBF9EA",
+	"b-	c #F3F0E7",
+	"c-	c #F8F5ED",
+	"d-	c #F1EBDB",
+	"e-	c #E8DDC7",
+	"f-	c #B0A48C",
+	"g-	c #D1C4AD",
+	"h-	c #887962",
+	"i-	c #7F705B",
+	"j-	c #C1B4A1",
+	"k-	c #A79C8D",
+	"l-	c #877E64",
+	"m-	c #62593D",
+	"n-	c #CBC4AC",
+	"o-	c #BFBAA8",
+	"p-	c #E8E5D7",
+	"q-	c #CFCCC5",
+	"r-	c #9E9C92",
+	"s-	c #F8F5E9",
+	"t-	c #FCFDEE",
+	"u-	c #8A8270",
+	"v-	c #160E00",
+	"w-	c #211402",
+	"x-	c #372611",
+	"y-	c #473623",
+	"z-	c #554430",
+	"A-	c #978972",
+	"B-	c #E3D7C0",
+	"C-	c #FFF6E0",
+	"D-	c #E0D8C3",
+	"E-	c #E6E1CE",
+	"F-	c #F0ECDB",
+	"G-	c #EFE9DC",
+	"H-	c #EDE9DE",
+	"I-	c #7F7A71",
+	"J-	c #9E9787",
+	"K-	c #CFC5AE",
+	"L-	c #72674F",
+	"M-	c #746850",
+	"N-	c #190D00",
+	"O-	c #B2A592",
+	"P-	c #706556",
+	"Q-	c #A1967C",
+	"R-	c #897F69",
+	"S-	c #4E4736",
+	"T-	c #C8C3B6",
+	"U-	c #F4F1E7",
+	"V-	c #F7F4ED",
+	"W-	c #A9A79F",
+	"X-	c #393428",
+	"Y-	c #1D1608",
+	"Z-	c #443E2D",
+	"`-	c #6C6452",
+	" ;	c #B6AC9A",
+	".;	c #DCCEBC",
+	"+;	c #AB9D88",
+	"@;	c #8D806A",
+	"#;	c #A0957E",
+	"$;	c #B6AB93",
+	"%;	c #C7BFA7",
+	"&;	c #BFB6A1",
+	"*;	c #40382A",
+	"=;	c #625A4A",
+	"-;	c #DBD2C4",
+	";;	c #1C140B",
+	">;	c #261D0F",
+	",;	c #D0C6AF",
+	"';	c #2E220C",
+	");	c #4A3E34",
+	"!;	c #A89C83",
+	"~;	c #160A01",
+	"{;	c #A19684",
+	"];	c #756D5F",
+	"^;	c #897C63",
+	"/;	c #2B1F0B",
+	"(;	c #4A4231",
+	"_;	c #CDC6BA",
+	":;	c #F2EEE3",
+	"<;	c #FCFBF3",
+	"[;	c #C1BDB7",
+	"};	c #0D0A03",
+	"|;	c #2B271E",
+	"1;	c #6E695F",
+	"2;	c #C9C5B8",
+	"3;	c #F5F1E3",
+	"4;	c #DED2C2",
+	"5;	c #A19582",
+	"6;	c #786C57",
+	"7;	c #453B23",
+	"8;	c #1E140D",
+	"9;	c #9E947A",
+	"0;	c #B9AE97",
+	"a;	c #1F1506",
+	"b;	c #140800",
+	"c;	c #C7BCAB",
+	"d;	c #584C41",
+	"e;	c #160B00",
+	"f;	c #CFC5AC",
+	"g;	c #5F533C",
+	"h;	c #2B1F18",
+	"i;	c #BBAF98",
+	"j;	c #170C08",
+	"k;	c #867C6A",
+	"l;	c #968E81",
+	"m;	c #4A3F2C",
+	"n;	c #AFA695",
+	"o;	c #CFC7BB",
+	"p;	c #EBE3D9",
+	"q;	c #FFFDF4",
+	"r;	c #DEDAD2",
+	"s;	c #66635D",
+	"t;	c #CCC9C2",
+	"u;	c #F7F6EF",
+	"v;	c #FDFAF2",
+	"w;	c #EBE5DB",
+	"x;	c #FCF8EB",
+	"y;	c #E8E0CF",
+	"z;	c #A79F8C",
+	"A;	c #574F39",
+	"B;	c #261C04",
+	"C;	c #362C15",
+	"D;	c #786C52",
+	"E;	c #C7BBA2",
+	"F;	c #332516",
+	"G;	c #271904",
+	"H;	c #AA9B87",
+	"I;	c #80715F",
+	"J;	c #030000",
+	"K;	c #B0A58E",
+	"L;	c #857A65",
+	"M;	c #2A1F10",
+	"N;	c #BCB19B",
+	"O;	c #120A0A",
+	"P;	c #766F5E",
+	"Q;	c #B4AFA3",
+	"R;	c #A39886",
+	"S;	c #B3AB9A",
+	"T;	c #797062",
+	"U;	c #C7BFB3",
+	"V;	c #F4ECE2",
+	"W;	c #FEFBF3",
+	"X;	c #FFFDF7",
+	"Y;	c #F5F1EC",
+	"Z;	c #FFFBF7",
+	"`;	c #FCF7EF",
+	" >	c #DED5C4",
+	".>	c #AEA693",
+	"+>	c #766E58",
+	"@>	c #312810",
+	"#>	c #1E1400",
+	"$>	c #685C41",
+	"%>	c #988B70",
+	"&>	c #5C4D34",
+	"*>	c #897860",
+	"=>	c #AA9A82",
+	"->	c #B2A590",
+	";>	c #928773",
+	">>	c #190F0A",
+	",>	c #B8AF9B",
+	"'>	c #2E2716",
+	")>	c #767163",
+	"!>	c #B4AB9A",
+	"~>	c #4F4535",
+	"{>	c #362D1D",
+	"]>	c #B6AE9F",
+	"^>	c #F2EADF",
+	"/>	c #FAF2E8",
+	"(>	c #FDF8EF",
+	"_>	c #FAF6F0",
+	":>	c #FBF8F3",
+	"<>	c #F9F6F2",
+	"[>	c #F8F2EA",
+	"}>	c #FAF3E4",
+	"|>	c #D3CCBA",
+	"1>	c #A59E8B",
+	"2>	c #7A725C",
+	"3>	c #31280D",
+	"4>	c #0E0300",
+	"5>	c #625638",
+	"6>	c #AFA084",
+	"7>	c #57472D",
+	"8>	c #140300",
+	"9>	c #77654B",
+	"0>	c #AC9980",
+	"a>	c #090000",
+	"b>	c #9E927B",
+	"c>	c #877C68",
+	"d>	c #221912",
+	"e>	c #9D9782",
+	"f>	c #1E1910",
+	"g>	c #9D9B91",
+	"h>	c #928A7A",
+	"i>	c #534B39",
+	"j>	c #857D6B",
+	"k>	c #C8C0AE",
+	"l>	c #E9E0D1",
+	"m>	c #F5EEDE",
+	"n>	c #FCF5EA",
+	"o>	c #FDF7EE",
+	"p>	c #FBF7F1",
+	"q>	c #F4EEE4",
+	"r>	c #EFE7D6",
+	"s>	c #BFB8A5",
+	"t>	c #B3AB96",
+	"u>	c #6C6349",
+	"v>	c #241A00",
+	"w>	c #140900",
+	"x>	c #847558",
+	"y>	c #AFA181",
+	"z>	c #443523",
+	"A>	c #1B0A00",
+	"B>	c #7D6C50",
+	"C>	c #79674C",
+	"D>	c #1D0E00",
+	"E>	c #897D63",
+	"F>	c #40361F",
+	"G>	c #3C3524",
+	"H>	c #65604E",
+	"I>	c #827F7A",
+	"J>	c #948F7C",
+	"K>	c #B2AA97",
+	"L>	c #D5CDB8",
+	"M>	c #E0D8C4",
+	"N>	c #EEE6D2",
+	"O>	c #F7EEDE",
+	"P>	c #F6EEE0",
+	"Q>	c #F2EBE1",
+	"R>	c #EAE3DB",
+	"S>	c #E1DACD",
+	"T>	c #D6CEBA",
+	"U>	c #B5AB97",
+	"V>	c #ABA08A",
+	"W>	c #544A2E",
+	"X>	c #1F1400",
+	"Y>	c #382D11",
+	"Z>	c #AB9E7E",
+	"`>	c #746646",
+	" ,	c #2D1E0F",
+	".,	c #2E1D04",
+	"+,	c #8B7A5D",
+	"@,	c #3C2C1C",
+	"#,	c #231504",
+	"$,	c #7E7257",
+	"%,	c #170C01",
+	"&,	c #736C58",
+	"*,	c #A4A199",
+	"=,	c #FEFEFE",
+	"-,	c #B9B4A1",
+	";,	c #A29A86",
+	">,	c #C2BBA1",
+	",,	c #D2C8AF",
+	"',	c #E0D5BD",
+	"),	c #E8DECA",
+	"!,	c #E6DDCD",
+	"~,	c #DFD6C9",
+	"{,	c #D2CABF",
+	"],	c #C8BEB0",
+	"^,	c #B8AD98",
+	"/,	c #B5A992",
+	"(,	c #7F725A",
+	"_,	c #271A01",
+	":,	c #2E2003",
+	"<,	c #887B5B",
+	"[,	c #B2A585",
+	"},	c #4B3D1E",
+	"|,	c #211200",
+	"1,	c #5C4D31",
+	"2,	c #736349",
+	"3,	c #1C0C00",
+	"4,	c #77684E",
+	"5,	c #4F4229",
+	"6,	c #41351D",
+	"7,	c #B1ACA1",
+	"8,	c #98937B",
+	"9,	c #A9A185",
+	"0,	c #B8AC91",
+	"a,	c #C6B99E",
+	"b,	c #D1C5AD",
+	"c,	c #D1C5B1",
+	"d,	c #C8BFAE",
+	"e,	c #BCB2A5",
+	"f,	c #B0A494",
+	"g,	c #A3967E",
+	"h,	c #9A8A73",
+	"i,	c #504128",
+	"j,	c #271804",
+	"k,	c #6A5D3D",
+	"l,	c #B8AC8B",
+	"m,	c #817453",
+	"n,	c #241700",
+	"o,	c #3F3118",
+	"p,	c #8D7D63",
+	"q,	c #392911",
+	"r,	c #45362A",
+	"s,	c #796A4F",
+	"t,	c #332710",
+	"u,	c #B8AE99",
+	"v,	c #A59F89",
+	"w,	c #938B6F",
+	"x,	c #A2987A",
+	"y,	c #B2A488",
+	"z,	c #BCAE94",
+	"A,	c #BBAD96",
+	"B,	c #B4A692",
+	"C,	c #A79988",
+	"D,	c #998B76",
+	"E,	c #8C7D64",
+	"F,	c #4D3C22",
+	"G,	c #2D1D04",
+	"H,	c #574828",
+	"I,	c #B5A686",
+	"J,	c #918462",
+	"K,	c #291C07",
+	"L,	c #36290B",
+	"M,	c #7B6D4E",
+	"N,	c #4C3E21",
+	"O,	c #403217",
+	"P,	c #7C6E54",
+	"Q,	c #574A31",
+	"R,	c #9A907E",
+	"S,	c #877B65",
+	"T,	c #94856D",
+	"U,	c #A29278",
+	"V,	c #A5957B",
+	"W,	c #A19075",
+	"X,	c #98876C",
+	"Y,	c #897759",
+	"Z,	c #7A6749",
+	"`,	c #493617",
+	" '	c #483918",
+	".'	c #AA9B7A",
+	"+'	c #8F805F",
+	"@'	c #3F300F",
+	"#'	c #322605",
+	"$'	c #685C3B",
+	"%'	c #403516",
+	"&'	c #423717",
+	"*'	c #7F7559",
+	"='	c #9E957E",
+	"-'	c #9F9384",
+	";'	c #8D7C64",
+	">'	c #8E7D62",
+	",'	c #8F7D5F",
+	"''	c #857252",
+	")'	c #7F6A4B",
+	"!'	c #857151",
+	"~'	c #6E5B3B",
+	"{'	c #7A6746",
+	"]'	c #968666",
+	"^'	c #5F502F",
+	"/'	c #392A09",
+	"('	c #695C3C",
+	"_'	c #6E6242",
+	":'	c #584D2D",
+	"<'	c #8C8369",
+	"['	c #A79984",
+	"}'	c #A6977F",
+	"|'	c #A8987D",
+	"1'	c #9E8D72",
+	"2'	c #8E7C5F",
+	"3'	c #827051",
+	"4'	c #867456",
+	"5'	c #837353",
+	"6'	c #79684B",
+	"7'	c #706143",
+	"8'	c #7F7053",
+	"9'	c #87795D",
+	"0'	c #CBBEAA",
+	"a'	c #B1A48D",
+	"b'	c #9E8F76",
+	"c'	c #8F7F66",
+	"d'	c #837258",
+	"e'	c #9C8C72",
+	"f'	c #A4947A",
+	"g'	c #9D8D73",
+	"h'	c #A4957B",
+	"i'	c #A99C84",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                    . +   @ # $ % & * = - ; >                                                                   ",
+	"                                , ' ) ! ~ { ] ^ / ( _ : < [ } | 1                                                               ",
+	"                              2 3 4 5 6 7 8 9 0 a b c d e c f g h i                                                             ",
+	"                          j k l m n o p q r s t u v w x y z A B C D E                                                           ",
+	"                        F G H I J K L M N O P Q R S T U V W X Y Z `  .                                                          ",
+	"                        ..+. at .#.$.%.&.*.=.-.;.>.,.'.).!.a ~.S {.].^./.                                                          ",
+	"                    (._.:.<.[.}.|.1.2.3.4.5.6.7.8.    9.0.a.b.c.d.e.f.g.                                                        ",
+	"                  h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.                                                        ",
+	"                  I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.X.Y.Z.`. +.+++ at +#+$+%+                                                        ",
+	"                  &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+                                                      ",
+	"                7+8+9+0+a+b+c+  d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+                                                      ",
+	"                y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+v+Y+Z+`+                                                    ",
+	"                 @. at +@0.@@#@$@%@&@*@=@-@;@>@, at C '@)@!@~@{@]@^@/@(@_@:@<@[@}@                                                    ",
+	"                |@1 at 2@3 at 4@5 at 6@7 at 8@9 at 0@a at b@c at d@e at f@g at h@i at j@k at l@m at n@o at p@q at r@s@                                                    ",
+	"                t at u@v at w@x at c y at z@A at B@C at D@E at F@G at H@I at J@K at L@M at N@O at P@Q at R@S at T@U at V@W@                                                  ",
+	"                X at Y@Z@`@ #.#+#@###$#%#&#*#=#-#;#>#X.,#'#)#!#~#{#]#^#/#(#_#:#<#                                                  ",
+	"                [#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#b#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#                                              ",
+	"                t#E at u#v#w#x#c y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#                                                ",
+	"                X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$;$>$,$'$)$!$~${$]$s#^$/$($_$:$<$[$                                                ",
+	"                }$|$1$2$3$4$5$6$7$8$9$0$a$b$c$d$, at e$>@f$g$h$i$j$k$l$m$($n$o$p$q$r$                                              ",
+	"                s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$                                              ",
+	"                  Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>%,%'%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%'+                                            ",
+	"                  2%3%4%5%6%7%8%9%0%a%b%c%d%e%f%g%h%i%j%d$k%l%m%X.n%o%p%q%r%s%t%u%v%                                            ",
+	"                    w%x%y%z%A%s#B%##C%D%E%S F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%                                            ",
+	"                    Z%`% &.&+&]#@&#&$&%&&&*&=&-&;&>&,&'&)&!&~&{&]&^&/&(&_&{$:&<&[&}&                                            ",
+	"                    |&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&g&h&i&j&k&l&{$m&n&o&p&q&r&s&t&                                            ",
+	"                      u&v&w&x&y&~.z&A&B&C&D&E&F&G&H&k&I&J&K&{$L&M&*@N&O&P&Q&R&S&T&U&V&                                          ",
+	"                      W&b at X&Y&Z&`& *.*+*@*s##*$*%*&*M **=*-*;*'+>*,*'*)*!*~*{*]*^*S#/*                                          ",
+	"                        (*_*:*<*[*}*|*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*c g*h*i*j*k*l*m*                                          ",
+	"                        n*o*p*q*r*s*'+t*u*v*w*x*y*z*A*B*C*D*E*m%F*l&G*H*I*J*K*L*M*N*O*P*                                        ",
+	"                          Q*R*S*T*7.U*V*W*X*Y*Z*`* =S#.=+=@=#=$=%=&=*===g*-=;=>=,='=)=!=                                        ",
+	"                        ~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=6=7=8=P%9=0=a=b=c=d=e=f=g=h=i=j=                                      ",
+	"                          k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C=D=##E=F=G=H=I=J=K=L=M=N=O=                                      ",
+	"                          P=Q=R=S=T=S U=V=W=X=Y=Z=`= -.-+- at -#-P+$-%-&-*-=---;->-,-'-)-!-~-{-                                    ",
+	"                          ]-^-/-(-_-:-<-c [-}-|-1-2-3-4-5-6-7-8-9-0-a-9%b-c-d-e-f-g-h-i-j-k-                                    ",
+	"                          l-m-n-o-p-5$q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-m%L-M-N-O-P-                                    ",
+	"                            Q-R-S-T-U-V-1*W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];                                    ",
+	"                            ^;/;(;_;:;<;[;};|;1;2;3;'+4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;                                    ",
+	"                              m;n;o;p;q;r;s;t;u;v;w;x;y;z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;                                    ",
+	"                              R;S;T;U;V;7.W;X;Y;Z;`;o= >.>+>@>#>$>%>&>m%*>=>,#->;>>>,>'>)>                                      ",
+	"                              !>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4>5>6>7>8>9>0>a>b>c>d>e>f>g>                                      ",
+	"                              h>i>j>k>l>m>n>o>v;p>q>r>s>t>u>v>w>x>y>z>A>B>C>D>E>F>G>H>I>                                        ",
+	"                                J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,*,=,                                        ",
+	"                                -,;,>,,,',),!,~,{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,                                            ",
+	"                                  8,9,0,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,                                              ",
+	"                                  v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,                                                  ",
+	"                                    R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'%'&'*'='                                                    ",
+	"                                      -'4.;'>',''')'!'~'{']'^'/'('_':'<'                                                        ",
+	"                                          ['}'|'1'2'3'4'5'6'7'8'9'                                                              ",
+	"                                            0'a'b'c'd'e'f'g'h'i'                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                "
+};
diff --git a/src/include/net_ui.h b/src/include/net_ui.h
new file mode 100644
index 0000000..d0bc482
--- /dev/null
+++ b/src/include/net_ui.h
@@ -0,0 +1,77 @@
+// generated by Fast Light User Interface Designer (fluid) version 1.0302
+
+#ifndef net_ui_h
+#define net_ui_h
+#include <FL/Fl.H>
+#include <FL/Fl_Double_Window.H>
+#include "my_UI.h"
+#include <FL/Fl_Menu_Bar.H>
+extern Fl_Menu_Bar *mnu_bar;
+extern void cb_mnuOpen(Fl_Menu_*, void*);
+extern void cb_mnuExit(Fl_Menu_*, void*);
+extern void cb_mnuEditor(Fl_Menu_*, void*);
+extern void cb_mnuConfig(Fl_Menu_*, void*);
+extern void cb_mnuHelpContent(Fl_Menu_*, void*);
+extern void cb_mnuAbout(Fl_Menu_*, void*);
+extern my_UI *myUI;
+#include <FL/Fl_Box.H>
+extern Fl_Box *txtNcallins;
+#include <FL/Fl_Group.H>
+extern Fl_Group *net_grp1;
+extern Fl_Box *ptr_left;
+extern Fl_Box *ptr_right;
+extern Fl_Group *net_grp2;
+extern Fl_Box *txtTitles;
+extern Fl_Box *txtLine[15];
+extern Fl_Group *dbSelectGroup;
+extern Fl_Box *inpLoginSuffix;
+extern Fl_Box *inpLoginPrefix;
+extern Fl_Box *inpLoginArea;
+extern Fl_Group *net_grp3;
+extern Fl_Box *txtPick[10];
+extern Fl_Box *txtPickArrows;
+extern Fl_Box *bx_suffix;
+extern Fl_Box *bx_prefix;
+extern Fl_Box *bx_area;
+extern Fl_Box *txtInfo;
+Fl_Double_Window* newNetControl();
+extern Fl_Menu_Item menu_mnu_bar[];
+#define mnuOpen (menu_mnu_bar+1)
+#define mnuExit (menu_mnu_bar+2)
+#define mnuEditor (menu_mnu_bar+4)
+#define mnuConfig (menu_mnu_bar+5)
+#define mnuLogIns (menu_mnu_bar+6)
+#define mnuSize (menu_mnu_bar+7)
+#define mnu_Content (menu_mnu_bar+9)
+#define mnu_About (menu_mnu_bar+10)
+#include <FL/Fl_Tabs.H>
+extern Fl_Tabs *tabsConfig;
+#include <FL/Fl_Check_Button.H>
+extern Fl_Check_Button *btn_new_login_is_up;
+extern Fl_Check_Button *btnOpenEditor;
+extern Fl_Check_Button *btn_current_call_in_is_up;
+extern Fl_Group *tabGroupColors;
+#include <FL/Fl_Output.H>
+#include <FL/Fl_Button.H>
+extern Fl_Output *txtSample[5];
+extern Fl_Button *btnFg[5];
+extern Fl_Button *btnBg[5];
+extern Fl_Group *tabGroupPriority;
+#include <FL/Fl_Input.H>
+extern Fl_Input *cfgP1;
+extern Fl_Input *inpStatesList1;
+extern Fl_Input *cfgP2;
+extern Fl_Input *inpStatesList2;
+extern Fl_Input *cfgP3;
+extern Fl_Input *inpStatesList3;
+extern Fl_Check_Button *chkAutoPriority;
+#include <FL/Fl_Return_Button.H>
+extern void cb_btnCloseConfig(Fl_Return_Button*, void*);
+extern Fl_Return_Button *btnConfigOK;
+Fl_Double_Window* configDialog();
+#include <FL/Fl_Browser.H>
+extern Fl_Browser *log_in_view;
+extern Fl_Button *btn_copy_to_clipboard;
+extern Fl_Button *btn_close_log_ins;
+Fl_Double_Window* Log_ins_dialog();
+#endif
diff --git a/src/include/netedits.h b/src/include/netedits.h
new file mode 100644
index 0000000..cd23388
--- /dev/null
+++ b/src/include/netedits.h
@@ -0,0 +1,105 @@
+//======================================================================
+// netedits.h
+//
+// Authors:
+//
+// Copyright (C) 2013, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+#ifndef netedits_h
+#define netedits_h
+#include <FL/Fl.H>
+#include <FL/Fl_Window.H>
+#include "date.h"
+#include "calendar.h"
+
+Fl_Window *newEditWindow(bool);
+Fl_Window *getEditWindow(void);
+
+#include <FL/Fl_Menu_Bar.H>
+extern Fl_Menu_Bar *mbarMain;
+extern void cb_mnuSearchCallsign(Fl_Menu_*, void*);
+extern void cb_mnuSearchNetNbr(Fl_Menu_*, void*);
+extern void cb_mnuBrowseCallsign(Fl_Menu_*, void*);
+extern void cb_mnuBrowseNetNbr(Fl_Menu_*, void*);
+extern void cb_mnuQRZ(Fl_Menu_*, void*);
+extern void cb_mnuFldigiEditor(Fl_Menu_*, void*);
+#include <FL/Fl_Input.H>
+extern Fl_Input *inpPrefix;
+extern Fl_Input *inpArea;
+extern Fl_Input *inpSuffix;
+extern Fl_Input *inpNickname;
+extern Fl_Input *inpNetNbr;
+extern Fl_Input *inpFname;
+extern Fl_Input *inpLname;
+extern Fl_Input *inpAddress;
+extern Fl_Input *inpCity;
+extern Fl_Input *inpState;
+extern Fl_Input *inpZip;
+extern Fl_Input *inpPhone;
+//extern Fl_Input *inpBirthday;
+extern Fl_DateInput *inpBirthday;
+extern Fl_Input *inpSpouse;
+extern Fl_Input *inpSpBirthday;
+#include <FL/Fl_Output.H>
+extern Fl_DateInput *txtLogDate;
+#include <FL/Fl_Button.H>
+extern void cbGoFirstRec(Fl_Button*, void*);
+extern Fl_Button *btnFirst;
+extern void cbGoPrevRec(Fl_Button*, void*);
+extern Fl_Button *btnPrev;
+extern void cbGoNextRec(Fl_Button*, void*);
+extern Fl_Button *btnNext;
+extern void cbGoLastRec(Fl_Button*, void*);
+extern Fl_Button *btnLast;
+extern void cb_btnNewSave(Fl_Button*, void*);
+extern Fl_Button *btnNewSave;
+extern void cb_btnDelete(Fl_Button*, void*);
+extern Fl_Button *btnDelete;
+extern void cb_btnUpdateCancel(Fl_Button*, void*);
+extern Fl_Button *btn2Queue;
+extern void cb_btn2Queue(Fl_Button *, void *);
+extern Fl_Button *btnUpdateCancel;
+extern void cb_CloseEditor(Fl_Button*, void*);
+extern Fl_Button *btnClose;
+extern Fl_Output *lblFileName;
+extern Fl_Output *lblNumRecs;
+extern Fl_Input *inpCallsign;
+extern Fl_DateInput *inpPrevDate;
+extern Fl_Input *inpNbrLogins;
+extern Fl_Input *inpStatus;
+extern Fl_DateInput *inpJoined;
+extern Fl_Input *inpEmail;
+extern Fl_Input *inpComment1;
+extern Fl_Input *inpComment2;
+
+extern Fl_Menu_Item menu_mbarMain[];
+
+#define mnuSort (menu_mbarMain+0)
+#define mnuSortByAPS (menu_mbarMain+1)
+#define mnuSortBySAP (menu_mbarMain+2)
+#define mnuSortByNetNbr (menu_mbarMain+3)
+#define mnuSearch (menu_mbarMain+5)
+#define mnuSearchCallsign (menu_mbarMain+6)
+#define mnuSearchNetNbr (menu_mbarMain+7)
+#define mnuBrowse (menu_mbarMain+9)
+#define mnuBrowseCallsign (menu_mbarMain+10)
+#define mnuBrowseNetNbr (menu_mbarMain+11)
+
+#endif
diff --git a/src/include/netshared.h b/src/include/netshared.h
new file mode 100644
index 0000000..00c8244
--- /dev/null
+++ b/src/include/netshared.h
@@ -0,0 +1,106 @@
+//======================================================================
+// netshared.h
+//
+// Authors:
+//
+// Copyright (C) 2013, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+#ifndef _NETSHARED
+#define _NETSHARED
+
+#include <string>
+
+#include "net_ui.h"
+#include "netutils.h"
+#include "netedits.h"
+
+#include "csvdb.h"
+
+extern std::string home_dir;
+extern std::string selected_file;
+
+extern csvdb netdb;
+
+struct brwsStruct {
+	int  recN;
+	char prefix[4];
+	char area[2];
+	char suffix[4];
+	char netnbr[5];
+};
+
+enum State {NEW, UPDATE, ADD, MODIFY};
+enum schema {ORIG, EXTENDED};
+
+extern Fl_Window *main_window;
+//extern Fl_Window *editor;
+
+extern brwsStruct *brwsData;
+extern State editstate;
+
+extern size_t currec;
+extern size_t brwsnum;
+
+extern char sSimpleName[];
+
+extern Fl_Input *inpPrefix;
+
+extern void saveCurRecord ();
+extern void clearEditForm ();
+extern void appendNewRecord ();
+
+extern char *uppercase (const char *);
+extern char *trim (const char *);
+
+extern void toggleState ();
+
+extern void getBrwsData ();
+extern int NetNbrCompare (const void *, const void *);
+extern int SAPCompare (const void *, const void *);
+extern int APSCompare (const void *, const void *);
+extern void AddNewRecord (char *prefix, char *area, char *suffix);
+extern void setAddState ();
+
+extern void SortBySAP ();
+extern void SortByNetNbr ();
+extern void SortByAPS ();
+
+extern void closeDB ();
+extern void openDB (char *);
+extern void dispRec ();
+extern void clearEditForm ();
+extern void setFields ();
+extern void saveCurRecord ();
+extern void appendNewRecord ();
+extern void appendNewRecord (csvRecord &rec);
+extern int  add_fldigi_record(void);
+
+extern void cb_F12 (int);
+extern void cb_ShiftF12(void);
+extern void cbEditor ();
+extern void cbCloseEditor ();
+extern void cbConfig ();
+extern void cbCloseConfig ();
+
+extern void change_size();
+extern bool split_call(std::string src, std::string &p, std::string &a, std::string &s);
+
+#endif
+
diff --git a/src/include/netsupport.h b/src/include/netsupport.h
new file mode 100644
index 0000000..9b67749
--- /dev/null
+++ b/src/include/netsupport.h
@@ -0,0 +1,49 @@
+//======================================================================
+// netsupport.h
+//
+// Authors:
+//
+// Copyright (C) 2013, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+#ifndef _NETSUPPORT
+#define _NETSUPPORT
+
+#include <string>
+
+extern void openDB(std::string);
+extern void dispRec();
+extern void closeDB();
+
+extern void cleanExit();
+extern void cb_btnNewSave (Fl_Button *, void *);
+extern void cb_btnDelete (Fl_Button *, void *);
+extern void cb_btnUpdateCancel (Fl_Button *, void *);
+extern void cb_mnuConfig (Fl_Menu_ *, void *);
+extern void cb_btnCloseConfig (Fl_Return_Button *, void *);
+
+extern void cb_mnuMigrate (Fl_Menu_ *, void*);
+
+extern void visit_URL(void *);
+
+extern void open_log_ins();
+extern void copy_to_clipboard();
+
+#endif
+
diff --git a/src/include/netutils.h b/src/include/netutils.h
new file mode 100644
index 0000000..9413d6b
--- /dev/null
+++ b/src/include/netutils.h
@@ -0,0 +1,44 @@
+// generated by Fast Light User Interface Designer (fluid) version 1.0302
+
+#ifndef netutils_h
+#define netutils_h
+#include <FL/Fl.H>
+#include <FL/Fl_Double_Window.H>
+#include <FL/Fl_Browser.H>
+extern Fl_Browser *brwsCallsign;
+#include <FL/Fl_Button.H>
+extern void cb_btnCancelCallsignSearch(Fl_Button*, void*);
+extern Fl_Button *btnCancelCallsignSearch;
+extern void cb_OkCallsignSearch(Fl_Button*, void*);
+extern Fl_Button *btn_OkCallsignSearch;
+Fl_Double_Window* winCallsignBrowse();
+extern Fl_Browser *brwsNetNbr;
+extern void cb_btnCancelNetNbrSearch(Fl_Button*, void*);
+extern Fl_Button *btnCancelNetNbrSearch;
+extern void cb_OkNetNbrSearch(Fl_Button*, void*);
+extern Fl_Button *btn_OkNetNbrSearch;
+Fl_Double_Window* winNetNbrBrowse();
+extern Fl_Double_Window *winSearchCallsignDialog;
+#include <FL/Fl_Input.H>
+extern Fl_Input *sSrchPrefix;
+extern Fl_Input *sSrchArea;
+extern Fl_Input *sSrchSuffix;
+extern void cb_btnSearchCancel(Fl_Button*, void*);
+extern Fl_Button *btnSearchCancel;
+#include <FL/Fl_Return_Button.H>
+extern void cb_btnSearchOK(Fl_Return_Button*, void*);
+extern Fl_Return_Button *btnSearchOK;
+#include <FL/Fl_Box.H>
+Fl_Double_Window* newSearchCallsignDialog();
+extern Fl_Double_Window *winSearchNetNbrDialog;
+extern Fl_Input *sSrchNetNbr;
+extern void cb_btnSearchNetNbrCancel(Fl_Button*, void*);
+extern Fl_Button *btnSearchNetNbrCancel;
+extern void cb_btnSearchNetNbrOK(Fl_Return_Button*, void*);
+extern Fl_Return_Button *btnSearchNetNbrOK;
+Fl_Double_Window* newSearchNetNbrDialog();
+extern Fl_Double_Window *dlgAbout;
+#include <FL/Fl_Group.H>
+extern Fl_Group *lblVersion;
+Fl_Double_Window* newAboutDialog();
+#endif
diff --git a/src/include/netversion.h b/src/include/netversion.h
new file mode 100644
index 0000000..cbfc8bd
--- /dev/null
+++ b/src/include/netversion.h
@@ -0,0 +1,30 @@
+//======================================================================
+// netversion.h
+//
+// Authors:
+//
+// Copyright (C) 2013, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+#define NET_MAJOR_VERSION "5"
+#define NET_MINOR_VERSION "5"
+#define NET_PATCH_VERSION "0"
+
+#define NET_VERSION (NET_MAJOR_VERSION"."NET_MINOR_VERSION"."NET_PATCH_VERSION)
+
diff --git a/src/include/qrzlib.h b/src/include/qrzlib.h
new file mode 100644
index 0000000..05e06b1
--- /dev/null
+++ b/src/include/qrzlib.h
@@ -0,0 +1,246 @@
+#ifndef QRZHEADER
+
+//#define HAVE_EMAIL 1
+
+
+// QRZ CDROM data structures
+
+/*
+**     Index Header Block Definition (Version 2)
+**     (applies to all QRZ CDROMS from Version 2 onward) 
+**
+**     This block is located at the start of each index
+*/
+
+typedef struct {
+  char  dataname[16];    /* Name of the data file            */
+  char  bytesperkey[8];  /* Data Bytes per Index Item        */
+  char  numkeys[8];      /* Number of items in this index    */
+  char  keylen[8];       /* Length of each key item in bytes */
+  char  version[8];      /* Database Version ID              */
+} index_header;
+
+/*
+
+Index Usage
+
+The name index is set to a maximum of 16 characters with longer names
+being truncated.   Names are stored in last-first format with a space
+between the names.  The city/state index uses 12 characters per entry,
+the callsign index 6 characters and the zip code index 5 characters.
+
+The data which follows the header is simply a long list of single field
+records. The records are tightly packed on 'bytesperkey' boundaries
+without separators.  There is no guarantee of a null terminator on any
+index record entry.
+
+When the program qrz.exe is run it first searches for a drive
+containing the base directory \CALLBK .  Next, it loads all four index
+files (callbkc.idx, callbkn.idx, callbks.idx and callbkz.idx) into
+tables in memory.  These tables were kept small so as not to place an
+undue RAM requirement on the user's system.
+
+Next, when a user specifies a field and key to search, the program
+searches the relevant index table and returns the closest match lower
+(or equal to) the supplied key.  The table position of this key is then
+taken and multiplied by the 'bytesperkey' value to arrive at a database
+file offset.  This offset is then used to perform the first and only
+seek into the database.  Once on position within the file, a sequential
+search is performed to return the match.  The search terminates at the
+next index key value if the field is not found.
+
+The database files all have the same format.  The records each consist
+of comma separated fields which end with a single newline '\n'  (ASCII
+0xa) character.  Blank fields are simply stored as a comma.  Every
+record has the same number of commas in it.  Actual comma's in the data
+field are stored as a semi-colon ';' which should be replaced by a
+comma in the user's output formatting routine.
+
+
+Example:
+
+AA7BQ ,LLOYD,,FRED L,,53340,90009,00009,8215 E WOOD DR,SCOTTSDALE,AZ,
+85260,E,KJ6RK,A
+
+The callsign database is sorted by SUFFIX, AREA, PREFIX.
+
+For example, the following order would be observed:
+
+QE24AA
+...
+ZZ99ZZ
+...
+A 0A  
+...
+AA0AAA
+...
+ZZ9ZZZ
+
+This ordering also pertains to the index file since it is just a snaphot of
+every nth record in the database.
+
+*/
+
+/*
+**    Standard Record Field Offsets
+*/
+#define CALL            0
+#define LNAME           1
+#define JR              2
+#define FNAME           3
+#define MI              4
+#define DOB             5
+#define EFDATE          6
+#define EXPDATE         7
+#define MAIL_STR        8
+#define MAIL_CITY       9
+#define MAIL_ST         10
+#define MAIL_ZIP        11
+#define CLASS           12
+#define P_CALL          13
+#define P_CLASS         14
+
+/*
+
+The fields JR and MI were obsoleted by the FCC in July 1994.
+
+The callsign fields are arranged in a strict "ccdccc" columnar format
+where 'c' represents a letter and 'd' a digit. Callsigns which do not
+conform to the "ccdccc" format are space filled in the relevant
+positions.  This field is rearranged to the proper layout by the user
+program's output formatting routines.
+
+All dates are stored in 5 character Julian format, e.g. 93003 equals
+January 3, 1993.  Dates before 1900 or after year 2000 must be
+determined by their context usage.  In other words, if the resultant
+age does not make sense, then it's wrong.  For example, all licenses
+expire in the future so 02 is 2002.  Birthdays are more difficult
+but most can be determined to be greater than 10 years old.  This is
+not a perfect method, but it does yield satisfactory results.
+
+Some folks may notice that the database no longer contains station
+location information.  This information is no longer supplied nor
+available from the FCC since it is no longer a part of their record
+keeping (See the May 1993 QST for more info).
+
+
+Cross Reference Information
+
+Callsigns in the database are now cross-referenced to both the current
+and the previous call sign for each entry in which they are available.
+A cross reference record takes the form of 'old,new' with no other
+information in the record.  A record can be identified as a cross
+reference either one of two ways:
+
+    First, if the record length is less than 15 characters, then
+    it is a cross reference record.
+
+    Secondly, if the record contains only one comma "," , then
+    it is a cross reference record.
+
+It is not necessary to test for both cases, either will do.
+
+When a cross reference record is encountered, you must fetch the second
+field and restart the search to return the primary reference.
+
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+extern char *QRZpath;
+extern char *Composite( char * );
+
+class QRZ 
+{
+  private:
+    char          criteria;
+    index_header  idxhdr;
+    char          *data;
+    char          *index;
+    char          *top;
+    FILE          *idxfile;
+    long          idxsize;
+    FILE          *datafile;
+    long          dataoffset;
+    long          databytesread;
+    char          *dfptr;
+    char          *endofline;
+    char          *idxptr;
+    int           found;
+    char          recbuffer[512];
+    unsigned int  datarecsize;
+    long          numkeys;
+    int           keylen;
+    void          OpenQRZFiles( char * );
+    int           FindCallsign( char * );
+    int           FindName( char * );
+    int           FindState( char * ); 
+    int           FindZip( char * );
+    int           ReadDataBlock( long );
+    int           nextrec();
+	bool		  hasImage;
+        
+    char *Qcall;
+    char *Qlname;
+    char *Qfname;
+    char *Qdob;
+    char *Qefdate;
+    char *Qexpdate;
+    char *Qmail_str;
+    char *Qmail_city;
+    char *Qmail_st;
+    char *Qmail_zip;
+    char *Qopclass;
+    char *Qp_call;
+    char *Qimagefname;
+    char *Qp_class;
+
+    int  QRZvalid;
+        
+  public:
+    QRZ( char * );
+    QRZ( char *, char );
+    ~QRZ();
+
+    int  CallComp( char *, char * );
+    int  CompState( char *, char *, char * );
+
+    int  getQRZvalid();
+
+    int  FindRecord( char * );
+    int  NextRecord();
+    int  ReadRec();
+    int  GetCount( char * );
+    char *GetCall();
+    char *GetLname();
+    char *GetFname();
+    char *GetDOB();
+    char *GetEFdate();
+    char *GetEXPdate();
+    char *GetStreet();
+    char *GetCity();
+    char *GetState();
+    char *GetZIP();
+    char *GetOPclass();
+    char *GetPriorCall();
+    char *GetPriorClass();
+    char *GetImageFileName();
+    char *CSV_Record();
+    char *Fmt_Record();
+	bool ImageExists();
+	char *ImageFileName() {return Qimagefname;};
+};
+
+extern char *QRZpath;
+extern void SetQRZdirectory(char *dir);
+extern int  filename_expand(char *to,int tolen, const char *from);
+
+#ifdef HAVE_EMAIL
+extern char *szEmail(char *);
+#endif
+
+#define QRZHEADER
+
+#endif
diff --git a/src/include/threads.h b/src/include/threads.h
new file mode 100644
index 0000000..d264c64
--- /dev/null
+++ b/src/include/threads.h
@@ -0,0 +1,139 @@
+// ----------------------------------------------------------------------------
+// threads.h
+//
+// Copyright (C) 2007-2009
+//		Stelios Bounanos, M0GLD
+//
+// This file is part of fldigi.
+//
+// Fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// Fldigi 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 fldigi.  If not, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef THREADS_H_
+#define THREADS_H_
+
+#include <config.h>
+
+#include <pthread.h>
+#include <stdint.h>
+
+#include <semaphore.h>
+#if !HAVE_SEM_TIMEDWAIT
+#  include <time.h>
+int sem_timedwait(sem_t* sem, const struct timespec* abs_timeout);
+#endif
+
+int sem_timedwait_rel(sem_t* sem, double rel_timeout);
+int pthread_cond_timedwait_rel(pthread_cond_t* cond, pthread_mutex_t* mutex, double rel_timeout);
+
+enum {
+	INVALID_TID = -1,
+	TRX_TID, QRZ_TID, RIGCTL_TID, NORIGCTL_TID, EQSL_TID, ADIF_RW_TID,
+	XMLRPC_TID,
+	ARQ_TID, ARQSOCKET_TID,
+	FLMAIN_TID,
+	NUM_THREADS, NUM_QRUNNER_THREADS = NUM_THREADS - 1
+};
+
+#ifdef __linux__
+void linux_log_tid(void);
+#  define LOG_THREAD_ID() linux_log_tid()
+#else
+#  define LOG_THREAD_ID()  /* nothing */
+#endif
+
+#if USE_TLS
+#       define THREAD_ID_TYPE __thread intptr_t
+#       define CREATE_THREAD_ID() thread_id_ = INVALID_TID
+#	define SET_THREAD_ID(x)   do { thread_id_ = (x); LOG_THREAD_ID(); } while (0)
+#	define GET_THREAD_ID()    thread_id_
+#else
+#       define THREAD_ID_TYPE pthread_key_t
+#	define CREATE_THREAD_ID() pthread_key_create(&thread_id_, NULL)
+#	define SET_THREAD_ID(x)   do { pthread_setspecific(thread_id_, (const void *)(x + 1)); LOG_THREAD_ID(); } while (0)
+#	define GET_THREAD_ID()    ((intptr_t)pthread_getspecific(thread_id_) - 1)
+#endif // USE_TLS
+extern THREAD_ID_TYPE thread_id_;
+
+
+#ifndef NDEBUG
+#  include "debug.h"
+bool thread_in_list(int id, const int* list);
+#  define ENSURE_THREAD(...)						\
+do {								\
+int id_ = GET_THREAD_ID();				\
+int t_[] = { __VA_ARGS__, INVALID_TID };		\
+if (!thread_in_list(id_, t_))				\
+LOG_ERROR("bad thread context: %d", id_);	\
+} while (0)
+#  define ENSURE_NOT_THREAD(...)					\
+do {								\
+int id_ = GET_THREAD_ID();				\
+int t_[] = { __VA_ARGS__, INVALID_TID };		\
+if (thread_in_list(id_, t_))				\
+LOG_ERROR("bad thread context: %d", id_);	\
+} while (0)
+#else
+#  define ENSURE_THREAD(...) ((void)0)
+#  define ENSURE_NOT_THREAD(...) ((void)0)
+#endif // ! NDEBUG
+
+
+// On POSIX systems we cancel threads by sending them SIGUSR2,
+// which will also interrupt blocking calls.  On woe32 we use
+// pthread_cancel and there is no good/sane way to interrupt.
+#ifndef __WOE32__
+#  define SET_THREAD_CANCEL()					\
+do {							\
+sigset_t usr2;					\
+sigemptyset(&usr2);				\
+sigaddset(&usr2, SIGUSR2);			\
+pthread_sigmask(SIG_UNBLOCK, &usr2, NULL);	\
+} while (0)
+#  define TEST_THREAD_CANCEL() /* nothing */
+#  define CANCEL_THREAD(t__) pthread_kill(t__, SIGUSR2)
+#else
+// threads have PTHREAD_CANCEL_ENABLE, PTHREAD_CANCEL_DEFERRED when created
+#  define SET_THREAD_CANCEL() /* nothing */
+#  define TEST_THREAD_CANCEL() pthread_testcancel()
+#  define CANCEL_THREAD(t__) pthread_cancel(t__);
+#endif
+
+#include "fl_lock.h"
+
+/// This ensures that a mutex is always unlocked when leaving a function or block.
+class guard_lock
+{
+public:
+	guard_lock(pthread_mutex_t* m);
+	~guard_lock(void);
+private:
+	pthread_mutex_t* mutex;
+};
+
+/// This wraps together a mutex and a condition variable which are used
+/// together very often for queues etc...
+class syncobj
+{
+	pthread_mutex_t m_mutex ;
+	pthread_cond_t m_cond ;
+public:
+	syncobj();
+	~syncobj();
+	pthread_mutex_t * mtxp(void) { return & m_mutex; }
+	void signal();
+	bool wait( double seconds );
+};
+
+#endif // !THREADS_H_
diff --git a/src/include/timeops.h b/src/include/timeops.h
new file mode 100644
index 0000000..feccf9e
--- /dev/null
+++ b/src/include/timeops.h
@@ -0,0 +1,59 @@
+// =====================================================================
+//
+// timeops.h
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// =====================================================================
+
+
+#ifndef TIMEOPS_H_
+#define TIMEOPS_H_
+
+#include <config.h>
+#include <time.h>
+#include <sys/time.h>
+#ifdef __MINGW32__
+#  include <pthread.h>
+#endif
+
+#if !HAVE_CLOCK_GETTIME
+enum clockid_t { CLOCK_REALTIME, CLOCK_MONOTONIC };
+int clock_gettime(clockid_t clock_id, struct timespec* tp);
+#endif
+
+struct timespec operator+(const struct timespec &t0, const double &t);
+struct timespec operator-(const struct timespec &t0, const struct timespec &t1);
+struct timespec& operator-=(struct timespec &t0, const struct timespec &t1);
+bool operator>(const struct timespec &t0, const struct timespec &t1);
+bool operator==(const struct timespec &t0, const struct timespec &t1);
+
+struct timeval operator+(const struct timeval &t0, const double &t);
+struct timeval operator-(const struct timeval &t0, const struct timeval &t1);
+struct timeval& operator-=(struct timeval &t0, const struct timeval &t1);
+bool operator>(const struct timeval &t0, const struct timeval &t1);
+bool operator==(const struct timeval &t0, const struct timeval &t1);
+
+#ifndef GMTIME_R
+extern struct tm *gmtime_r(const time_t *timer, struct tm *tmbuf);
+extern struct tm *localtime_r(const time_t *_Time,struct tm *_Tm);
+#endif
+
+#endif // TIMEOPS_H_
diff --git a/src/include/util.h b/src/include/util.h
new file mode 100644
index 0000000..8efab10
--- /dev/null
+++ b/src/include/util.h
@@ -0,0 +1,208 @@
+//======================================================================
+// util.h
+//
+// Authors:
+//
+// Copyright (C) 2013, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+//======================================================================
+
+/* This file is included by config.h */
+
+#ifndef UTIL_H
+#define UTIL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __STDC_FORMAT_MACROS
+#	define __STDC_FORMAT_MACROS 1
+#endif
+#include <inttypes.h>
+
+#ifndef powerof2
+#	define powerof2(n) ((((n) - 1) & (n)) == 0)
+#endif
+#ifndef MAX
+#	define MAX(a, b) (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef MIN
+#	define MIN(a, b) (((a) < (b)) ? (a) : (b))
+#endif
+#ifndef CLAMP
+#	define CLAMP(x, low, high) (((x)>(high))?(high):(((x)<(low))?(low):(x)))
+#endif
+#define WCLAMP(x, low, high) (((x)>(high))?(low):(((x)<(low))?(high):(x)))
+
+#ifdef __GNUC__
+#	if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
+#		define full_memory_barrier() __sync_synchronize()
+#		define read_memory_barrier() full_memory_barrier()
+#		define write_memory_barrier() full_memory_barrier()
+#	elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(__x86_64__)
+#		define full_memory_barrier() asm volatile ("lock; addl $0,0(%%esp)":::"memory")
+#		define read_memory_barrier() full_memory_barrier()
+#		define write_memory_barrier() full_memory_barrier()
+	/*
+	 These would be faster on SSE2-capable processors:
+	 #		define full_memory_barrier() asm volatile ("mfence":::"memory")
+	 #		define read_memory_barrier() asm volatile ("lfence":::"memory")
+	 #		define write_memory_barrier() asm volatile ("sfence":::"memory")
+	 */
+#	elif defined(__ppc__) || defined(__powerpc__) || defined(__PPC__)
+#		define full_memory_barrier() asm volatile("sync":::"memory")
+#		define read_memory_barrier() full_memory_barrier()
+#		define write_memory_barrier() full_memory_barrier()
+#	else
+#		warning Memory barriers not defined on this system
+#		define full_memory_barrier() ((void)0)
+#		define read_memory_barrier() full_memory_barrier()
+#		define write_memory_barrier() full_memory_barrier()
+#	endif
+#else
+#	warning Memory barriers not defined on this system
+#	define full_memory_barrier() ((void)0)
+#	define read_memory_barrier() full_memory_barrier()
+#	define write_memory_barrier() full_memory_barrier()
+#endif
+
+	/* http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html */
+#if defined(__GNUC__) && (__GNUC__ >= 3)
+#	define likely(x)	__builtin_expect (!!(x), 1)
+#	define unlikely(x)  __builtin_expect (!!(x), 0)
+#	define used__	   __attribute__ ((__used__))
+#	define unused__	 __attribute__ ((__unused__))
+#	define must_check__ __attribute__ ((__warn_unused_result__))
+#	define deprecated__ __attribute__ ((__deprecated__))
+#	define noreturn__   __attribute__ ((__noreturn__))
+#	define pure__	   __attribute__ ((__pure__))
+#	define const__	  __attribute__ ((__const__))
+#	define malloc__	 __attribute__ ((__malloc__))
+#	define packed__	 __attribute__ ((__packed__))
+#	define inline__	 inline __attribute__ ((__always_inline__))
+#	define noinline__   __attribute__ ((__noinline__))
+#	define nonnull__(x) __attribute__ ((__nonnull__(x)))
+#	define format__(type_, index_, first_) __attribute__ ((format(type_, index_, first_)))
+#else
+#	define likely(x)	(x)
+#	define unlikely(x)  (x)
+#	define used__
+#	define unused__
+#	define must_check__
+#	define deprecated__
+#	define noreturn__
+#	define pure__
+#	define const__
+#	define malloc__
+#	define packed__
+#	define inline__
+#	define noinline__
+#	define nonnull__(x)
+#	define format__(type_, index_, first_)
+#endif
+
+#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+#	define hot__		__attribute__ ((__hot__))
+#	define cold__	   __attribute__ ((__cold__))
+#else
+#	define hot__
+#	define cold__
+#endif
+
+#include <stddef.h>
+
+	const__ uint32_t ceil2(uint32_t n);
+	const__ uint32_t floor2(uint32_t n);
+
+	//#if !HAVE_STRCASESTR
+	//char* strcasestr(const char* haystack, const char* needle);
+	//#endif
+
+	//#if !HAVE_STRLCPY
+	//size_t strlcpy(char* dest, const char* src, size_t size);
+	//#endif
+
+	int set_cloexec(int fd, unsigned char v);
+	int set_nonblock(int fd, unsigned char v);
+	int set_nodelay(int fd, unsigned char v);
+	int get_bufsize(int fd, int dir, int* len);
+	int set_bufsize(int fd, int dir, int len);
+
+	unsigned long ver2int(const char* version);
+
+	void save_signals(void);
+	void restore_signals(void);
+
+	void MilliSleep(long msecs);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#ifdef __cplusplus
+uint32_t simple_hash_data(const unsigned char* buf, size_t len, uint32_t code = 0);
+uint32_t simple_hash_str(const unsigned char* str, uint32_t code = 0);
+#endif
+
+#ifdef __cplusplus
+const char* str2hex(const unsigned char* str, size_t len);
+const char* str2hex(const char* str, size_t len = 0);
+#else
+const char* str2hex(const unsigned* str, size_t len);
+#endif
+
+const char* uint2bin(unsigned u, size_t len);
+void MilliSleep(long msecs);
+
+#if !defined(NDEBUG) && defined(deprecated__) && defined(__GNUC__) && !defined(__WIN32__)
+#include <stdio.h>
+#include <string.h>
+deprecated__ typeof(sprintf) sprintf;
+/* there are far too many of these in the qrz code
+ deprecated__ typeof(strcpy) strcpy;
+ deprecated__ typeof(strcat) strcat;
+ */
+#endif
+
+#ifdef __WIN32__
+#  define NOMINMAX 1
+#endif
+
+#ifndef __WIN32__
+#  define PRIuSZ "zu"
+#  define PRIdSZ "zd"
+#else
+#  define PRIuSZ "Iu"
+#  define PRIdSZ "Id"
+#endif
+
+#ifndef __WIN32__
+#  define PATH_SEP "/"
+#else
+#  define PATH_SEP "\\"
+#endif
+
+#endif /* UTIL_H */
+
+/*
+ Local Variables:
+ mode: c++
+ c-file-style: "linux"
+ End:
+ */
diff --git a/src/include/xml_io.h b/src/include/xml_io.h
new file mode 100644
index 0000000..1cb3378
--- /dev/null
+++ b/src/include/xml_io.h
@@ -0,0 +1,56 @@
+// =====================================================================
+//
+// xml_io.h
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+// Copyright (C) 2014, Robert Stiles, KK5VD
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// =====================================================================
+
+#ifndef XML_IO_H
+#define XML_IO_H
+
+#define DEFAULT_XMLRPC_IP_ADDRESS "127.0.0.1"
+#define DEFAULT_XMLRPC_PORT_NO "7362"
+
+typedef struct callsign_data {
+	std::string name;
+	std::string callsign;
+	std::string qth;
+	std::string state;
+} CALLSIGN_DATA;
+
+extern void open_xmlrpc(void);
+extern void close_xmlrpc();
+
+extern void *xmlrpc_loop(void *d);
+
+extern void set_xmlrpc_timeout(double value);
+extern void set_xmlrpc_timeout_default(void);
+
+extern void set_xmlrpc_port_number(char *addr);
+extern void set_xmlrpc_ip_address(char *addr);
+
+extern bool fldigi_online;
+
+extern void update_fldigi_callsign(std::string szFirstName, std::string szCallSign);
+extern struct callsign_data *update_flnet_calldata(void);
+
+#endif
diff --git a/src/include/xmlreader.h b/src/include/xmlreader.h
new file mode 100644
index 0000000..2352761
--- /dev/null
+++ b/src/include/xmlreader.h
@@ -0,0 +1,62 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <string>
+
+#include "irrXML.h"
+
+using namespace irr;
+using namespace io;
+
+class IIrrXMLStringReader: public IFileReadCallBack {
+	const char *s;
+	int len;
+	int p;
+
+public:
+
+	IIrrXMLStringReader(const char *szStr) {
+		s = szStr;
+		len = strlen(s);
+		p=0;
+	}
+
+	IIrrXMLStringReader(const std::string &str) {
+		s=str.c_str();
+		len = strlen(s);
+		p=0;
+	}
+
+	int read(void * buffer, int sizeToRead) {
+		char *sss = (char *)buffer;
+		if (p >= len) return 0;
+		int j = 0;
+		for (int i = p; i < len && j < sizeToRead; ) {
+			sss[j++] = s[i++];
+		}
+		return 1;
+	}
+	
+	int getSize() {
+		return len-p;
+	}
+
+};
+
diff --git a/src/include/xmlrpc.h b/src/include/xmlrpc.h
new file mode 100644
index 0000000..e15d852
--- /dev/null
+++ b/src/include/xmlrpc.h
@@ -0,0 +1,53 @@
+// ----------------------------------------------------------------------------
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef XMLRPC_H
+#define XMLRPC_H
+
+#include <iosfwd>
+#include <string>
+
+class XmlRpcImpl;
+
+class XML_RPC_Server
+{
+public:
+	static void start(const char* node, const char* service);
+	static void stop(void);
+	static std::ostream& list_methods(std::ostream& out);
+private:
+	XML_RPC_Server();
+	~XML_RPC_Server();
+	XML_RPC_Server(const XML_RPC_Server&);
+	XML_RPC_Server operator=(const XML_RPC_Server&);
+	static void add_methods(void);
+	static void* thread_func(void*);
+
+private:
+	static XML_RPC_Server* inst;
+	bool run;
+	XmlRpcImpl* server_impl;
+};
+
+extern void xmlrpc_set_qsy(long long rfc);
+extern int  xmltest_char();
+extern bool xmltest_char_available;
+extern int number_of_samples(std::string s);
+#endif // XMLRPC_H
diff --git a/src/loglist.cxx b/src/loglist.cxx
new file mode 100644
index 0000000..acaafc4
--- /dev/null
+++ b/src/loglist.cxx
@@ -0,0 +1,363 @@
+// =====================================================================
+//
+// loglist.h
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// =====================================================================
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "loglist.h"
+#include "netshared.h"
+
+void loglist::clear (void)
+{
+	for (int i = 0; i < lsize; i++) {
+		llist[i].recN = -1;
+		llist[i].status = LOGIN;
+		llist[i].displine[0] = 0;
+		llist[i].chPriority = ' ';
+	}
+	nlist = BLANKS;
+	iLastup = BLANKS;
+	cP1 = ' ';
+	cP2 = ' ';
+	cP3 = ' ';
+	iAutoPriority = 0;
+}
+
+loglist::loglist ()
+{
+	llist = new _logged[LISTINCR];
+	if (llist) {
+		lsize = LISTINCR;
+		clear ();
+	} else
+		exit (2);
+}
+
+void loglist::CreateDispLine (int n)
+{
+	char dline[25], call[10];
+	strcpy (call, trim(llist[n].szPrefix));
+	strcat (call, trim(llist[n].szArea));
+	strcat (call, trim(llist[n].szSuffix));
+	snprintf (dline, sizeof(dline), "%-8s%-8s%5s %c",
+			  call,
+			  llist[n].szName,
+			  llist[n].szTime,
+			  llist[n].chPriority);
+	memset (llist[n].displine, 0, DLINESIZE + 1);
+	strncpy (llist[n].displine, dline, DLINESIZE);
+
+	return;
+}
+
+char *loglist::report_line(int n)
+{
+	int nn = n + BLANKS;
+	static char dline[50], call[10];
+	strcpy (call, trim(llist[nn].szPrefix));
+	strcat (call, trim(llist[nn].szArea));
+	strcat (call, trim(llist[nn].szSuffix));
+	snprintf (dline, sizeof(dline), "%s\t%s\t%s",
+			  call,
+			  llist[nn].szName,
+			  llist[nn].szTime);
+	return dline;
+}
+
+int loglist::add (long N,
+				  const char *p, const char *a, const char *s,
+				  const char *name, const char *szTime, char flg)
+{
+	if (nlist >= lsize) {
+		_logged *temp = new _logged[lsize + LISTINCR];
+		if (!temp) {
+			printf("out of memory!\n"); fflush (stdout);
+			return 0;
+		}
+		for (int i = 0; i < lsize + LISTINCR; i++) {
+			llist[i].recN = -1;
+			llist[i].status = EMPTY;
+			llist[i].displine[0] = 0;
+		}
+		for (int i = 0; i < lsize; i++) temp[i] = llist[i];
+		delete [] llist;
+		llist = temp;
+		lsize += LISTINCR;
+	}
+	llist[nlist].recN = N;
+	llist[nlist].status = LOGIN;
+
+	strcpy(llist[nlist].szPrefix, p);
+	strcpy(llist[nlist].szArea, a);
+	strcpy(llist[nlist].szSuffix, s);
+
+	strncpy (llist[nlist].szName, name, 7);
+	strcpy (llist[nlist].szTime, szTime);
+
+	CreateDispLine (nlist);
+	nlist++;
+	if (flg == cP1)
+		Pri_1 (nlist - 1 - BLANKS);
+	else if (flg == cP2)
+		Pri_2 (nlist - 1 - BLANKS);
+	else if (flg == cP3)
+		Pri_3 (nlist - 1 - BLANKS);
+	return 1;
+}
+
+void loglist::modify (int n,
+					  long N,
+					  const char *p, const char *a, const char *s,
+					  const char *name)
+{
+	int nn = n + BLANKS;
+
+	if (nn == nlist) return;
+
+	llist[nn].recN = N;
+	strcpy(llist[nn].szPrefix, p);
+	strcpy(llist[nn].szArea, a);
+	strcpy(llist[nn].szSuffix, s);
+	strncpy (llist[nn].szName, name, 7);
+
+	CreateDispLine (nn);
+
+	return;
+}
+
+long loglist::recN (int n)
+{
+	int nn = n + BLANKS;
+	if (nn <= nlist)
+		return llist[nn].recN;
+	return -1L;
+}
+
+logStatus loglist::status (int n)
+{
+	int nn = n + BLANKS;
+	if (nn <= nlist)
+		return llist[nn].status;
+	return LOGIN;
+}
+
+void loglist::status (int n, logStatus st)
+{
+	int nn = n + BLANKS;
+	if (nn <= nlist)
+		llist[nn].status = st;
+	return;
+}
+
+char * loglist::displine (int n)
+{
+	int nn = n + BLANKS;
+	if (nn <= nlist)
+		return llist[nn].displine;
+	return NULL;
+}
+
+int loglist::del (int n)
+{
+	int nn = n + BLANKS;
+	if ( nn > nlist ) return 0;
+	if (nn == iLastup) iLastup = BLANKS;
+	if (nn < iLastup) {
+		iLastup--;
+		if (iLastup < BLANKS) iLastup = BLANKS;
+	}
+	for (int i = nn; i < nlist; i++)
+		llist[i] = llist[i+1];
+	nlist--;
+	return 1;
+}
+
+int loglist::inList (long N)
+{
+	for (int i = BLANKS; i <= nlist; i++)
+		if (llist[i].recN == N) return 1;
+	return 0;
+}
+
+char * loglist::prefix (int n)
+{
+	return llist[n + BLANKS].szPrefix;
+}
+
+char * loglist::area (int n)
+{
+	return llist[n + BLANKS].szArea;
+}
+
+char * loglist::suffix (long n)
+{
+	return llist[n + BLANKS].szSuffix;
+}
+
+int loglist::Pri_1 (int n)
+{
+	int nn = n + BLANKS;
+	int newpos;
+	if (cP1 == ' ') return n;
+	llist[nn].chPriority = cP1;
+	CreateDispLine (nn);
+	if (nlist == BLANKS + 1) return n;
+	if (n == 0 || iAutoPriority == 0) return n;
+	_logged thiscall = llist[nn];
+	del (n);
+	for (int i = BLANKS; i < nlist; i++) {
+		if (llist[i].chPriority != cP1) {
+			newpos = i;
+			for (int j = nlist; j > newpos; j--)
+				llist[j] = llist[j-1];
+			llist[newpos] = thiscall;
+			nlist++;
+			return newpos - BLANKS;
+		}
+	}
+	llist[nn] = thiscall;
+	return n;
+}
+
+int loglist::Pri_2 (int n)
+{
+	int nn = n + BLANKS;
+	int newpos;
+	if (cP2 == ' ') return n;
+	llist[nn].chPriority = cP2;
+	CreateDispLine (nn);
+	if (nlist == BLANKS + 1 || iAutoPriority == 0) return n;
+	_logged thiscall = llist[nn];
+	del (n);
+	char ch;
+	for (int i = BLANKS; i < nlist; i++) {
+		ch = llist[i].chPriority;
+		if (cP1 != ' ' && ch == cP1) continue;
+		if (ch == cP2) continue;
+		newpos = i;
+		for (int j = nlist; j > newpos; j--)
+			llist[j] = llist[j-1];
+		llist[newpos] = thiscall;
+		nlist++;
+		return newpos - BLANKS;
+	}
+	llist[nn] = thiscall;
+	return n;
+}
+
+int loglist::Pri_3 (int n)
+{
+	int nn = n + BLANKS;
+	int newpos;
+	if (cP3 == ' ') return n;
+	llist[nn].chPriority = cP3;
+	CreateDispLine (nn);
+	if (nlist == BLANKS + 1 || iAutoPriority == 0) return n;
+	_logged thiscall = llist[nn];
+	del (n);
+	char ch;
+	for (int i = BLANKS; i < nlist; i++) {
+		ch = llist[i].chPriority;
+		if (cP1 != ' ' && ch == cP1) continue;
+		if (cP2 != ' ' && ch == cP2) continue;
+		newpos = i;
+		for (int j = nlist; j > newpos; j--)
+			llist[j] = llist[j-1];
+		llist[newpos] = thiscall;
+		nlist++;
+		return newpos - BLANKS;
+	}
+	llist[nn] = thiscall;
+	return n;
+}
+
+int loglist::Pri_0 (int n)
+{
+	int nn = n + BLANKS;
+	int newpos;
+	if (llist[nn].chPriority == ' ') return n;
+	llist[nn].chPriority = ' ';
+	CreateDispLine (nn);
+
+	if (nn == nlist - 1) return n;
+	if (iAutoPriority == 0) return n;
+	_logged thiscall = llist[nn];
+	del (n);
+	char ch;
+	for (int i = BLANKS; i < nlist; i++) {
+		ch = llist[i].chPriority;
+		if (cP1 != ' ' && ch == cP1) continue;
+		if (cP2 != ' ' && ch == cP2) continue;
+		if (cP3 != ' ' && ch == cP3) continue;
+		newpos = i;
+		for (int j = nlist; j > newpos; j--)
+			llist[j] = llist[j-1];
+		llist[newpos] = thiscall;
+		nlist++;
+		return newpos - BLANKS;
+	}
+	llist[nn] = thiscall;
+	return n;
+}
+
+int loglist::nextup (void)
+{
+	for (int i = BLANKS; i < nlist; i++)
+		if (llist[i].status == LOGIN) return (i - BLANKS);
+	return (nlist -1 - BLANKS);
+}
+
+int loglist::MoveEarlier (int n)
+{
+	int nn = n + BLANKS;
+	if (n == 0) return n;
+	if (nlist == BLANKS + 1) return n;
+	_logged tmp = llist[nn];
+	llist[nn] = llist[nn-1];
+	llist[nn-1] = tmp;
+	return (n - 1);
+}
+
+int loglist::MoveLater (int n)
+{
+	int nn = n + BLANKS;
+	if (nn == nlist - 1) return n;
+	_logged tmp = llist[nn+1];
+	llist[nn+1] = llist[nn];
+	llist[nn] = tmp;
+	return (n + 1);
+}
+
+void loglist::lastup (int n)
+{
+	iLastup = n + BLANKS;
+}
+
+
+int loglist::lastup ()
+{
+	return iLastup - BLANKS;
+}
+
diff --git a/src/main.cxx b/src/main.cxx
new file mode 100644
index 0000000..5374242
--- /dev/null
+++ b/src/main.cxx
@@ -0,0 +1,326 @@
+// =====================================================================
+//
+// main.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+// Copyright (C) 2014, Robert Stiles, KK5VD
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// =====================================================================
+
+
+#include <fstream>
+#include <ostream>
+#include <string>
+
+#include <cstring>
+#include <ctime>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include <FL/Fl.H>
+#include <FL/Enumerations.H>
+#include <FL/Fl_Window.H>
+#include <FL/Fl_Button.H>
+#include <FL/Fl_Group.H>
+#include <FL/Fl_Sys_Menu_Bar.H>
+#include <FL/x.H>
+#include <FL/Fl_Help_Dialog.H>
+#include <FL/Fl_Menu_Item.H>
+
+#include "net_icon.cxx"
+#include "config.h"
+#include "net_config.h"
+#include "netshared.h"
+#include "netversion.h"
+#include "netsupport.h"
+#include "xml_io.h"
+
+#ifdef WIN32
+#  include "flnetrc.h"
+#  include "compat.h"
+#  define dirent fl_dirent_no_thanks
+#endif
+
+#include <FL/filename.H>
+
+#include "csvdb.h"
+
+#ifdef __MINGW32__
+#	if FLNET_FLTK_API_MAJOR == 1 && FLNET_FLTK_API_MINOR < 3
+#		undef dirent
+#		include <dirent.h>
+#	endif
+#	ifndef IDI_ICON
+#		define IDI_ICON 101
+#	endif
+#else
+#	include <dirent.h>
+#endif
+
+#include <FL/x.H>
+#include <FL/Fl_Pixmap.H>
+#include <FL/Fl_Image.H>
+#include <FL/Fl_File_Chooser.H>
+
+Fl_Window *main_window = (Fl_Window *)0;
+
+std::string home_dir = "";
+std::string selected_file;
+
+// Show an error dialog and print to cerr if available.
+// On win32 Fl::fatal displays its own error window.
+static void fatal_error(string sz_error)
+{
+	string s = "Fatal error!\n";
+	s.append(sz_error).append("\n").append(strerror(errno));
+
+	// Win32 will display a MessageBox error message
+#if !defined(__WOE32__)
+	fl_message_font(FL_HELVETICA, FL_NORMAL_SIZE);
+	fl_alert("%s", s.c_str());
+#endif
+	Fl::fatal(s.c_str());
+}
+
+#define KNAME "net"
+#if !defined(__WIN32__) && !defined(__APPLE__)
+Pixmap	net_icon_pixmap;
+
+void make_pixmap(Pixmap *xpm, const char **data)
+{
+	Fl_Window w(0,0, PACKAGE_NAME);
+	w.xclass(PACKAGE_NAME);
+	w.show();
+	w.make_current();
+	Fl_Pixmap icon(data);
+	int maxd = (icon.w() > icon.h()) ? icon.w() : icon.h();
+	*xpm = fl_create_offscreen(maxd, maxd);
+	fl_begin_offscreen(*xpm);
+	fl_color(FL_BACKGROUND_COLOR);
+	fl_rectf(0, 0, maxd, maxd);
+	icon.draw(maxd - icon.w(), maxd - icon.h());
+	fl_end_offscreen();
+}
+
+#endif
+
+int parse_args(int argc, char **argv, int& idx);
+
+char title[50];
+
+char progdir[80];
+
+int handle (int e) {
+	if (Fl::focus() == main_window)
+		return (e == FL_SHORTCUT);
+	return 0;
+}
+
+void visit_URL(void* arg)
+{
+	const char* url = reinterpret_cast<const char *>(arg);
+#ifndef __WOE32__
+	const char* browsers[] = {
+#  ifdef __APPLE__
+		getenv("FLDIGI_BROWSER"), // valid for any OS - set by user
+		"open"                    // OS X
+#  else
+		"fl-xdg-open",            // Puppy Linux
+		"xdg-open",               // other Unix-Linux distros
+		getenv("FLDIGI_BROWSER"), // force use of spec'd browser
+		getenv("BROWSER"),        // most Linux distributions
+		"sensible-browser",
+		"firefox",
+		"mozilla"                 // must be something out there!
+#  endif
+	};
+	switch (fork()) {
+		case 0:
+#  ifndef NDEBUG
+			unsetenv("MALLOC_CHECK_");
+			unsetenv("MALLOC_PERTURB_");
+#  endif
+			for (size_t i = 0; i < sizeof(browsers)/sizeof(browsers[0]); i++)
+				if (browsers[i])
+					execlp(browsers[i], browsers[i], url, (char*)0);
+			exit(EXIT_FAILURE);
+		case -1:
+			fl_alert(
+					 "Could not run a web browser:\n%s\n\n"
+					 "Open this URL manually:\n%s",
+					 strerror(errno), url);
+	}
+#else
+	// gurgle... gurgle... HOWL
+	// "The return value is cast as an HINSTANCE for backward
+	// compatibility with 16-bit Windows applications. It is
+	// not a true HINSTANCE, however. The only thing that can
+	// be done with the returned HINSTANCE is to cast it to an
+	// int and compare it with the value 32 or one of the error
+	// codes below." (Error codes omitted to preserve sanity).
+	if ((int)ShellExecute(NULL, "open", url, NULL, NULL, SW_SHOWNORMAL) <= 32)
+		fl_alert("Could not open url:\n%s\n", url);
+#endif
+}
+
+void exit_main(Fl_Widget *w)
+{
+	if (Fl::event_key() == FL_Escape)
+		return;
+	cleanExit();
+}
+
+int main(int argc, char **argv)
+{
+	int arg_idx;
+
+	{
+		char dirbuf[FL_PATH_MAX + 1];
+#ifdef __WOE32__
+		fl_filename_expand(dirbuf, sizeof(dirbuf) -1, "$USERPROFILE/");
+		home_dir = dirbuf;
+#else
+		fl_filename_expand(dirbuf, sizeof(dirbuf) -1, "$HOME/");
+		home_dir = dirbuf;
+#endif
+	}
+	home_dir.append("flnet.files/");
+
+	Fl::args(argc, argv, arg_idx, parse_args);
+
+	Fl::add_handler (handle);
+	main_window = newNetControl();
+	Fl::visual (FL_DOUBLE|FL_INDEX);
+
+	sprintf (title, "flnet %s", flnet_VERSION);
+	main_window->label(title);
+	main_window->callback(exit_main);
+
+#ifdef WIN32
+	main_window->icon((char*)LoadIcon(fl_display, MAKEINTRESOURCE(IDI_ICON)));
+	main_window->show(argc, argv);
+#elif !defined(__APPLE__)
+	make_pixmap(&net_icon_pixmap, net_icon);
+	main_window->icon((char *)net_icon_pixmap);
+	main_window->show(argc, argv);
+#else
+	main_window->show(argc, argv);
+#endif
+
+	strcpy (progdir, argv[0]);
+	char *p = strrchr(progdir,'/');
+	if (!p) p= strrchr(progdir, '\\');
+	if (p) *(p+1) = 0;
+
+#if !defined(__APPLE__)
+	if (argc == 2) {
+		char absolute[500];
+		fl_filename_absolute(absolute, sizeof(absolute) - 1, argv[1]);
+		int len = strlen(absolute);
+		if (absolute[len-1] == '\n') absolute[len-1] = 0;
+		openDB (selected_file = absolute);
+	} else
+#endif
+	{
+		int r;
+		if ((r = mkdir(home_dir.c_str(), 0777)) == -1 && errno != EEXIST) {
+			string s = "Could not make directory ";
+			fatal_error(s);
+		}
+		std::string last_filename = home_dir;
+		last_filename.append("new_net.csv");
+
+		std::string cfg_filename = home_dir;
+		cfg_filename.append("flnet.cfg");
+
+#define LINESIZE 1024
+		char buff[LINESIZE + 1];
+		fstream dbfile(cfg_filename.c_str(), ios::in | ios::binary);
+		if (dbfile) {
+			// read & map header line
+			memset(buff, 0, LINESIZE + 1);
+			dbfile.getline(buff, LINESIZE);
+			selected_file = buff;
+			size_t p = selected_file.rfind('\n');
+			while (p != string::npos) {
+				selected_file.erase(p,1);
+				p = selected_file.rfind('\n');
+			}
+			last_filename = selected_file;
+			dbfile.close();
+		} else {
+			selected_file = last_filename;
+			char *p = fl_file_chooser ("Select .csv file",
+									   "*.csv",
+									   selected_file.c_str(), 0);
+			if (!p) exit(0);
+			selected_file = p;
+		}
+		openDB (selected_file);
+	}
+
+	open_xmlrpc();
+
+	return Fl::run();
+}
+
+int parse_args(int argc, char **argv, int& idx)
+{
+	if (strcasecmp("--help", argv[idx]) == 0) {
+		printf("\nUsage: \n" \
+			   "\t--help this help text\n" \
+			   "\t--version\n" \
+			   "\tdatabase.csv\n" \
+			   "\topen 'named' database file.\n"
+			   "\t--xmlrpc-server-address <ip_addess> default:"DEFAULT_XMLRPC_IP_ADDRESS"\n" \
+			   "\t--xmlrpc-server-port <port> default:"DEFAULT_XMLRPC_PORT_NO"\n\n\n" \
+			   );
+		exit(0);
+	}
+
+	if (strcasecmp("--version", argv[idx]) == 0) {
+		printf("Version: "VERSION"\n");
+		exit (0);
+	}
+	
+	if (strcasecmp(argv[idx], "--xmlrpc-server-address") == 0) {
+		idx++;
+		if((idx < argc) && argv[idx]) {
+			set_xmlrpc_ip_address(argv[idx]);
+			idx++;
+		}
+		return 1;
+	}
+	
+	if (strcasecmp(argv[idx], "--xmlrpc-server-port") == 0) {
+		idx++;
+		if((idx < argc) && argv[idx]) {
+			set_xmlrpc_port_number(argv[idx]);
+			idx++;
+		}
+		return 1;
+	}
+	
+	return 0;
+}
diff --git a/src/mingw.c b/src/mingw.c
new file mode 100644
index 0000000..35eb721
--- /dev/null
+++ b/src/mingw.c
@@ -0,0 +1,313 @@
+// ----------------------------------------------------------------------------
+//      mingw.c
+//
+// The following routines were copied from git-1.6.1.2/compat/mingw.c:
+//   git_vsnprintf git_snprintf sleep mingw_getcwd mingw_getenv mingw_rename
+//
+// The uname routine was adapted from libgw32c 0.4.
+//
+// The rest:
+// Copyright (C) 2009
+//              Stelios Bounanos, M0GLD
+//
+// This file is part of fldigi.
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include <ctype.h>
+#include "compat.h"
+#include "util.h"
+
+/* default mode for stdin, stdout and stderr */
+unsigned int _CRT_fmode = _O_BINARY;
+
+/******************************************************************************/
+
+#if SNPRINTF_RETURNS_BOGUS
+/*
+ * The size parameter specifies the available space, i.e. includes
+ * the trailing NUL byte; but Windows's vsnprintf expects the
+ * number of characters to write without the trailing NUL.
+ */
+#define SNPRINTF_SIZE_CORR 1
+
+#undef vsnprintf
+int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap)
+{
+	char *s;
+	int ret = -1;
+
+	if (maxsize > 0) {
+		ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap);
+		if (ret == maxsize-1)
+			ret = -1;
+		/* Windows does not NUL-terminate if result fills buffer */
+		str[maxsize-1] = 0;
+	}
+	if (ret != -1)
+		return ret;
+
+	s = NULL;
+	if (maxsize < 128)
+		maxsize = 128;
+
+	while (ret == -1) {
+		maxsize *= 4;
+		str = (char *)realloc(s, maxsize);
+		if (! str)
+			break;
+		s = str;
+		ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap);
+		if (ret == maxsize-1)
+			ret = -1;
+	}
+	free(s);
+	return ret;
+}
+
+int git_snprintf(char *str, size_t maxsize, const char *format, ...)
+{
+	va_list ap;
+	int ret;
+
+	va_start(ap, format);
+	ret = git_vsnprintf(str, maxsize, format, ap);
+	va_end(ap);
+
+	return ret;
+}
+#endif /* SNPRINTF_RETURNS_BOGUS */
+
+unsigned sleep(unsigned seconds)
+{
+	Sleep(seconds*1000);
+	return 0;
+}
+
+#undef getcwd
+char *mingw_getcwd(char *pointer, int len)
+{
+	int i;
+	char *ret = getcwd(pointer, len);
+	if (!ret)
+		return ret;
+	for (i = 0; pointer[i]; i++)
+		if (pointer[i] == '\\')
+			pointer[i] = '/';
+	return ret;
+}
+
+#undef getenv
+char *mingw_getenv(const char *name)
+{
+	char *result = getenv(name);
+	if (!result && !strcmp(name, "TMPDIR")) {
+		/* on Windows it is TMP and TEMP */
+		result = getenv("TMP");
+		if (!result)
+			result = getenv("TEMP");
+	}
+	return result;
+}
+
+#undef rename
+int mingw_rename(const char *pold, const char *pnew)
+{
+	DWORD attrs;
+
+	/*
+	 * Try native rename() first to get errno right.
+	 * It is based on MoveFile(), which cannot overwrite existing files.
+	 */
+	if (!rename(pold, pnew))
+		return 0;
+	if (errno != EEXIST)
+		return -1;
+	if (MoveFileEx(pold, pnew, MOVEFILE_REPLACE_EXISTING))
+		return 0;
+	/* TODO: translate more errors */
+	if (GetLastError() == ERROR_ACCESS_DENIED &&
+		(attrs = GetFileAttributes(pnew)) != INVALID_FILE_ATTRIBUTES) {
+		if (attrs & FILE_ATTRIBUTE_DIRECTORY) {
+			errno = EISDIR;
+			return -1;
+		}
+		if ((attrs & FILE_ATTRIBUTE_READONLY) &&
+			SetFileAttributes(pnew, attrs & ~FILE_ATTRIBUTE_READONLY)) {
+			if (MoveFileEx(pold, pnew, MOVEFILE_REPLACE_EXISTING))
+				return 0;
+			/* revert file attributes on failure */
+			SetFileAttributes(pnew, attrs);
+		}
+	}
+	errno = EACCES;
+	return -1;
+}
+
+/******************************************************************************/
+
+__attribute__((constructor))
+static void wsa_init(void)
+{
+	WSADATA wsa;
+
+	static int wsa_init_ = 0;
+	if (wsa_init_)
+		return;
+
+	if (WSAStartup(MAKEWORD(2, 2), &wsa)) {
+		fprintf(stderr, "unable to initialize winsock: error %d", WSAGetLastError());
+		exit(EXIT_FAILURE);
+	}
+	atexit((void(*)(void)) WSACleanup);
+	wsa_init_ = 1;
+}
+
+int socketpair(int family, int type, int protocol, int *sv)
+{
+	struct sockaddr_in addr;
+	SOCKET sfd;
+	int err, len = sizeof(addr);
+
+	if (sv == NULL || family != AF_INET || type != SOCK_STREAM || protocol) {
+		WSASetLastError(WSAEINVAL);
+		return SOCKET_ERROR;
+	}
+
+	sv[0] = sv[1] = INVALID_SOCKET;
+	if ((sfd = socket(family, type, 0)) == INVALID_SOCKET)
+		return SOCKET_ERROR;
+
+	memset(&addr, 0, sizeof(addr));
+	addr.sin_family = family;
+	addr.sin_addr.s_addr = inet_addr("127.0.0.1");
+	addr.sin_port = 0; /* any port */
+
+	if ((err = bind(sfd, (const struct sockaddr*)&addr, sizeof(addr))) == SOCKET_ERROR) {
+		err = WSAGetLastError();
+		closesocket(sfd);
+		WSASetLastError(err);
+		return SOCKET_ERROR;
+	}
+
+	if ((err = getsockname(sfd, (struct sockaddr*)&addr, &len)) == SOCKET_ERROR) {
+		err = WSAGetLastError();
+		closesocket(sfd);
+		WSASetLastError(err);
+		return SOCKET_ERROR;
+	}
+
+	do {
+		if (listen(sfd, 1) == SOCKET_ERROR)
+			break;
+		if ((sv[0] = WSASocket(family, type, 0, NULL, 0, 0)) == INVALID_SOCKET)
+			break;
+		if (connect(sv[0], (const struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
+			break;
+		if ((sv[1] = accept(sfd, NULL, NULL)) == INVALID_SOCKET)
+			break;
+		closesocket(sfd);
+		return 0;
+	} while (0);
+
+	/* error */
+	err = WSAGetLastError();
+	closesocket(sfd);
+	closesocket(sv[0]);
+	closesocket(sv[1]);
+	WSASetLastError(err);
+	return SOCKET_ERROR;
+}
+
+/******************************************************************************/
+
+int nanosleep(const struct timespec *req, struct timespec *rem)
+{
+	if (unlikely(req->tv_nsec < 0 || req->tv_nsec < 0L || req->tv_nsec > 999999999L)) {
+		errno = EINVAL;
+		return -1;
+	}
+	Sleep(req->tv_sec * 1000 + req->tv_nsec / 1000000L);
+	if (unlikely(rem)) {
+		rem->tv_sec = 0;
+		rem->tv_nsec = 0L;
+	}
+	return 0;
+}
+
+/*
+ BOOL GetOsInfo(LPSTR OsName, LPSTR Release, LPSTR Version);
+ BOOL GetMachInfo(LPSTR MachineName, LPSTR ProcessorName);
+ int uname(struct utsname *name)
+ {
+ char processor[1024];
+
+ if (name == NULL) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (gethostname(name->nodename, sizeof(name->nodename)) < 0) {
+ name->nodename[0] = '\0';
+ errno = ENOSYS;
+ return -1;
+ }
+
+ if (!GetOsInfo(name->sysname, name->release, name->version)) {
+ strncpy (name->sysname, "win32", sizeof (name->sysname));
+ strncpy (name->release, "unknown", sizeof (name->release));
+ strncpy (name->version, "unknown", sizeof (name->version));
+ }
+ // "windows32" is as yet the only universal windows description allowed
+ //   by config.guess and config.sub
+ strncpy(name->sysname, "windows32", sizeof (name->sysname));
+ if (!GetMachInfo(name->machine, processor))
+ strncpy(name->machine, "i386", sizeof (name->machine));
+
+ return 0;
+ }
+
+ int getrusage(int who, struct rusage *usage)
+ {
+ FILETIME ct, et, kt, ut;
+ ULARGE_INTEGER uli;
+
+ if (who != RUSAGE_SELF) {
+ errno = EINVAL;
+ return -1;
+ }
+ if (!usage) {
+ errno = EFAULT;
+ return -1;
+ }
+
+ if (!GetProcessTimes(GetCurrentProcess(), &ct, &et, &kt, &ut)) {
+ errno = ENOENT;
+ return -1;
+ }
+
+ // FILETIMEs use 100-ns units
+ memcpy(&uli, &kt, sizeof(FILETIME));
+ usage->ru_stime.tv_sec  = uli.QuadPart / 10000000L;
+ usage->ru_stime.tv_usec = uli.QuadPart % 10000000L;
+ memcpy(&uli, &ut, sizeof(FILETIME));
+ usage->ru_utime.tv_sec  = uli.QuadPart / 10000000L;
+ usage->ru_utime.tv_usec = uli.QuadPart % 10000000L;
+ 
+ return 0;
+ }
+ */
diff --git a/src/my_UI.cxx b/src/my_UI.cxx
new file mode 100644
index 0000000..6cd7489
--- /dev/null
+++ b/src/my_UI.cxx
@@ -0,0 +1,685 @@
+// =====================================================================
+//
+// my_UI.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+// Copyright (C) 2014, Robert Stiles, KK5VD
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// =====================================================================
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <time.h>
+
+#include <string>
+
+#include <FL/Fl.H>
+#include <FL/Fl_Input.H>
+#include <FL/Fl_Box.H>
+#include <FL/Fl_Browser.H>
+#include <FL/fl_ask.H>
+
+#include "my_UI.h"
+#include "loglist.h"
+#include "netshared.h"
+#include "netsupport.h"
+#include "config.h"
+#include "net_config.h"
+#include "net_ui.h"
+#include "timeops.h"
+#include "xml_io.h"
+
+#include "csvdb.h"
+
+char emptyline[] = "";
+
+loglist callinlist;
+int	WhoIsUp = 0;
+static int lastUp;
+
+char keyval[2] = " ";
+string szPrefix = "";
+string szArea = "";
+string szSuffix = "";
+string szFullName;
+string szLogDate;
+string szBirthday;
+string szNetNbr;
+string szSpouse;
+string szPhone;
+string szQTH;
+string szEmail;
+string szComment1;
+string szComment2;
+string szFirstName;
+string szCallSign;
+
+char szInfo[1024];
+
+bool updateFldigi = true;
+
+// do not change this unless you also change txtPick[]
+#define NPICKITEMS 10
+struct _pick {
+	long recN;
+	char	callsign[10];
+};
+
+static _pick Pick[NPICKITEMS];
+static int nbrPicked;
+static int whoPicked;
+
+char *fmtDate(char *d)
+{
+	static char date[11];
+	int i;
+	strcpy (date, "  /  /    ");
+	for (i = 0; i < 2; i++) date[i] = d[i+4];
+	for (i = 0; i < 2; i++) date[i+3] = d[i+6];
+	for (i = 0; i < 4; i++) date[i+6] = d[i];
+	return date;
+}
+
+void updateCallins (bool fldigi_flag)
+{
+	int i,j;
+
+	for (i = WhoIsUp - 4, j = 0; i < WhoIsUp + 11; i++, j++) {
+		txtLine[j]->labelcolor (fgColors[callinlist.status(i)]);
+		txtLine[j]->color (bgColors[callinlist.status(i)]);
+		txtLine[j]->label (callinlist.displine(i));
+	}
+
+	szFullName.clear();
+	szLogDate.clear();
+	szBirthday.clear();
+	szNetNbr.clear();
+	szSpouse.clear();
+	szPhone.clear();
+	szEmail.clear();
+	szQTH.clear();
+	szFirstName.clear();
+	szCallSign.clear();
+
+	static char szInList[13];
+	sprintf (szInList, "%3d callins", callinlist.numlist ());
+	txtNcallins->label (szInList);
+
+	long rc = callinlist.recN(WhoIsUp);
+	static string sInfo;
+	sInfo.clear();
+	if (rc >= 0 && rc < (long)netdb.numrecs()) {
+		csvRecord rec;
+		netdb.get(rc, rec);
+
+		if(fldigi_flag) {
+			if(rec.name.empty())
+				szFirstName.assign(trim(rec.fname.c_str()));
+			else
+				szFirstName.assign(trim(rec.name.c_str()));
+
+			szCallSign.assign(trim(rec.callsign.c_str()));
+			update_fldigi_callsign(szFirstName, szCallSign);
+		}
+
+		szFullName.assign(trim(rec.fname.c_str())).append(" ");
+		szFullName.append(trim(rec.lname.c_str()));
+		szLogDate.assign(rec.logdate);
+		szNetNbr.assign(rec.netnbr);
+		szSpouse.assign(trim(rec.spouse.c_str()));
+		if (!szSpouse.empty()) {
+			szSpouse.append(", ").append(rec.sp_birth);
+		}
+		szPhone.assign(trim(rec.phone.c_str()));
+
+		szQTH.assign(trim(rec.city.c_str()));
+		szQTH.append(", ").append(trim(rec.state.c_str()));
+
+		szBirthday.assign(trim(rec.birthdate.c_str()));
+
+		szEmail.assign(trim(rec.email.c_str()));
+		size_t pat = szEmail.find("@");
+		if (pat != string::npos) szEmail.insert(pat, "@");
+
+		szInfo[0] = 0;
+		snprintf (szInfo, sizeof(szInfo), "Name:   %s", szFullName.c_str());
+		while (strlen(szInfo) < 28) strcat(szInfo, " ");
+		sInfo.assign(szInfo);
+
+		snprintf (szInfo, sizeof(szInfo), "Nbr: %s\n", szNetNbr.c_str());
+		sInfo.append(szInfo);
+
+		snprintf (szInfo, sizeof(szInfo), "Birth:  %s", szBirthday.c_str());
+		while (strlen(szInfo) < 28) strcat(szInfo, " ");
+		sInfo.append(szInfo).append("Last: ").append(szLogDate).append("\n");
+
+		snprintf (szInfo, sizeof(szInfo), "Spouse: %s", szSpouse.c_str());
+		while (strlen(szInfo) < 28) strcat(szInfo, " ");
+		sInfo.append(szInfo).append("Phone:\n");
+
+		snprintf (szInfo, sizeof(szInfo), "QTH:    %s", szQTH.c_str());
+		while (strlen(szInfo) < 28) strcat(szInfo, " ");
+		sInfo.append(szInfo).append(szPhone).append("\n");
+
+		snprintf (szInfo, sizeof(szInfo), "Email:  %-s", szEmail.c_str());
+
+		sInfo.append(szInfo);
+
+		szComment1.assign(rec.comment1);
+		szComment2.assign(rec.comment2);
+		sInfo.append("\nInfo:\n");
+		sInfo.append(szComment1.c_str()).append("\n");
+		sInfo.append(szComment2.c_str());
+	}
+	txtInfo->label (sInfo.c_str());
+}
+
+void updateLogins ()
+{
+	int i, n;
+	long rc;
+	FILE *fToday;
+	char today[80];
+	char szLine[40];
+	char sztemp[40];
+	csvRecord rec;
+
+	struct tm tim;
+	time_t t;
+	time(&t);
+	gmtime_r(&t, &tim);
+	strftime(today, sizeof(today), "%Y%m%d", &tim);
+
+	string outfilename = selected_file;
+	size_t p = outfilename.find(".csv");
+	if (p != string::npos) outfilename.erase(p);
+	p = outfilename.find(".CSV");
+	if (p != string::npos) outfilename.erase(p);
+	outfilename.append("-").append(today).append(".log");
+
+	if (callinlist.numlist() == 0) return;
+	if (callinlist.numlist()) {
+		fToday = fopen (outfilename.c_str(), "a");
+		for (i = 0; i < callinlist.numlist(); i++) {
+			strcpy (szLine, callinlist.displine(i));
+			fprintf (fToday, "%s\n", szLine);
+			rc = callinlist.recN (i);
+			if (rc > 0 && rc < (long)netdb.numrecs()) {
+				netdb.get(rc, rec);
+				rec.prevdate.assign(rec.logdate);
+				n = atoi (rec.nbrlogins.c_str());
+				n += 1;
+				sprintf (sztemp, "%d", n);
+				rec.nbrlogins.assign(sztemp);
+				rec.logdate.assign(today);
+				netdb.put(rc, rec);
+			} else {
+				szLine[6] = 0;
+				char *pos = strpbrk(szLine,"0123456789");
+				if (pos != NULL) {
+					pos++;
+					rec.suffix.assign(pos);
+					*pos = 0;
+					pos--;
+					rec.area.assign(pos);
+					*pos = 0;
+					rec.prefix.assign(szLine);
+					rec.logdate.assign(today);
+					rec.nbrlogins.assign("1");
+					netdb.add(rec);
+				}
+			}
+		}
+	}
+	fclose (fToday);
+	callinlist.clear ();
+	updateCallins (false);
+}
+
+void my_UI::UpdateWhoIsUp (long L)
+{
+	string pr, ar, su, nm;
+	csvRecord rec;
+	netdb.get(L, rec);
+	callinlist.modify (WhoIsUp, L,
+					   rec.prefix.c_str(),
+					   rec.area.c_str(),
+					   rec.suffix.c_str(),
+					   rec.name.c_str());
+	dispCallIns(false);
+}
+
+void my_UI::clearPickList ()
+{
+	for (int i = 0; i < NPICKITEMS; i++ ) {
+		Pick[i].callsign[0] = 0;
+		txtPick[i]->label ("");//Pick[i].callsign);
+	}
+	nbrPicked = 0;
+}
+
+void my_UI::fillPickList ()
+{
+	int i;
+	int cmp;
+	int rc;
+	char padded[4];
+
+	if (!brwsData) getBrwsData ();
+	SortBySAP ();
+
+	clearPickList ();
+	strcpy (padded, szSuffix.c_str());
+	while (strlen(padded) < 3) strcat (padded, " ");
+
+	i = 0; rc = 0;
+	while (rc < netdb.numrecs() && padded[0] > brwsData[rc].suffix[0]) rc++;
+
+	while (rc < netdb.numrecs()) {
+		cmp = strcmp(padded, brwsData[rc].suffix);
+		if (cmp < 0) break;
+		if (cmp == 0 && i < NPICKITEMS) {
+			Pick[i].recN = brwsData[rc].recN;
+			strcpy (Pick[i].callsign, brwsData[rc].prefix);
+			strcat (Pick[i].callsign, brwsData[rc].area);
+			strcat (Pick[i].callsign, brwsData[rc].suffix);
+			txtPick[i]->label (Pick[i].callsign);
+			if (i == 0)
+				txtPick[i]->labelcolor (FL_RED);
+			else
+				txtPick[i]->labelcolor (FL_BLACK);
+			i++;
+		}
+		rc++;
+	}
+	nbrPicked = i;
+}
+
+void my_UI::PickedColors ()
+{
+	int i;
+	for (i = 0; i < NPICKITEMS; i++) {
+		if (i == whoPicked)
+			txtPick[i]->labelcolor(FL_RED);
+		else
+			txtPick[i]->labelcolor(FL_BLACK);
+		txtPick[i]->redraw ();
+	}
+}
+
+void my_UI::dispCallIns (bool flag)
+{
+	updateCallins (flag);
+}
+
+void my_UI::PickedToCallins (int n)
+{
+	PickedToCallinsDB((size_t) Pick[n].recN);
+}
+
+void my_UI::PickedToCallinsDB (size_t record_number)
+{
+	time_t the_time;
+	struct tm *tm_ptr;
+	char pr[3], ar[2], su[4],nm[11], st[3], sztime[6];
+
+	if (callinlist.inList(record_number)) {
+		fl_beep (FL_BEEP_ERROR);
+		clearPickList ();
+		clearSAP ();
+		return;
+	}
+	time (&the_time);
+	tm_ptr = localtime (&the_time);
+	sprintf( sztime, "%02d:%02d", tm_ptr->tm_hour, tm_ptr->tm_min);
+
+
+	csvRecord rec;
+	netdb.get(record_number, rec);
+
+	memset(pr, 0, sizeof(pr));
+	memset(ar, 0, sizeof(ar));
+	memset(su, 0, sizeof(su));
+	memset(nm, 0, sizeof(nm));
+	memset(st, 0, sizeof(st));
+
+	strncpy(pr, rec.prefix.c_str(), sizeof(pr)-1);
+	strncpy(ar, rec.area.c_str(), sizeof(ar)-1);
+	strncpy(su, rec.suffix.c_str(), sizeof(su)-1);
+	strncpy(nm, rec.name.c_str(), sizeof(nm)-1);
+	strncpy(st, rec.status.c_str(), sizeof(st)-1);
+
+	if (strstr (szP1, st)) {
+		callinlist.add (record_number, pr, ar, su, nm, sztime, chP1[0]);
+	} else if (strstr (szP2, st)) {
+		callinlist.add (record_number, pr, ar, su, nm, sztime, chP2[0]);
+	} else if (strstr (szP3, st)) {
+		callinlist.add (record_number, pr, ar, su, nm, sztime, chP3[0]);
+	} else {
+		callinlist.add (record_number, pr, ar, su, nm, sztime);
+	}
+	dispCallIns (false);
+	clearPickList ();
+	clearSAP ();
+}
+
+my_UI::my_UI (int x, int y, int w, int h, const char *l) :
+Fl_Group(x,y,w,h)
+{
+	callinlist = loglist ();
+	my_status = LOGLIST;
+	end();
+}
+
+void my_UI::clearSAP ()
+{
+	szPrefix.clear(); szArea.clear(); szSuffix.clear();
+	inpLoginSuffix->labelcolor (FL_BLACK);
+	inpLoginSuffix->color (FL_WHITE);
+	inpLoginPrefix->labelcolor (FL_BLACK);
+	inpLoginPrefix->color (FL_WHITE);
+	inpLoginArea->labelcolor (FL_BLACK);
+	inpLoginArea->color (FL_WHITE);
+	inpLoginPrefix->label (szPrefix.c_str());
+	inpLoginArea->label (szArea.c_str());
+	inpLoginSuffix->label (szSuffix.c_str());
+	my_status = LOGLIST;
+}
+
+static int keywait = 0;
+static double delaysecs = 0.10;
+
+void updnDelay (void *d)
+{
+	keywait = 0;
+}
+
+int my_UI::handle (int e)
+{
+	int k;
+
+	if (e == FL_KEYDOWN) {
+		k = Fl::event_key();
+		if (k) {
+			if (my_status == LOGLIST) {
+				if ((k == FL_Up || k == FL_Down) && keywait)
+					return 1;
+				keywait = 1;
+				Fl::add_timeout (delaysecs, updnDelay);
+				if (k == FL_Up) {
+					WhoIsUp--;
+					if (WhoIsUp < 0)
+						WhoIsUp++;
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_Down) {
+					WhoIsUp++;
+					if (WhoIsUp == callinlist.numlist ())
+						WhoIsUp--;
+					dispCallIns (false);
+					return 1;
+				}
+			}
+		}
+	}
+
+	if (e == FL_KEYUP) {
+		k = Fl::event_key();
+		if (k) {
+			if (k == FL_Escape && my_status != LOGLIST) {
+				clearSAP ();
+				clearPickList ();
+				return 1;
+			}
+			if (my_status == LOGLIST) {
+				if (k == FL_Home) {
+					lastUp = WhoIsUp;
+					WhoIsUp = 0;
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_End) {
+					lastUp = WhoIsUp;
+					WhoIsUp = callinlist.numlist () - 1;
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_Left) {
+					WhoIsUp = callinlist.nextup ();
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == 65451) {
+					callinlist.lastup(WhoIsUp);
+					return 1;
+				}
+				if (k == FL_Page_Up) {
+					WhoIsUp = callinlist.lastup();
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 1) {
+					callinlist.status(WhoIsUp, LOGIN);
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 2) {
+					callinlist.status(WhoIsUp, FIRST);
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 3) {
+					callinlist.status(WhoIsUp, SECOND);
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 4) {
+					callinlist.status(WhoIsUp, LOGOUT);
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 5) { // Priority 0 station
+					WhoIsUp = callinlist.Pri_0 (WhoIsUp);
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 6) { // Priority 1 station
+					WhoIsUp = callinlist.Pri_1 (WhoIsUp);
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 7) { // Priority 2 station
+					WhoIsUp = callinlist.Pri_2 (WhoIsUp);
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 8) { // Priority 2 station
+					WhoIsUp = callinlist.Pri_3 (WhoIsUp);
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 9) { // Move this call up in list
+					WhoIsUp = callinlist.MoveEarlier (WhoIsUp);
+					dispCallIns (false);
+					return 1;
+				}
+				if (k == FL_F + 10) { // Move this call dn in list
+					WhoIsUp = callinlist.MoveLater (WhoIsUp);
+					dispCallIns (false);
+					return 1;
+				}
+
+				if (k == FL_F + 12) {
+					if((Fl::event_state() & FL_SHIFT) == FL_SHIFT)
+						cb_ShiftF12();
+					else
+						cb_F12 (WhoIsUp);
+					return 1;
+				}
+
+				if (k == FL_Delete) {
+					if (WhoIsUp == 0 && callinlist.status(WhoIsUp) == EMPTY) return 1;
+					fl_beep (FL_BEEP_QUESTION);
+					if (fl_choice("Confirm Delete", "cancel", "OK", NULL) == 1) {
+						callinlist.del(WhoIsUp);
+						WhoIsUp--;
+						if (WhoIsUp < 0) WhoIsUp = 0;
+						dispCallIns (false);
+						return 1;
+					}
+				}
+			}
+
+			if (my_status == LOGLIST) {
+				if (k == FL_Enter) {
+					dispCallIns(updateFldigi);
+					return 1;
+				}
+			}
+
+			if (my_status == PICKLIST) {
+				if (k == FL_Enter) {
+					PickedToCallins (whoPicked);
+					if (callin_is_up) {
+						WhoIsUp = callinlist.numlist () - 1;
+						dispCallIns(false);
+					}
+					my_status = LOGLIST;
+				}
+				if (k == FL_Down) {
+					whoPicked++;
+					if (whoPicked > nbrPicked -1) whoPicked = 0;
+					PickedColors();
+				}
+				if (k == FL_Up) {
+					whoPicked--;
+					if (whoPicked < 0) whoPicked = nbrPicked -1;
+					PickedColors();
+				}
+			}
+
+			if (my_status == SUFFIX && (k == FL_Down || k == FL_Up)) {
+				if (nbrPicked) {
+					inpLoginSuffix->color (FL_DARK_RED);
+					inpLoginSuffix->labelcolor (FL_WHITE);
+					inpLoginSuffix->redraw ();
+					if (nbrPicked > 1)
+						if (k == FL_Down)
+							whoPicked = 1;
+						else
+							whoPicked = nbrPicked - 1;
+						else
+							whoPicked = 0;
+					PickedColors();
+					my_status = PICKLIST;
+				}
+			}
+
+			if (my_status == SUFFIX && k == FL_Enter) {
+				if (nbrPicked) {
+					PickedToCallins (0);
+					if (callin_is_up) {
+						WhoIsUp = callinlist.numlist () - 1;
+						dispCallIns(false);
+					}
+					my_status = LOGLIST;
+				}
+			}
+
+			if ( (k >= 'A' && k <= 'z') || (k >= '0' && k <= '9') )	{
+				if (isalpha (k))
+					keyval[0] = toupper(k);
+				else
+					keyval[0] = k;
+				switch (my_status) {
+					case LOGLIST :
+						szSuffix.clear();
+						szSuffix = keyval;
+						inpLoginSuffix->label (szSuffix.c_str());
+						fillPickList ();
+						my_status = SUFFIX;
+						inpLoginSuffix->labelcolor (FL_WHITE);
+						inpLoginSuffix->color (FL_DARK_BLUE);
+						break;
+					case SUFFIX :
+						if (szSuffix.length() > 2) szSuffix.erase(0,1);
+						szSuffix.append(keyval);
+						inpLoginSuffix->label (szSuffix.c_str());
+						fillPickList ();
+						break;
+					case PREFIX :
+						if (szPrefix.length() > 1) szPrefix.erase(0,1);
+						szPrefix.append(keyval);
+						inpLoginPrefix->label (szPrefix.c_str());
+						break;
+					case AREA :
+						szArea = keyval;
+						inpLoginArea->label (szArea.c_str());
+						break;
+					default : ;
+				}
+				return 1;
+			}
+			if (k == FL_Tab) {
+				switch (my_status) {
+					case SUFFIX :
+						inpLoginSuffix->labelcolor (FL_BLACK);
+						inpLoginSuffix->color (FL_WHITE);
+						inpLoginPrefix->labelcolor (FL_WHITE);
+						inpLoginPrefix->color (FL_DARK_BLUE);
+						inpLoginPrefix->label (szPrefix.c_str());
+						my_status = PREFIX;
+						break;
+					case PREFIX :
+						inpLoginPrefix->labelcolor (FL_BLACK);
+						inpLoginPrefix->color (FL_WHITE);
+						inpLoginArea->labelcolor (FL_WHITE);
+						inpLoginArea->color (FL_DARK_BLUE);
+						inpLoginArea->label (szArea.c_str());
+						my_status = AREA;
+						break;
+					case AREA :
+					default : ;
+						
+				}
+				return 1;
+			}
+			if (k == FL_Enter && my_status == AREA) {
+				time_t the_time;
+				struct tm *tm_ptr;
+				char sztime[6];
+				time (&the_time);
+				tm_ptr = localtime (&the_time);
+				sprintf( sztime, "%02d:%02d", tm_ptr->tm_hour, tm_ptr->tm_min);
+				callinlist.add (-1, szPrefix.c_str(), szArea.c_str(), szSuffix.c_str(), "", sztime );
+				if (disp_new_login) WhoIsUp = callinlist.numlist () - 1;
+				dispCallIns (false);
+				clearPickList ();
+				clearSAP ();
+				if (disp_new_login && open_editor) cb_F12 (WhoIsUp);
+			}
+		}
+	}
+	return 1;
+}
+
diff --git a/src/net_icon.cxx b/src/net_icon.cxx
new file mode 100644
index 0000000..439eb16
--- /dev/null
+++ b/src/net_icon.cxx
@@ -0,0 +1,1404 @@
+/* XPM */
+const char * net_icon[] = {
+	"64 64 1336 2",
+	"  	c None",
+	". 	c #FCF5EF",
+	"+ 	c #F4F0EB",
+	"@ 	c #E8E3DC",
+	"# 	c #DFDBD3",
+	"$ 	c #AFAEA4",
+	"% 	c #8D8C84",
+	"& 	c #9B998F",
+	"* 	c #CDC9BD",
+	"= 	c #979287",
+	"- 	c #817C72",
+	"; 	c #D8D5C9",
+	"> 	c #C6C2B8",
+	", 	c #EEEADC",
+	"' 	c #D4CCBC",
+	") 	c #DDD5C5",
+	"! 	c #B6AD9C",
+	"~ 	c #6F6855",
+	"{ 	c #46402F",
+	"] 	c #666250",
+	"^ 	c #B2B0A0",
+	"/ 	c #908F7F",
+	"( 	c #090600",
+	"_ 	c #69655C",
+	": 	c #B7B1A4",
+	"< 	c #191307",
+	"[ 	c #5D554A",
+	"} 	c #8B8376",
+	"| 	c #2C241E",
+	"1 	c #C3BDB2",
+	"2 	c #DCD7C5",
+	"3 	c #C4BDAA",
+	"4 	c #B0AA92",
+	"5 	c #BDB59D",
+	"6 	c #DBD4B9",
+	"7 	c #DFD8BD",
+	"8 	c #847E64",
+	"9 	c #0C0700",
+	"0 	c #464431",
+	"a 	c #FFFFF2",
+	"b 	c #807E6C",
+	"c 	c #000000",
+	"d 	c #C0BAAD",
+	"e 	c #DCD5C9",
+	"f 	c #BCB3A4",
+	"g 	c #6E6557",
+	"h 	c #3B3125",
+	"i 	c #BFB9AF",
+	"j 	c #EAE8D8",
+	"k 	c #CDC8B6",
+	"l 	c #938E7B",
+	"m 	c #AFA990",
+	"n 	c #CDC4A8",
+	"o 	c #50462B",
+	"p 	c #130A00",
+	"q 	c #E5E0C0",
+	"r 	c #EAE8CB",
+	"s 	c #48442E",
+	"t 	c #070500",
+	"u 	c #85836E",
+	"v 	c #D7D4C2",
+	"w 	c #201D18",
+	"x 	c #0D0700",
+	"y 	c #FDFDEE",
+	"z 	c #41382E",
+	"A 	c #62574D",
+	"B 	c #D5C8B7",
+	"C 	c #0A0000",
+	"D 	c #6D6455",
+	"E 	c #938E86",
+	"F 	c #D0D0C4",
+	"G 	c #9E9B8D",
+	"H 	c #B1AD9D",
+	"I 	c #E1DBC8",
+	"J 	c #C9C1AA",
+	"K 	c #80775B",
+	"L 	c #2C220E",
+	"M 	c #2A2003",
+	"N 	c #2A2103",
+	"O 	c #CEC8AB",
+	"P 	c #C2BEA3",
+	"Q 	c #1C180A",
+	"R 	c #27211C",
+	"S 	c #FFFFF4",
+	"T 	c #858578",
+	"U 	c #535044",
+	"V 	c #FBF6E8",
+	"W 	c #D8D2BF",
+	"X 	c #948B78",
+	"Y 	c #F8EBD9",
+	"Z 	c #655845",
+	"` 	c #7E7262",
+	" .	c #63594E",
+	"..	c #8E8D81",
+	"+.	c #C0BAB2",
+	"@.	c #FBF7EC",
+	"#.	c #FFF6E8",
+	"$.	c #E2D7C5",
+	"%.	c #C3B8A2",
+	"&.	c #5E5238",
+	"*.	c #2B1F04",
+	"=.	c #241901",
+	"-.	c #BDB39B",
+	";.	c #FFF8E4",
+	">.	c #C2BCAC",
+	",.	c #CFCDC0",
+	"'.	c #F6F4E8",
+	").	c #F3F5EB",
+	"!.	c #ECECE0",
+	"~.	c #FFFFEF",
+	"{.	c #FFF3DF",
+	"].	c #E4D4C0",
+	"^.	c #AF9F8D",
+	"/.	c #716656",
+	"(.	c #B0B3A6",
+	"_.	c #8F9183",
+	":.	c #C3C2B9",
+	"<.	c #FFF8F6",
+	"[.	c #FEF6F5",
+	"}.	c #FEFBF5",
+	"|.	c #FAF0E3",
+	"1.	c #BDB1A0",
+	"2.	c #887B69",
+	"3.	c #746852",
+	"4.	c #938673",
+	"5.	c #D5C9B8",
+	"6.	c #E0D5C8",
+	"7.	c #FFFFF6",
+	"8.	c #FFFAF3",
+	"9.	c #F0F0E6",
+	"0.	c #F6F3E6",
+	"a.	c #C3BAAA",
+	"b.	c #B0A38F",
+	"c.	c #8E7E66",
+	"d.	c #8C7A64",
+	"e.	c #7A6956",
+	"f.	c #786A58",
+	"g.	c #928A7F",
+	"h.	c #C4C2B4",
+	"i.	c #99998B",
+	"j.	c #B7B9AB",
+	"k.	c #E6E6DD",
+	"l.	c #FBF4F5",
+	"m.	c #FCF3F3",
+	"n.	c #FDF4F0",
+	"o.	c #FDFBF0",
+	"p.	c #D0C3B4",
+	"q.	c #918572",
+	"r.	c #847764",
+	"s.	c #C0B3A0",
+	"t.	c #D7CCBB",
+	"u.	c #CABEB1",
+	"v.	c #A4998F",
+	"w.	c #918680",
+	"x.	c #635E57",
+	"y.	c #323329",
+	"z.	c #18180C",
+	"A.	c #130E03",
+	"B.	c #EBE3D2",
+	"C.	c #968874",
+	"D.	c #0B0000",
+	"E.	c #1D0C00",
+	"F.	c #231302",
+	"G.	c #281B08",
+	"H.	c #171616",
+	"I.	c #A19987",
+	"J.	c #A5A191",
+	"K.	c #E3E3D7",
+	"L.	c #EBECE4",
+	"M.	c #F6F3F3",
+	"N.	c #FFFDFD",
+	"O.	c #F3EDE8",
+	"P.	c #FAF7EB",
+	"Q.	c #F2EADA",
+	"R.	c #9B8F7C",
+	"S.	c #60543D",
+	"T.	c #594D37",
+	"U.	c #463A2B",
+	"V.	c #1D1102",
+	"W.	c #180C00",
+	"X.	c #060000",
+	"Y.	c #090500",
+	"Z.	c #151003",
+	"`.	c #1A1304",
+	" +	c #B4A99A",
+	".+	c #E9DBCA",
+	"++	c #554741",
+	"@+	c #5B4C3C",
+	"#+	c #5A4D3C",
+	"$+	c #372D22",
+	"%+	c #5A5340",
+	"&+	c #A09883",
+	"*+	c #C4C0AF",
+	"=+	c #F1F0E3",
+	"-+	c #F0F0E9",
+	";+	c #FAF9F8",
+	">+	c #F2EFEC",
+	",+	c #FEFDF6",
+	"'+	c #FFFFF3",
+	")+	c #BFB8A6",
+	"!+	c #453A25",
+	"~+	c #1B1000",
+	"{+	c #2B1F06",
+	"]+	c #1A0E00",
+	"^+	c #1C1101",
+	"/+	c #322616",
+	"(+	c #3F3326",
+	"_+	c #7B7366",
+	":+	c #979385",
+	"<+	c #C0BFAF",
+	"[+	c #C2C0B0",
+	"}+	c #EBE5D5",
+	"|+	c #F9EFDF",
+	"1+	c #FAEBDB",
+	"2+	c #E4D6C4",
+	"3+	c #D4C7B6",
+	"4+	c #A69D8A",
+	"5+	c #8E8774",
+	"6+	c #A5A190",
+	"7+	c #A8A08B",
+	"8+	c #B4AC98",
+	"9+	c #D2CEBC",
+	"0+	c #EEEBDF",
+	"a+	c #FDFDF5",
+	"b+	c #EFEEEB",
+	"c+	c #F7F5F0",
+	"d+	c #736E5F",
+	"e+	c #231B07",
+	"f+	c #1F1504",
+	"g+	c #251A01",
+	"h+	c #2D2107",
+	"i+	c #40341C",
+	"j+	c #948973",
+	"k+	c #F1E9D7",
+	"l+	c #FBF0DE",
+	"m+	c #FFFBEA",
+	"n+	c #E8E2D4",
+	"o+	c #B2AC9C",
+	"p+	c #7D7666",
+	"q+	c #716758",
+	"r+	c #AB9F8F",
+	"s+	c #978A7A",
+	"t+	c #1C0F09",
+	"u+	c #2D2212",
+	"v+	c #372E1B",
+	"w+	c #37301D",
+	"x+	c #3A331F",
+	"y+	c #8E8671",
+	"z+	c #C0B8A3",
+	"A+	c #DCD5C4",
+	"B+	c #ECEADC",
+	"C+	c #FCFCF3",
+	"D+	c #FBFAF5",
+	"E+	c #D6D4CE",
+	"F+	c #252117",
+	"G+	c #1B1506",
+	"H+	c #302814",
+	"I+	c #463C23",
+	"J+	c #73674E",
+	"K+	c #766B4F",
+	"L+	c #B6AA91",
+	"M+	c #B2A791",
+	"N+	c #796E5B",
+	"O+	c #362B17",
+	"P+	c #100800",
+	"Q+	c #090300",
+	"R+	c #100900",
+	"S+	c #130C00",
+	"T+	c #160D09",
+	"U+	c #C6BCAC",
+	"V+	c #FFFBEB",
+	"W+	c #2D2111",
+	"X+	c #20150B",
+	"Y+	c #27210B",
+	"Z+	c #221C11",
+	"`+	c #EAE5D0",
+	" @	c #9E937E",
+	".@	c #CAC0AB",
+	"+@	c #D4CDBB",
+	"@@	c #FBFAF1",
+	"#@	c #ACACA4",
+	"$@	c #25241A",
+	"%@	c #242014",
+	"&@	c #373121",
+	"*@	c #7B7464",
+	"=@	c #EFE6CB",
+	"-@	c #C3B79C",
+	";@	c #423722",
+	">@	c #1D1100",
+	",@	c #100600",
+	"'@	c #150A00",
+	")@	c #1F1707",
+	"!@	c #211B0C",
+	"~@	c #2E2619",
+	"{@	c #575041",
+	"]@	c #514841",
+	"^@	c #B6AD9E",
+	"/@	c #FEFAEB",
+	"(@	c #BFB7A7",
+	"_@	c #B3A897",
+	":@	c #ADA593",
+	"<@	c #827C66",
+	"[@	c #857F68",
+	"}@	c #C9C4AF",
+	"|@	c #A59A84",
+	"1@	c #CBC1AB",
+	"2@	c #DCD6C2",
+	"3@	c #FAF6EA",
+	"4@	c #BFBDB1",
+	"5@	c #1B1B12",
+	"6@	c #19180B",
+	"7@	c #635F52",
+	"8@	c #D5D3C3",
+	"9@	c #F0E9D3",
+	"0@	c #696054",
+	"a@	c #2C210B",
+	"b@	c #271C06",
+	"c@	c #281D07",
+	"d@	c #1C1100",
+	"e@	c #3D3318",
+	"f@	c #6D6350",
+	"g@	c #A59C8B",
+	"h@	c #CBC7B4",
+	"i@	c #DFDECD",
+	"j@	c #FFFAE9",
+	"k@	c #FDF4E4",
+	"l@	c #CBC3B4",
+	"m@	c #CBC1B4",
+	"n@	c #B3ADA0",
+	"o@	c #847A6A",
+	"p@	c #645B49",
+	"q@	c #6D6753",
+	"r@	c #554F38",
+	"s@	c #4E4831",
+	"t@	c #978C76",
+	"u@	c #C6BCA6",
+	"v@	c #DBD4C0",
+	"w@	c #EFECDD",
+	"x@	c #B2B0A4",
+	"y@	c #AAA99C",
+	"z@	c #F8F5E6",
+	"A@	c #B4AE9E",
+	"B@	c #1B1207",
+	"C@	c #211705",
+	"D@	c #201400",
+	"E@	c #1C1000",
+	"F@	c #483C22",
+	"G@	c #887D63",
+	"H@	c #E8DEC3",
+	"I@	c #FCF2D8",
+	"J@	c #B1A78F",
+	"K@	c #857D69",
+	"L@	c #746C5B",
+	"M@	c #2D2415",
+	"N@	c #261E11",
+	"O@	c #090200",
+	"P@	c #C9C1B5",
+	"Q@	c #E3DACD",
+	"R@	c #282110",
+	"S@	c #140D00",
+	"T@	c #231B09",
+	"U@	c #1D1501",
+	"V@	c #282111",
+	"W@	c #C6C5B4",
+	"X@	c #B2A68F",
+	"Y@	c #CEC2AC",
+	"Z@	c #C9C0AD",
+	"`@	c #F8F4E5",
+	" #	c #EEECE0",
+	".#	c #D0D1C4",
+	"+#	c #FDFCEF",
+	"@#	c #868374",
+	"##	c #010000",
+	"$#	c #352C18",
+	"%#	c #372C16",
+	"&#	c #80755F",
+	"*#	c #CFC3AB",
+	"=#	c #8E826A",
+	"-#	c #655B42",
+	";#	c #382E13",
+	">#	c #2A2009",
+	",#	c #040000",
+	"'#	c #191001",
+	")#	c #251C0B",
+	"!#	c #20180B",
+	"~#	c #120B06",
+	"{#	c #645C52",
+	"]#	c #FFFFF5",
+	"^#	c #968F81",
+	"/#	c #6A6351",
+	"(#	c #8A826D",
+	"_#	c #625A43",
+	":#	c #6E674D",
+	"<#	c #D1CEBB",
+	"[#	c #988C73",
+	"}#	c #685C45",
+	"|#	c #89806C",
+	"1#	c #E6DFD1",
+	"2#	c #FAF9EC",
+	"3#	c #F3F4E8",
+	"4#	c #55544A",
+	"5#	c #0E0B01",
+	"6#	c #3A3425",
+	"7#	c #595142",
+	"8#	c #E9E1D0",
+	"9#	c #EFEAD7",
+	"0#	c #766A5C",
+	"a#	c #1F1403",
+	"b#	c #0D0300",
+	"c#	c #2C2207",
+	"d#	c #372C12",
+	"e#	c #493D28",
+	"f#	c #615745",
+	"g#	c #817B6A",
+	"h#	c #9C9588",
+	"i#	c #DDD8CC",
+	"j#	c #F3EDE2",
+	"k#	c #F7F0E4",
+	"l#	c #FFFFF8",
+	"m#	c #E0DCCA",
+	"n#	c #AAA28E",
+	"o#	c #BBB39B",
+	"p#	c #92896F",
+	"q#	c #76735D",
+	"r#	c #999C89",
+	"s#	c #FFFFF9",
+	"t#	c #6C6149",
+	"u#	c #827964",
+	"v#	c #DDD6C7",
+	"w#	c #FBF9ED",
+	"x#	c #B6B6AA",
+	"y#	c #605C52",
+	"z#	c #B0A99F",
+	"A#	c #F2EEE1",
+	"B#	c #9A9182",
+	"C#	c #352822",
+	"D#	c #24180D",
+	"E#	c #221604",
+	"F#	c #241904",
+	"G#	c #41371E",
+	"H#	c #7C7259",
+	"I#	c #C8BDA5",
+	"J#	c #ECE1CC",
+	"K#	c #EADECB",
+	"L#	c #CFC9B8",
+	"M#	c #AEA79B",
+	"N#	c #837D72",
+	"O#	c #4B463D",
+	"P#	c #EAE5DB",
+	"Q#	c #FFFEF1",
+	"R#	c #C4BEAD",
+	"S#	c #191100",
+	"T#	c #281F0D",
+	"U#	c #41371C",
+	"V#	c #1A1800",
+	"W#	c #A4A792",
+	"X#	c #33240D",
+	"Y#	c #51432C",
+	"Z#	c #C9C0AB",
+	"`#	c #D4CEBD",
+	" $	c #E8E6DA",
+	".$	c #DCDCD1",
+	"+$	c #8F8D84",
+	"@$	c #E5E1D6",
+	"#$	c #FDFCF2",
+	"$$	c #483E39",
+	"%$	c #251911",
+	"&$	c #2D1F13",
+	"*$	c #170A00",
+	"=$	c #655745",
+	"-$	c #9A8F7A",
+	";$	c #948A72",
+	">$	c #9F957B",
+	",$	c #71674E",
+	"'$	c #322617",
+	")$	c #1B0F0D",
+	"!$	c #1E150A",
+	"~$	c #211A0C",
+	"{$	c #050000",
+	"]$	c #2C2820",
+	"^$	c #F2F0E4",
+	"/$	c #EAE3D3",
+	"($	c #D8D0BC",
+	"_$	c #746A52",
+	":$	c #180D00",
+	"<$	c #48462C",
+	"[$	c #E8EBD5",
+	"}$	c #45371D",
+	"|$	c #908269",
+	"1$	c #A49A87",
+	"2$	c #A8A191",
+	"3$	c #E3E1D4",
+	"4$	c #F6F4EB",
+	"5$	c #FFFFF7",
+	"6$	c #E9E5DC",
+	"7$	c #160E06",
+	"8$	c #1A1008",
+	"9$	c #31241B",
+	"0$	c #6C5F54",
+	"a$	c #F4E8DA",
+	"b$	c #D9D4C4",
+	"c$	c #4C402C",
+	"d$	c #281E05",
+	"e$	c #130900",
+	"f$	c #261B08",
+	"g$	c #2C2313",
+	"h$	c #1A120D",
+	"i$	c #454035",
+	"j$	c #D2CEC5",
+	"k$	c #FDFDF2",
+	"l$	c #EDE9DC",
+	"m$	c #EEE8D7",
+	"n$	c #D4C9B0",
+	"o$	c #CEC4A7",
+	"p$	c #AEAA8F",
+	"q$	c #A2A68E",
+	"r$	c #B3B5A3",
+	"s$	c #827763",
+	"t$	c #796B55",
+	"u$	c #241707",
+	"v$	c #736853",
+	"w$	c #DFD7C7",
+	"x$	c #F2EFE7",
+	"y$	c #DBD8D0",
+	"z$	c #0C0800",
+	"A$	c #272118",
+	"B$	c #60594E",
+	"C$	c #CAC2B7",
+	"D$	c #F1E8DA",
+	"E$	c #A29E91",
+	"F$	c #231507",
+	"G$	c #221405",
+	"H$	c #261905",
+	"I$	c #1B0D00",
+	"J$	c #41341E",
+	"K$	c #574B35",
+	"L$	c #877D67",
+	"M$	c #CAC5B1",
+	"N$	c #F5F1DF",
+	"O$	c #FBF3E5",
+	"P$	c #EBE8DC",
+	"Q$	c #FFFBEE",
+	"R$	c #F1ECDF",
+	"S$	c #F3ECDB",
+	"T$	c #E1D9C7",
+	"U$	c #C2B8A4",
+	"V$	c #554C38",
+	"W$	c #4A442A",
+	"X$	c #363324",
+	"Y$	c #6F6B59",
+	"Z$	c #453826",
+	"`$	c #302009",
+	" %	c #AC9B80",
+	".%	c #E8D9C5",
+	"+%	c #F7F1E9",
+	"@%	c #D6D2CA",
+	"#%	c #231F15",
+	"$%	c #A09D91",
+	"%%	c #FBFAEC",
+	"&%	c #C5C2B1",
+	"*%	c #39342E",
+	"=%	c #191101",
+	"-%	c #201505",
+	";%	c #1A0B00",
+	">%	c #51402E",
+	",%	c #6B5849",
+	"'%	c #B2A28C",
+	")%	c #DCD2B5",
+	"!%	c #BBB296",
+	"~%	c #7E7760",
+	"{%	c #665E4C",
+	"]%	c #494036",
+	"^%	c #463D2C",
+	"/%	c #7F7869",
+	"(%	c #FBF8E8",
+	"_%	c #E3DDCD",
+	":%	c #F6F0DF",
+	"<%	c #86806F",
+	"[%	c #100A00",
+	"}%	c #261D07",
+	"|%	c #251A0C",
+	"1%	c #E3D8C7",
+	"2%	c #4A3D2C",
+	"3%	c #7F7059",
+	"4%	c #AD9C81",
+	"5%	c #B0A18B",
+	"6%	c #D6CDC6",
+	"7%	c #FBF9F2",
+	"8%	c #E1DDD2",
+	"9%	c #FEFEF2",
+	"0%	c #858272",
+	"a%	c #1D1A0A",
+	"b%	c #35301E",
+	"c%	c #1D1603",
+	"d%	c #7B715F",
+	"e%	c #F1E2D0",
+	"f%	c #9C8B78",
+	"g%	c #574432",
+	"h%	c #392A17",
+	"i%	c #281F0C",
+	"j%	c #271D06",
+	"k%	c #2B200B",
+	"l%	c #191000",
+	"m%	c #080000",
+	"n%	c #5C5544",
+	"o%	c #F6F4E4",
+	"p%	c #FAF4E4",
+	"q%	c #A29C8C",
+	"r%	c #ADA894",
+	"s%	c #A99F8A",
+	"t%	c #978B75",
+	"u%	c #C8BCA9",
+	"v%	c #D9D1C2",
+	"w%	c #93846F",
+	"x%	c #4C3C24",
+	"y%	c #564731",
+	"z%	c #EEE5DC",
+	"A%	c #F4EDE5",
+	"B%	c #666258",
+	"C%	c #272413",
+	"D%	c #57523F",
+	"E%	c #C2BCAA",
+	"F%	c #A69C8A",
+	"G%	c #190802",
+	"H%	c #220F00",
+	"I%	c #261704",
+	"J%	c #221804",
+	"K%	c #150B04",
+	"L%	c #2A200C",
+	"M%	c #413621",
+	"N%	c #756D5B",
+	"O%	c #ADA492",
+	"P%	c #F1EADA",
+	"Q%	c #FFFEEE",
+	"R%	c #EFEADA",
+	"S%	c #CDC7B7",
+	"T%	c #D7D2C1",
+	"U%	c #ADA895",
+	"V%	c #968B77",
+	"W%	c #8C8068",
+	"X%	c #685C49",
+	"Y%	c #887F70",
+	"Z%	c #635642",
+	"`%	c #1D0D00",
+	" &	c #7B6E57",
+	".&	c #D5CDC1",
+	"+&	c #F6F0E6",
+	"@&	c #050100",
+	"#&	c #484537",
+	"$&	c #B2B0A1",
+	"%&	c #FFFFEE",
+	"&&	c #BCB9A8",
+	"*&	c #594E40",
+	"=&	c #140700",
+	"-&	c #291907",
+	";&	c #2D1B0D",
+	">&	c #3D2F16",
+	",&	c #605639",
+	"'&	c #A99F82",
+	")&	c #DED4BA",
+	"!&	c #E9E0CB",
+	"~&	c #D8D4C2",
+	"{&	c #C6BDAC",
+	"]&	c #ABA594",
+	"^&	c #686053",
+	"/&	c #8D8678",
+	"(&	c #BFBAAA",
+	"_&	c #5D5747",
+	":&	c #312710",
+	"<&	c #231700",
+	"[&	c #170B00",
+	"}&	c #98917F",
+	"|&	c #463B28",
+	"1&	c #665A40",
+	"2&	c #CFC3AE",
+	"3&	c #CDC4B6",
+	"4&	c #E8E0D4",
+	"5&	c #FFFAED",
+	"6&	c #C0B9AC",
+	"7&	c #E3E2D4",
+	"8&	c #E6E4D6",
+	"9&	c #655F50",
+	"0&	c #1C1403",
+	"a&	c #20160A",
+	"b&	c #1E1100",
+	"c&	c #685845",
+	"d&	c #8C7B6C",
+	"e&	c #8E8067",
+	"f&	c #978E70",
+	"g&	c #8D8468",
+	"h&	c #5A5043",
+	"i&	c #423726",
+	"j&	c #312714",
+	"k&	c #211706",
+	"l&	c #0E0700",
+	"m&	c #292218",
+	"n&	c #F9F8E8",
+	"o&	c #B1AA9A",
+	"p&	c #453F2D",
+	"q&	c #70654F",
+	"r&	c #665A42",
+	"s&	c #675B4A",
+	"t&	c #BAB3A0",
+	"u&	c #A69B85",
+	"v&	c #7F745F",
+	"w&	c #5E5443",
+	"x&	c #E4DBCB",
+	"y&	c #F9F2E2",
+	"z&	c #C9C4B6",
+	"A&	c #353223",
+	"B&	c #332D1D",
+	"C&	c #1A1403",
+	"D&	c #544C3A",
+	"E&	c #D2CEBB",
+	"F&	c #FFFFF1",
+	"G&	c #8B7B65",
+	"H&	c #211302",
+	"I&	c #1F1501",
+	"J&	c #241A02",
+	"K&	c #221706",
+	"L&	c #271E0D",
+	"M&	c #4D4636",
+	"N&	c #BBB3A4",
+	"O&	c #F8F2E2",
+	"P&	c #FEFCEC",
+	"Q&	c #FBFAE8",
+	"R&	c #F1E7D1",
+	"S&	c #CABEA4",
+	"T&	c #ACA088",
+	"U&	c #A8A08C",
+	"V&	c #A5A195",
+	"W&	c #665E4A",
+	"X&	c #4E4430",
+	"Y&	c #D1C9B6",
+	"Z&	c #EDE5D3",
+	"`&	c #F4F4E3",
+	" *	c #403A30",
+	".*	c #1F1C13",
+	"+*	c #3C3628",
+	"@*	c #AFAA9A",
+	"#*	c #D9D1BF",
+	"$*	c #322511",
+	"%*	c #120300",
+	"&*	c #33250C",
+	"**	c #2B2105",
+	"=*	c #372D14",
+	"-*	c #675D48",
+	";*	c #D6CCB9",
+	">*	c #FEFDED",
+	",*	c #F8F7E6",
+	"'*	c #DFD9CA",
+	")*	c #B6B0A0",
+	"!*	c #B5AF9E",
+	"~*	c #625C49",
+	"{*	c #1A1000",
+	"]*	c #35290F",
+	"^*	c #42361F",
+	"/*	c #928E7C",
+	"(*	c #49412A",
+	"_*	c #AFA48D",
+	":*	c #D7CEB9",
+	"<*	c #EAE2CE",
+	"[*	c #FAF5E3",
+	"}*	c #857E6F",
+	"|*	c #7B786A",
+	"1*	c #FFFFFC",
+	"2*	c #E2E0D1",
+	"3*	c #746C5D",
+	"4*	c #1B1401",
+	"5*	c #201500",
+	"6*	c #32260D",
+	"7*	c #3E331B",
+	"8*	c #51482B",
+	"9*	c #8E8469",
+	"0*	c #E7DEC5",
+	"a*	c #D8D4BF",
+	"b*	c #B4AC9A",
+	"c*	c #A09785",
+	"d*	c #5E5647",
+	"e*	c #312A1E",
+	"f*	c #0B0400",
+	"g*	c #FBF5E5",
+	"h*	c #BBB5A1",
+	"i*	c #30260F",
+	"j*	c #4C4125",
+	"k*	c #392D16",
+	"l*	c #47402E",
+	"m*	c #D2D0BC",
+	"n*	c #7E7661",
+	"o*	c #9D9379",
+	"p*	c #7A6F58",
+	"q*	c #EBE3CE",
+	"r*	c #EBE7D5",
+	"s*	c #F6F1E1",
+	"t*	c #8D8A7E",
+	"u*	c #342E21",
+	"v*	c #1D1606",
+	"w*	c #211907",
+	"x*	c #6E654D",
+	"y*	c #CAC6AD",
+	"z*	c #BFB397",
+	"A*	c #6B6244",
+	"B*	c #574D31",
+	"C*	c #423829",
+	"D*	c #2C210E",
+	"E*	c #1B1100",
+	"F*	c #120B00",
+	"G*	c #362F1E",
+	"H*	c #433D2E",
+	"I*	c #E2DCCC",
+	"J*	c #F7F4E0",
+	"K*	c #D4CFB8",
+	"L*	c #D1C6AB",
+	"M*	c #C3B79D",
+	"N*	c #BDB79D",
+	"O*	c #B7B49E",
+	"P*	c #ADAC9A",
+	"Q*	c #473C22",
+	"R*	c #3B3018",
+	"S*	c #DAD1BA",
+	"T*	c #EDE7D4",
+	"U*	c #7A7366",
+	"V*	c #241E12",
+	"W*	c #251F11",
+	"X*	c #5E5847",
+	"Y*	c #C9C1AD",
+	"Z*	c #FFFFE7",
+	"`*	c #CAC1A7",
+	" =	c #3D331D",
+	".=	c #221800",
+	"+=	c #1F1500",
+	"@=	c #130800",
+	"#=	c #241A09",
+	"$=	c #534A3A",
+	"%=	c #8C8575",
+	"&=	c #DDD7C7",
+	"*=	c #F6F3E3",
+	"==	c #FBFBEB",
+	"-=	c #DBD6C2",
+	";=	c #A89F88",
+	">=	c #6F6448",
+	",=	c #54482E",
+	"'=	c #514A31",
+	")=	c #37341C",
+	"!=	c #63624D",
+	"~=	c #4F4832",
+	"{=	c #372D10",
+	"]=	c #8F8568",
+	"^=	c #C0B8A0",
+	"/=	c #F4ECDA",
+	"(=	c #FFFAEA",
+	"_=	c #59544F",
+	":=	c #1E180E",
+	"<=	c #ABA697",
+	"[=	c #FEF8E9",
+	"}=	c #E2DBC7",
+	"|=	c #655E44",
+	"1=	c #0F0500",
+	"2=	c #241B02",
+	"3=	c #342B0D",
+	"4=	c #2C2206",
+	"5=	c #483E25",
+	"6=	c #A19680",
+	"7=	c #E5DBC9",
+	"8=	c #F9F7E6",
+	"9=	c #D7D0C1",
+	"0=	c #958D7E",
+	"a=	c #554E3E",
+	"b=	c #272213",
+	"c=	c #CBC6B2",
+	"d=	c #B3A98F",
+	"e=	c #190E04",
+	"f=	c #372C11",
+	"g=	c #322B10",
+	"h=	c #2A270F",
+	"i=	c #CCCBB6",
+	"j=	c #FCFDEF",
+	"k=	c #72684A",
+	"l=	c #C5BB9E",
+	"m=	c #9E977C",
+	"n=	c #DFD8C5",
+	"o=	c #FFFDEE",
+	"p=	c #EEEADD",
+	"q=	c #FDF9ED",
+	"r=	c #FCFBEE",
+	"s=	c #928C7D",
+	"t=	c #1F180B",
+	"u=	c #231C03",
+	"v=	c #32270C",
+	"w=	c #574E35",
+	"x=	c #867C60",
+	"y=	c #8C8266",
+	"z=	c #A1977E",
+	"A=	c #BDB29D",
+	"B=	c #867C6E",
+	"C=	c #413827",
+	"D=	c #2A2313",
+	"E=	c #0F0800",
+	"F=	c #140E00",
+	"G=	c #19140F",
+	"H=	c #B7B3A0",
+	"I=	c #F4ECD5",
+	"J=	c #837859",
+	"K=	c #857A5E",
+	"L=	c #878065",
+	"M=	c #8D8970",
+	"N=	c #DFDDC8",
+	"O=	c #B5B7A4",
+	"P=	c #91876B",
+	"Q=	c #52492C",
+	"R=	c #342D14",
+	"S=	c #C5BFAD",
+	"T=	c #FFFEF0",
+	"U=	c #D9D6CD",
+	"V=	c #504D40",
+	"W=	c #130F00",
+	"X=	c #2E2715",
+	"Y=	c #686048",
+	"Z=	c #BCB89D",
+	"`=	c #F9F1D4",
+	" -	c #B7A78D",
+	".-	c #483927",
+	"+-	c #35260F",
+	"@-	c #342711",
+	"#-	c #110600",
+	"$-	c #27200D",
+	"%-	c #4D4635",
+	"&-	c #888373",
+	"*-	c #A09B8E",
+	"=-	c #C1BEB1",
+	"--	c #DDDACE",
+	";-	c #EFE8D4",
+	">-	c #ECE0C7",
+	",-	c #E4D8BF",
+	"'-	c #CFC4AB",
+	")-	c #C3B9A0",
+	"!-	c #D4CBB5",
+	"~-	c #9E9986",
+	"{-	c #DDD9CA",
+	"]-	c #6E674B",
+	"^-	c #372F12",
+	"/-	c #7C765D",
+	"(-	c #D5D0BE",
+	"_-	c #F0EDE0",
+	":-	c #FFFFFD",
+	"<-	c #747168",
+	"[-	c #5C5849",
+	"}-	c #C3BCAB",
+	"|-	c #FAF9E4",
+	"1-	c #F9F0D6",
+	"2-	c #584B35",
+	"3-	c #1F0D02",
+	"4-	c #3A2813",
+	"5-	c #3C2C15",
+	"6-	c #2D1F07",
+	"7-	c #4C402A",
+	"8-	c #988D77",
+	"9-	c #CBC4AF",
+	"0-	c #F8F8E6",
+	"a-	c #FBF9EA",
+	"b-	c #F3F0E7",
+	"c-	c #F8F5ED",
+	"d-	c #F1EBDB",
+	"e-	c #E8DDC7",
+	"f-	c #B0A48C",
+	"g-	c #D1C4AD",
+	"h-	c #887962",
+	"i-	c #7F705B",
+	"j-	c #C1B4A1",
+	"k-	c #A79C8D",
+	"l-	c #877E64",
+	"m-	c #62593D",
+	"n-	c #CBC4AC",
+	"o-	c #BFBAA8",
+	"p-	c #E8E5D7",
+	"q-	c #CFCCC5",
+	"r-	c #9E9C92",
+	"s-	c #F8F5E9",
+	"t-	c #FCFDEE",
+	"u-	c #8A8270",
+	"v-	c #160E00",
+	"w-	c #211402",
+	"x-	c #372611",
+	"y-	c #473623",
+	"z-	c #554430",
+	"A-	c #978972",
+	"B-	c #E3D7C0",
+	"C-	c #FFF6E0",
+	"D-	c #E0D8C3",
+	"E-	c #E6E1CE",
+	"F-	c #F0ECDB",
+	"G-	c #EFE9DC",
+	"H-	c #EDE9DE",
+	"I-	c #7F7A71",
+	"J-	c #9E9787",
+	"K-	c #CFC5AE",
+	"L-	c #72674F",
+	"M-	c #746850",
+	"N-	c #190D00",
+	"O-	c #B2A592",
+	"P-	c #706556",
+	"Q-	c #A1967C",
+	"R-	c #897F69",
+	"S-	c #4E4736",
+	"T-	c #C8C3B6",
+	"U-	c #F4F1E7",
+	"V-	c #F7F4ED",
+	"W-	c #A9A79F",
+	"X-	c #393428",
+	"Y-	c #1D1608",
+	"Z-	c #443E2D",
+	"`-	c #6C6452",
+	" ;	c #B6AC9A",
+	".;	c #DCCEBC",
+	"+;	c #AB9D88",
+	"@;	c #8D806A",
+	"#;	c #A0957E",
+	"$;	c #B6AB93",
+	"%;	c #C7BFA7",
+	"&;	c #BFB6A1",
+	"*;	c #40382A",
+	"=;	c #625A4A",
+	"-;	c #DBD2C4",
+	";;	c #1C140B",
+	">;	c #261D0F",
+	",;	c #D0C6AF",
+	"';	c #2E220C",
+	");	c #4A3E34",
+	"!;	c #A89C83",
+	"~;	c #160A01",
+	"{;	c #A19684",
+	"];	c #756D5F",
+	"^;	c #897C63",
+	"/;	c #2B1F0B",
+	"(;	c #4A4231",
+	"_;	c #CDC6BA",
+	":;	c #F2EEE3",
+	"<;	c #FCFBF3",
+	"[;	c #C1BDB7",
+	"};	c #0D0A03",
+	"|;	c #2B271E",
+	"1;	c #6E695F",
+	"2;	c #C9C5B8",
+	"3;	c #F5F1E3",
+	"4;	c #DED2C2",
+	"5;	c #A19582",
+	"6;	c #786C57",
+	"7;	c #453B23",
+	"8;	c #1E140D",
+	"9;	c #9E947A",
+	"0;	c #B9AE97",
+	"a;	c #1F1506",
+	"b;	c #140800",
+	"c;	c #C7BCAB",
+	"d;	c #584C41",
+	"e;	c #160B00",
+	"f;	c #CFC5AC",
+	"g;	c #5F533C",
+	"h;	c #2B1F18",
+	"i;	c #BBAF98",
+	"j;	c #170C08",
+	"k;	c #867C6A",
+	"l;	c #968E81",
+	"m;	c #4A3F2C",
+	"n;	c #AFA695",
+	"o;	c #CFC7BB",
+	"p;	c #EBE3D9",
+	"q;	c #FFFDF4",
+	"r;	c #DEDAD2",
+	"s;	c #66635D",
+	"t;	c #CCC9C2",
+	"u;	c #F7F6EF",
+	"v;	c #FDFAF2",
+	"w;	c #EBE5DB",
+	"x;	c #FCF8EB",
+	"y;	c #E8E0CF",
+	"z;	c #A79F8C",
+	"A;	c #574F39",
+	"B;	c #261C04",
+	"C;	c #362C15",
+	"D;	c #786C52",
+	"E;	c #C7BBA2",
+	"F;	c #332516",
+	"G;	c #271904",
+	"H;	c #AA9B87",
+	"I;	c #80715F",
+	"J;	c #030000",
+	"K;	c #B0A58E",
+	"L;	c #857A65",
+	"M;	c #2A1F10",
+	"N;	c #BCB19B",
+	"O;	c #120A0A",
+	"P;	c #766F5E",
+	"Q;	c #B4AFA3",
+	"R;	c #A39886",
+	"S;	c #B3AB9A",
+	"T;	c #797062",
+	"U;	c #C7BFB3",
+	"V;	c #F4ECE2",
+	"W;	c #FEFBF3",
+	"X;	c #FFFDF7",
+	"Y;	c #F5F1EC",
+	"Z;	c #FFFBF7",
+	"`;	c #FCF7EF",
+	" >	c #DED5C4",
+	".>	c #AEA693",
+	"+>	c #766E58",
+	"@>	c #312810",
+	"#>	c #1E1400",
+	"$>	c #685C41",
+	"%>	c #988B70",
+	"&>	c #5C4D34",
+	"*>	c #897860",
+	"=>	c #AA9A82",
+	"->	c #B2A590",
+	";>	c #928773",
+	">>	c #190F0A",
+	",>	c #B8AF9B",
+	"'>	c #2E2716",
+	")>	c #767163",
+	"!>	c #B4AB9A",
+	"~>	c #4F4535",
+	"{>	c #362D1D",
+	"]>	c #B6AE9F",
+	"^>	c #F2EADF",
+	"/>	c #FAF2E8",
+	"(>	c #FDF8EF",
+	"_>	c #FAF6F0",
+	":>	c #FBF8F3",
+	"<>	c #F9F6F2",
+	"[>	c #F8F2EA",
+	"}>	c #FAF3E4",
+	"|>	c #D3CCBA",
+	"1>	c #A59E8B",
+	"2>	c #7A725C",
+	"3>	c #31280D",
+	"4>	c #0E0300",
+	"5>	c #625638",
+	"6>	c #AFA084",
+	"7>	c #57472D",
+	"8>	c #140300",
+	"9>	c #77654B",
+	"0>	c #AC9980",
+	"a>	c #090000",
+	"b>	c #9E927B",
+	"c>	c #877C68",
+	"d>	c #221912",
+	"e>	c #9D9782",
+	"f>	c #1E1910",
+	"g>	c #9D9B91",
+	"h>	c #928A7A",
+	"i>	c #534B39",
+	"j>	c #857D6B",
+	"k>	c #C8C0AE",
+	"l>	c #E9E0D1",
+	"m>	c #F5EEDE",
+	"n>	c #FCF5EA",
+	"o>	c #FDF7EE",
+	"p>	c #FBF7F1",
+	"q>	c #F4EEE4",
+	"r>	c #EFE7D6",
+	"s>	c #BFB8A5",
+	"t>	c #B3AB96",
+	"u>	c #6C6349",
+	"v>	c #241A00",
+	"w>	c #140900",
+	"x>	c #847558",
+	"y>	c #AFA181",
+	"z>	c #443523",
+	"A>	c #1B0A00",
+	"B>	c #7D6C50",
+	"C>	c #79674C",
+	"D>	c #1D0E00",
+	"E>	c #897D63",
+	"F>	c #40361F",
+	"G>	c #3C3524",
+	"H>	c #65604E",
+	"I>	c #827F7A",
+	"J>	c #948F7C",
+	"K>	c #B2AA97",
+	"L>	c #D5CDB8",
+	"M>	c #E0D8C4",
+	"N>	c #EEE6D2",
+	"O>	c #F7EEDE",
+	"P>	c #F6EEE0",
+	"Q>	c #F2EBE1",
+	"R>	c #EAE3DB",
+	"S>	c #E1DACD",
+	"T>	c #D6CEBA",
+	"U>	c #B5AB97",
+	"V>	c #ABA08A",
+	"W>	c #544A2E",
+	"X>	c #1F1400",
+	"Y>	c #382D11",
+	"Z>	c #AB9E7E",
+	"`>	c #746646",
+	" ,	c #2D1E0F",
+	".,	c #2E1D04",
+	"+,	c #8B7A5D",
+	"@,	c #3C2C1C",
+	"#,	c #231504",
+	"$,	c #7E7257",
+	"%,	c #170C01",
+	"&,	c #736C58",
+	"*,	c #A4A199",
+	"=,	c #FEFEFE",
+	"-,	c #B9B4A1",
+	";,	c #A29A86",
+	">,	c #C2BBA1",
+	",,	c #D2C8AF",
+	"',	c #E0D5BD",
+	"),	c #E8DECA",
+	"!,	c #E6DDCD",
+	"~,	c #DFD6C9",
+	"{,	c #D2CABF",
+	"],	c #C8BEB0",
+	"^,	c #B8AD98",
+	"/,	c #B5A992",
+	"(,	c #7F725A",
+	"_,	c #271A01",
+	":,	c #2E2003",
+	"<,	c #887B5B",
+	"[,	c #B2A585",
+	"},	c #4B3D1E",
+	"|,	c #211200",
+	"1,	c #5C4D31",
+	"2,	c #736349",
+	"3,	c #1C0C00",
+	"4,	c #77684E",
+	"5,	c #4F4229",
+	"6,	c #41351D",
+	"7,	c #B1ACA1",
+	"8,	c #98937B",
+	"9,	c #A9A185",
+	"0,	c #B8AC91",
+	"a,	c #C6B99E",
+	"b,	c #D1C5AD",
+	"c,	c #D1C5B1",
+	"d,	c #C8BFAE",
+	"e,	c #BCB2A5",
+	"f,	c #B0A494",
+	"g,	c #A3967E",
+	"h,	c #9A8A73",
+	"i,	c #504128",
+	"j,	c #271804",
+	"k,	c #6A5D3D",
+	"l,	c #B8AC8B",
+	"m,	c #817453",
+	"n,	c #241700",
+	"o,	c #3F3118",
+	"p,	c #8D7D63",
+	"q,	c #392911",
+	"r,	c #45362A",
+	"s,	c #796A4F",
+	"t,	c #332710",
+	"u,	c #B8AE99",
+	"v,	c #A59F89",
+	"w,	c #938B6F",
+	"x,	c #A2987A",
+	"y,	c #B2A488",
+	"z,	c #BCAE94",
+	"A,	c #BBAD96",
+	"B,	c #B4A692",
+	"C,	c #A79988",
+	"D,	c #998B76",
+	"E,	c #8C7D64",
+	"F,	c #4D3C22",
+	"G,	c #2D1D04",
+	"H,	c #574828",
+	"I,	c #B5A686",
+	"J,	c #918462",
+	"K,	c #291C07",
+	"L,	c #36290B",
+	"M,	c #7B6D4E",
+	"N,	c #4C3E21",
+	"O,	c #403217",
+	"P,	c #7C6E54",
+	"Q,	c #574A31",
+	"R,	c #9A907E",
+	"S,	c #877B65",
+	"T,	c #94856D",
+	"U,	c #A29278",
+	"V,	c #A5957B",
+	"W,	c #A19075",
+	"X,	c #98876C",
+	"Y,	c #897759",
+	"Z,	c #7A6749",
+	"`,	c #493617",
+	" '	c #483918",
+	".'	c #AA9B7A",
+	"+'	c #8F805F",
+	"@'	c #3F300F",
+	"#'	c #322605",
+	"$'	c #685C3B",
+	"%'	c #403516",
+	"&'	c #423717",
+	"*'	c #7F7559",
+	"='	c #9E957E",
+	"-'	c #9F9384",
+	";'	c #8D7C64",
+	">'	c #8E7D62",
+	",'	c #8F7D5F",
+	"''	c #857252",
+	")'	c #7F6A4B",
+	"!'	c #857151",
+	"~'	c #6E5B3B",
+	"{'	c #7A6746",
+	"]'	c #968666",
+	"^'	c #5F502F",
+	"/'	c #392A09",
+	"('	c #695C3C",
+	"_'	c #6E6242",
+	":'	c #584D2D",
+	"<'	c #8C8369",
+	"['	c #A79984",
+	"}'	c #A6977F",
+	"|'	c #A8987D",
+	"1'	c #9E8D72",
+	"2'	c #8E7C5F",
+	"3'	c #827051",
+	"4'	c #867456",
+	"5'	c #837353",
+	"6'	c #79684B",
+	"7'	c #706143",
+	"8'	c #7F7053",
+	"9'	c #87795D",
+	"0'	c #CBBEAA",
+	"a'	c #B1A48D",
+	"b'	c #9E8F76",
+	"c'	c #8F7F66",
+	"d'	c #837258",
+	"e'	c #9C8C72",
+	"f'	c #A4947A",
+	"g'	c #9D8D73",
+	"h'	c #A4957B",
+	"i'	c #A99C84",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                    . +   @ # $ % & * = - ; >                                                                   ",
+	"                                , ' ) ! ~ { ] ^ / ( _ : < [ } | 1                                                               ",
+	"                              2 3 4 5 6 7 8 9 0 a b c d e c f g h i                                                             ",
+	"                          j k l m n o p q r s t u v w x y z A B C D E                                                           ",
+	"                        F G H I J K L M N O P Q R S T U V W X Y Z `  .                                                          ",
+	"                        ..+. at .#.$.%.&.*.=.-.;.>.,.'.).!.a ~.S {.].^./.                                                          ",
+	"                    (._.:.<.[.}.|.1.2.3.4.5.6.7.8.    9.0.a.b.c.d.e.f.g.                                                        ",
+	"                  h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.                                                        ",
+	"                  I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.X.Y.Z.`. +.+++ at +#+$+%+                                                        ",
+	"                  &+*+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+                                                      ",
+	"                7+8+9+0+a+b+c+  d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+                                                      ",
+	"                y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+v+Y+Z+`+                                                    ",
+	"                 @. at +@0.@@#@$@%@&@*@=@-@;@>@, at C '@)@!@~@{@]@^@/@(@_@:@<@[@}@                                                    ",
+	"                |@1 at 2@3 at 4@5 at 6@7 at 8@9 at 0@a at b@c at d@e at f@g at h@i at j@k at l@m at n@o at p@q at r@s@                                                    ",
+	"                t at u@v at w@x at c y at z@A at B@C at D@E at F@G at H@I at J@K at L@M at N@O at P@Q at R@S at T@U at V@W@                                                  ",
+	"                X at Y@Z@`@ #.#+#@###$#%#&#*#=#-#;#>#X.,#'#)#!#~#{#]#^#/#(#_#:#<#                                                  ",
+	"                [#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#b#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#                                              ",
+	"                t#E at u#v#w#x#c y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#                                                ",
+	"                X#Y#Z#`# $.$+$@$#$$$%$&$*$=$-$;$>$,$'$)$!$~${$]$s#^$/$($_$:$<$[$                                                ",
+	"                }$|$1$2$3$4$5$6$7$8$9$0$a$b$c$d$, at e$>@f$g$h$i$j$k$l$m$($n$o$p$q$r$                                              ",
+	"                s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$                                              ",
+	"                  Z$`$ %.%+%@%#%$%%%&%*%=%-%;%>%,%'%)%!%~%{%]%^%/%(%_%:%<%[%}%|%1%'+                                            ",
+	"                  2%3%4%5%6%7%8%9%0%a%b%c%d%e%f%g%h%i%j%d$k%l%m%X.n%o%p%q%r%s%t%u%v%                                            ",
+	"                    w%x%y%z%A%s#B%##C%D%E%S F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%                                            ",
+	"                    Z%`% &.&+&]#@&#&$&%&&&*&=&-&;&>&,&'&)&!&~&{&]&^&/&(&_&{$:&<&[&}&                                            ",
+	"                    |&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&g&h&i&j&k&l&{$m&n&o&p&q&r&s&t&                                            ",
+	"                      u&v&w&x&y&~.z&A&B&C&D&E&F&G&H&k&I&J&K&{$L&M&*@N&O&P&Q&R&S&T&U&V&                                          ",
+	"                      W&b at X&Y&Z&`& *.*+*@*s##*$*%*&*M **=*-*;*'+>*,*'*)*!*~*{*]*^*S#/*                                          ",
+	"                        (*_*:*<*[*}*|*1*2*3*4*5*6*7*8*9*0*a*b*c*d*e*f*c g*h*i*j*k*l*m*                                          ",
+	"                        n*o*p*q*r*s*'+t*u*v*w*x*y*z*A*B*C*D*E*m%F*l&G*H*I*J*K*L*M*N*O*P*                                        ",
+	"                          Q*R*S*T*7.U*V*W*X*Y*Z*`* =S#.=+=@=#=$=%=&=*===g*-=;=>=,='=)=!=                                        ",
+	"                        ~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=6=7=8=P%9=0=a=b=c=d=e=f=g=h=i=j=                                      ",
+	"                          k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C=D=##E=F=G=H=I=J=K=L=M=N=O=                                      ",
+	"                          P=Q=R=S=T=S U=V=W=X=Y=Z=`= -.-+- at -#-P+$-%-&-*-=---;->-,-'-)-!-~-{-                                    ",
+	"                          ]-^-/-(-_-:-<-c [-}-|-1-2-3-4-5-6-7-8-9-0-a-9%b-c-d-e-f-g-h-i-j-k-                                    ",
+	"                          l-m-n-o-p-5$q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-m%L-M-N-O-P-                                    ",
+	"                            Q-R-S-T-U-V-1*W-X-Y-Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';);!;~;{;];                                    ",
+	"                            ^;/;(;_;:;<;[;};|;1;2;3;'+4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;                                    ",
+	"                              m;n;o;p;q;r;s;t;u;v;w;x;y;z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;                                    ",
+	"                              R;S;T;U;V;7.W;X;Y;Z;`;o= >.>+>@>#>$>%>&>m%*>=>,#->;>>>,>'>)>                                      ",
+	"                              !>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4>5>6>7>8>9>0>a>b>c>d>e>f>g>                                      ",
+	"                              h>i>j>k>l>m>n>o>v;p>q>r>s>t>u>v>w>x>y>z>A>B>C>D>E>F>G>H>I>                                        ",
+	"                                J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,*,=,                                        ",
+	"                                -,;,>,,,',),!,~,{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,                                            ",
+	"                                  8,9,0,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,                                              ",
+	"                                  v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,                                                  ",
+	"                                    R,S,T,U,V,W,X,Y,Z,`, '.'+'@'#'$'%'&'*'='                                                    ",
+	"                                      -'4.;'>',''')'!'~'{']'^'/'('_':'<'                                                        ",
+	"                                          ['}'|'1'2'3'4'5'6'7'8'9'                                                              ",
+	"                                            0'a'b'c'd'e'f'g'h'i'                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                ",
+	"                                                                                                                                "
+};
diff --git a/src/net_ui.cxx b/src/net_ui.cxx
new file mode 100644
index 0000000..e876e6d
--- /dev/null
+++ b/src/net_ui.cxx
@@ -0,0 +1,566 @@
+// generated by Fast Light User Interface Designer (fluid) version 1.0302
+
+#include "net_ui.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <FL/fl_show_colormap.H>
+#include "netsupport.h"
+#include "netshared.h"
+#include "config.h"
+#include "net_config.h"
+
+Fl_Menu_Bar *mnu_bar=(Fl_Menu_Bar *)0;
+
+static void cb_mnuLogIns(Fl_Menu_*, void*) {
+  open_log_ins();
+}
+
+static void cb_mnuSize(Fl_Menu_*, void*) {
+  change_size();
+}
+
+Fl_Menu_Item menu_mnu_bar[] = {
+ {"&Files", 0,  0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0},
+ {"&Open", 0,  (Fl_Callback*)cb_mnuOpen, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
+ {"&Exit", 0,  (Fl_Callback*)cb_mnuExit, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
+ {0,0,0,0,0,0,0,0,0},
+ {"&Editor", 0,  (Fl_Callback*)cb_mnuEditor, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
+ {"Config", 0,  (Fl_Callback*)cb_mnuConfig, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
+ {"Log-Ins", 0,  (Fl_Callback*)cb_mnuLogIns, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
+ {"Size", 0,  (Fl_Callback*)cb_mnuSize, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
+ {"&Help", 0,  0, 0, 64, FL_NORMAL_LABEL, 0, 14, 0},
+ {"Content", 0,  (Fl_Callback*)cb_mnuHelpContent, 0, 128, FL_NORMAL_LABEL, 0, 14, 0},
+ {"About", 0,  (Fl_Callback*)cb_mnuAbout, 0, 0, FL_NORMAL_LABEL, 0, 14, 0},
+ {0,0,0,0,0,0,0,0,0},
+ {0,0,0,0,0,0,0,0,0}
+};
+
+my_UI *myUI=(my_UI *)0;
+
+Fl_Box *txtNcallins=(Fl_Box *)0;
+
+Fl_Group *net_grp1=(Fl_Group *)0;
+
+Fl_Box *ptr_left=(Fl_Box *)0;
+
+Fl_Box *ptr_right=(Fl_Box *)0;
+
+Fl_Group *net_grp2=(Fl_Group *)0;
+
+Fl_Box *txtTitles=(Fl_Box *)0;
+
+Fl_Box *txtLine[15]={(Fl_Box *)0};
+
+Fl_Group *dbSelectGroup=(Fl_Group *)0;
+
+Fl_Box *inpLoginSuffix=(Fl_Box *)0;
+
+Fl_Box *inpLoginPrefix=(Fl_Box *)0;
+
+Fl_Box *inpLoginArea=(Fl_Box *)0;
+
+Fl_Group *net_grp3=(Fl_Group *)0;
+
+Fl_Box *txtPick[10]={(Fl_Box *)0};
+
+Fl_Box *txtPickArrows=(Fl_Box *)0;
+
+Fl_Box *bx_suffix=(Fl_Box *)0;
+
+Fl_Box *bx_prefix=(Fl_Box *)0;
+
+Fl_Box *bx_area=(Fl_Box *)0;
+
+Fl_Box *txtInfo=(Fl_Box *)0;
+
+Fl_Double_Window* newNetControl() {
+  Fl_Double_Window* w;
+  { Fl_Double_Window* o = new Fl_Double_Window(390, 455, "flnet");
+    w = o;
+    o->box(FL_BORDER_BOX);
+    { mnu_bar = new Fl_Menu_Bar(0, 0, 390, 25);
+      mnu_bar->menu(menu_mnu_bar);
+    } // Fl_Menu_Bar* mnu_bar
+    { myUI = new my_UI(0, 25, 390, 430);
+      myUI->box(FL_NO_BOX);
+      myUI->color(FL_BACKGROUND_COLOR);
+      myUI->selection_color(FL_BACKGROUND_COLOR);
+      myUI->labeltype(FL_NORMAL_LABEL);
+      myUI->labelfont(0);
+      myUI->labelsize(14);
+      myUI->labelcolor(FL_FOREGROUND_COLOR);
+      myUI->align(Fl_Align(FL_ALIGN_TOP));
+      myUI->when(FL_WHEN_RELEASE);
+      { txtNcallins = new Fl_Box(125, 25, 75, 20, "0 callins");
+        txtNcallins->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+      } // Fl_Box* txtNcallins
+      { net_grp1 = new Fl_Group(0, 45, 225, 255, "      Call In List");
+        net_grp1->tooltip("Use UP/DN arrow keys to scroll list");
+        net_grp1->labelfont(1);
+        net_grp1->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+        { ptr_left = new Fl_Box(5, 125, 15, 25, "@>");
+        } // Fl_Box* ptr_left
+        { ptr_right = new Fl_Box(210, 125, 15, 25, "@<");
+        } // Fl_Box* ptr_right
+        { net_grp2 = new Fl_Group(17, 45, 196, 255);
+          net_grp2->box(FL_DOWN_BOX);
+          net_grp2->color(FL_BACKGROUND2_COLOR);
+          { txtTitles = new Fl_Box(20, 47, 190, 22, "Call    Name    Time  F");
+            txtTitles->box(FL_FLAT_BOX);
+            txtTitles->color((Fl_Color)23);
+            txtTitles->labelfont(4);
+            txtTitles->labelsize(13);
+            txtTitles->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtTitles
+          { txtLine[0] = new Fl_Box(20, 70, 190, 15);
+            txtLine[0]->box(FL_FLAT_BOX);
+            txtLine[0]->color(FL_BACKGROUND2_COLOR);
+            txtLine[0]->labelfont(4);
+            txtLine[0]->labelsize(13);
+            txtLine[0]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[0]
+          { txtLine[1] = new Fl_Box(20, 85, 190, 15);
+            txtLine[1]->box(FL_FLAT_BOX);
+            txtLine[1]->color(FL_BACKGROUND2_COLOR);
+            txtLine[1]->labelfont(4);
+            txtLine[1]->labelsize(13);
+            txtLine[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[1]
+          { txtLine[2] = new Fl_Box(20, 100, 190, 15);
+            txtLine[2]->box(FL_FLAT_BOX);
+            txtLine[2]->color(FL_BACKGROUND2_COLOR);
+            txtLine[2]->labelfont(4);
+            txtLine[2]->labelsize(13);
+            txtLine[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[2]
+          { txtLine[3] = new Fl_Box(20, 115, 190, 15);
+            txtLine[3]->box(FL_FLAT_BOX);
+            txtLine[3]->color(FL_BACKGROUND2_COLOR);
+            txtLine[3]->labelfont(4);
+            txtLine[3]->labelsize(13);
+            txtLine[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[3]
+          { txtLine[4] = new Fl_Box(20, 130, 190, 15);
+            txtLine[4]->box(FL_FLAT_BOX);
+            txtLine[4]->color(FL_BACKGROUND2_COLOR);
+            txtLine[4]->labelfont(4);
+            txtLine[4]->labelsize(13);
+            txtLine[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[4]
+          { txtLine[5] = new Fl_Box(20, 145, 190, 15);
+            txtLine[5]->box(FL_FLAT_BOX);
+            txtLine[5]->color(FL_BACKGROUND2_COLOR);
+            txtLine[5]->labelfont(4);
+            txtLine[5]->labelsize(13);
+            txtLine[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[5]
+          { txtLine[6] = new Fl_Box(20, 160, 190, 15);
+            txtLine[6]->box(FL_FLAT_BOX);
+            txtLine[6]->color(FL_BACKGROUND2_COLOR);
+            txtLine[6]->labelfont(4);
+            txtLine[6]->labelsize(13);
+            txtLine[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[6]
+          { txtLine[7] = new Fl_Box(20, 175, 190, 15);
+            txtLine[7]->box(FL_FLAT_BOX);
+            txtLine[7]->color(FL_BACKGROUND2_COLOR);
+            txtLine[7]->labelfont(4);
+            txtLine[7]->labelsize(13);
+            txtLine[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[7]
+          { txtLine[8] = new Fl_Box(20, 190, 190, 15);
+            txtLine[8]->box(FL_FLAT_BOX);
+            txtLine[8]->color(FL_BACKGROUND2_COLOR);
+            txtLine[8]->labelfont(4);
+            txtLine[8]->labelsize(13);
+            txtLine[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[8]
+          { txtLine[9] = new Fl_Box(20, 205, 190, 15);
+            txtLine[9]->box(FL_FLAT_BOX);
+            txtLine[9]->color(FL_BACKGROUND2_COLOR);
+            txtLine[9]->labelfont(4);
+            txtLine[9]->labelsize(13);
+            txtLine[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[9]
+          { txtLine[10] = new Fl_Box(20, 220, 190, 15);
+            txtLine[10]->box(FL_FLAT_BOX);
+            txtLine[10]->color(FL_BACKGROUND2_COLOR);
+            txtLine[10]->labelfont(4);
+            txtLine[10]->labelsize(13);
+            txtLine[10]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[10]
+          { txtLine[11] = new Fl_Box(20, 235, 190, 15);
+            txtLine[11]->box(FL_FLAT_BOX);
+            txtLine[11]->color(FL_BACKGROUND2_COLOR);
+            txtLine[11]->labelfont(4);
+            txtLine[11]->labelsize(13);
+            txtLine[11]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[11]
+          { txtLine[12] = new Fl_Box(20, 250, 190, 15);
+            txtLine[12]->box(FL_FLAT_BOX);
+            txtLine[12]->color(FL_BACKGROUND2_COLOR);
+            txtLine[12]->labelfont(4);
+            txtLine[12]->labelsize(13);
+            txtLine[12]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[12]
+          { txtLine[13] = new Fl_Box(20, 265, 190, 15);
+            txtLine[13]->box(FL_FLAT_BOX);
+            txtLine[13]->color(FL_BACKGROUND2_COLOR);
+            txtLine[13]->labelfont(4);
+            txtLine[13]->labelsize(13);
+            txtLine[13]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[13]
+          { txtLine[14] = new Fl_Box(20, 280, 190, 15);
+            txtLine[14]->box(FL_FLAT_BOX);
+            txtLine[14]->color(FL_BACKGROUND2_COLOR);
+            txtLine[14]->labelfont(4);
+            txtLine[14]->labelsize(13);
+            txtLine[14]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtLine[14]
+          net_grp2->end();
+        } // Fl_Group* net_grp2
+        net_grp1->end();
+      } // Fl_Group* net_grp1
+      { dbSelectGroup = new Fl_Group(230, 45, 155, 250);
+        dbSelectGroup->box(FL_ENGRAVED_FRAME);
+        dbSelectGroup->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+        { inpLoginSuffix = new Fl_Box(240, 75, 40, 25);
+          inpLoginSuffix->tooltip("Enter SUFFIX, Esc to abort");
+          inpLoginSuffix->box(FL_DOWN_BOX);
+          inpLoginSuffix->color(FL_BACKGROUND2_COLOR);
+          inpLoginSuffix->labelfont(13);
+          inpLoginSuffix->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+        } // Fl_Box* inpLoginSuffix
+        { inpLoginPrefix = new Fl_Box(285, 75, 30, 25);
+          inpLoginPrefix->tooltip("Enter PREFIX Esc to abort");
+          inpLoginPrefix->box(FL_DOWN_BOX);
+          inpLoginPrefix->color(FL_BACKGROUND2_COLOR);
+          inpLoginPrefix->labelfont(13);
+          inpLoginPrefix->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+        } // Fl_Box* inpLoginPrefix
+        { inpLoginArea = new Fl_Box(320, 75, 40, 25);
+          inpLoginArea->tooltip("Enter AREA Esc to abort");
+          inpLoginArea->box(FL_DOWN_BOX);
+          inpLoginArea->color(FL_BACKGROUND2_COLOR);
+          inpLoginArea->labelfont(13);
+          inpLoginArea->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+        } // Fl_Box* inpLoginArea
+        { net_grp3 = new Fl_Group(240, 115, 75, 160);
+          net_grp3->tooltip("Use UP/DN arrow keys to select callsign");
+          net_grp3->box(FL_DOWN_BOX);
+          net_grp3->color(FL_BACKGROUND2_COLOR);
+          { txtPick[0] = new Fl_Box(240, 115, 75, 16);
+            txtPick[0]->color(FL_BACKGROUND2_COLOR);
+            txtPick[0]->labelfont(13);
+            txtPick[0]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[0]
+          { txtPick[1] = new Fl_Box(240, 131, 75, 16);
+            txtPick[1]->color(FL_BACKGROUND2_COLOR);
+            txtPick[1]->labelfont(13);
+            txtPick[1]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[1]
+          { txtPick[2] = new Fl_Box(240, 147, 75, 16);
+            txtPick[2]->color(FL_BACKGROUND2_COLOR);
+            txtPick[2]->labelfont(13);
+            txtPick[2]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[2]
+          { txtPick[3] = new Fl_Box(240, 163, 75, 16);
+            txtPick[3]->color(FL_BACKGROUND2_COLOR);
+            txtPick[3]->labelfont(13);
+            txtPick[3]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[3]
+          { txtPick[4] = new Fl_Box(240, 179, 75, 16);
+            txtPick[4]->color(FL_BACKGROUND2_COLOR);
+            txtPick[4]->labelfont(13);
+            txtPick[4]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[4]
+          { txtPick[5] = new Fl_Box(240, 195, 75, 16);
+            txtPick[5]->color(FL_BACKGROUND2_COLOR);
+            txtPick[5]->labelfont(13);
+            txtPick[5]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[5]
+          { txtPick[6] = new Fl_Box(240, 211, 75, 16);
+            txtPick[6]->color(FL_BACKGROUND2_COLOR);
+            txtPick[6]->labelfont(13);
+            txtPick[6]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[6]
+          { txtPick[7] = new Fl_Box(240, 227, 75, 16);
+            txtPick[7]->color(FL_BACKGROUND2_COLOR);
+            txtPick[7]->labelfont(13);
+            txtPick[7]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[7]
+          { txtPick[8] = new Fl_Box(240, 243, 75, 16);
+            txtPick[8]->color(FL_BACKGROUND2_COLOR);
+            txtPick[8]->labelfont(13);
+            txtPick[8]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[8]
+          { txtPick[9] = new Fl_Box(240, 259, 75, 16);
+            txtPick[9]->color(FL_BACKGROUND2_COLOR);
+            txtPick[9]->labelfont(13);
+            txtPick[9]->align(Fl_Align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE));
+          } // Fl_Box* txtPick[9]
+          net_grp3->end();
+        } // Fl_Group* net_grp3
+        { txtPickArrows = new Fl_Box(320, 135, 25, 120);
+          txtPickArrows->hide();
+        } // Fl_Box* txtPickArrows
+        { bx_suffix = new Fl_Box(235, 45, 40, 30, "Suffix");
+        } // Fl_Box* bx_suffix
+        { bx_prefix = new Fl_Box(280, 45, 40, 30, "Prefix");
+        } // Fl_Box* bx_prefix
+        { bx_area = new Fl_Box(320, 45, 40, 30, "Area");
+        } // Fl_Box* bx_area
+        dbSelectGroup->end();
+      } // Fl_Group* dbSelectGroup
+      myUI->end();
+    } // my_UI* myUI
+    { txtInfo = new Fl_Box(5, 301, 379, 150);
+      txtInfo->box(FL_DOWN_BOX);
+      txtInfo->color((Fl_Color)20);
+      txtInfo->selection_color(FL_BACKGROUND2_COLOR);
+      txtInfo->labelfont(5);
+      txtInfo->align(Fl_Align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE));
+    } // Fl_Box* txtInfo
+    o->end();
+  } // Fl_Double_Window* o
+  return w;
+}
+
+Fl_Tabs *tabsConfig=(Fl_Tabs *)0;
+
+Fl_Check_Button *btn_new_login_is_up=(Fl_Check_Button *)0;
+
+static void cb_btn_new_login_is_up(Fl_Check_Button* o, void*) {
+  disp_new_login=o->value();
+}
+
+Fl_Check_Button *btnOpenEditor=(Fl_Check_Button *)0;
+
+static void cb_btnOpenEditor(Fl_Check_Button* o, void*) {
+  open_editor = o->value();
+}
+
+Fl_Check_Button *btn_current_call_in_is_up=(Fl_Check_Button *)0;
+
+static void cb_btn_current_call_in_is_up(Fl_Check_Button* o, void*) {
+  callin_is_up = o->value();
+}
+
+Fl_Group *tabGroupColors=(Fl_Group *)0;
+
+static void cb_btnFg(Fl_Button*, void*) {
+  fgColors[1] = fl_show_colormap(fgColors[1]);
+txtSample[1]->textcolor(fgColors[1]);
+txtSample[1]->redraw();
+}
+
+static void cb_btnBg(Fl_Button*, void*) {
+  bgColors[1] = fl_show_colormap(bgColors[1]);
+txtSample[1]->color(bgColors[1]);
+txtSample[1]->redraw();
+}
+
+static void cb_btnFg1(Fl_Button*, void*) {
+  fgColors[2] = fl_show_colormap(fgColors[2]);
+txtSample[2]->textcolor(fgColors[2]);
+txtSample[2]->redraw();
+}
+
+static void cb_btnBg1(Fl_Button*, void*) {
+  bgColors[2] = fl_show_colormap(bgColors[2]);
+txtSample[2]->color(bgColors[2]);
+txtSample[2]->redraw();
+}
+
+static void cb_btnFg2(Fl_Button*, void*) {
+  fgColors[3] = fl_show_colormap(fgColors[3]);
+txtSample[3]->textcolor(fgColors[3]);
+txtSample[3]->redraw();
+}
+
+static void cb_btnBg2(Fl_Button*, void*) {
+  bgColors[3] = fl_show_colormap(bgColors[3]);
+txtSample[3]->color(bgColors[3]);
+txtSample[3]->redraw();
+}
+
+Fl_Output *txtSample[5]={(Fl_Output *)0};
+
+Fl_Button *btnFg[5]={(Fl_Button *)0};
+
+static void cb_btnFg3(Fl_Button*, void*) {
+  fgColors[4] = fl_show_colormap(fgColors[4]);
+txtSample[4]->textcolor(fgColors[4]);
+txtSample[4]->redraw();
+}
+
+Fl_Button *btnBg[5]={(Fl_Button *)0};
+
+static void cb_btnBg3(Fl_Button*, void*) {
+  bgColors[4] = fl_show_colormap(bgColors[4]);
+txtSample[4]->color(bgColors[4]);
+txtSample[4]->redraw();
+}
+
+Fl_Group *tabGroupPriority=(Fl_Group *)0;
+
+Fl_Input *cfgP1=(Fl_Input *)0;
+
+Fl_Input *inpStatesList1=(Fl_Input *)0;
+
+Fl_Input *cfgP2=(Fl_Input *)0;
+
+Fl_Input *inpStatesList2=(Fl_Input *)0;
+
+Fl_Input *cfgP3=(Fl_Input *)0;
+
+Fl_Input *inpStatesList3=(Fl_Input *)0;
+
+Fl_Check_Button *chkAutoPriority=(Fl_Check_Button *)0;
+
+Fl_Return_Button *btnConfigOK=(Fl_Return_Button *)0;
+
+Fl_Double_Window* configDialog() {
+  Fl_Double_Window* w;
+  { Fl_Double_Window* o = new Fl_Double_Window(440, 275, "Net Configuration");
+    w = o;
+    { tabsConfig = new Fl_Tabs(5, 10, 430, 210);
+      tabsConfig->color((Fl_Color)44);
+      { Fl_Group* o = new Fl_Group(5, 35, 430, 185, "UI behavior");
+        { Fl_Check_Button* o = btn_new_login_is_up = new Fl_Check_Button(30, 60, 70, 15, "New login is up");
+          btn_new_login_is_up->tooltip("Move new login to the >...<\nspot in the calll in list");
+          btn_new_login_is_up->down_box(FL_DOWN_BOX);
+          btn_new_login_is_up->callback((Fl_Callback*)cb_btn_new_login_is_up);
+          o->value(disp_new_login);
+        } // Fl_Check_Button* btn_new_login_is_up
+        { Fl_Check_Button* o = btnOpenEditor = new Fl_Check_Button(60, 102, 70, 15, "Open editor for new login");
+          btnOpenEditor->tooltip("Open editor for new call in\nNew login is up must be enabled");
+          btnOpenEditor->down_box(FL_DOWN_BOX);
+          btnOpenEditor->callback((Fl_Callback*)cb_btnOpenEditor);
+          o->value(open_editor);
+        } // Fl_Check_Button* btnOpenEditor
+        { Fl_Check_Button* o = btn_current_call_in_is_up = new Fl_Check_Button(30, 145, 70, 15, "Current call in is up");
+          btn_current_call_in_is_up->tooltip("Move last login to the >...<\nspot in the calll in list");
+          btn_current_call_in_is_up->down_box(FL_DOWN_BOX);
+          btn_current_call_in_is_up->callback((Fl_Callback*)cb_btn_current_call_in_is_up);
+          o->value(callin_is_up);
+        } // Fl_Check_Button* btn_current_call_in_is_up
+        o->end();
+      } // Fl_Group* o
+      { tabGroupColors = new Fl_Group(5, 45, 430, 160, "Colors");
+        tabGroupColors->hide();
+        { Fl_Output* o = txtSample[1] = new Fl_Output(135, 60, 45, 25, "Logged In");
+          txtSample[1]->textfont(13);
+          o->value("Text");
+          o->color(bgColors[1]);
+          o->textcolor(fgColors[1]);
+        } // Fl_Output* txtSample[1]
+        { btnFg[1] = new Fl_Button(195, 60, 45, 25, "Fg");
+          btnFg[1]->callback((Fl_Callback*)cb_btnFg);
+        } // Fl_Button* btnFg[1]
+        { btnBg[2] = new Fl_Button(260, 60, 45, 25, "Bg");
+          btnBg[2]->callback((Fl_Callback*)cb_btnBg);
+        } // Fl_Button* btnBg[2]
+        { Fl_Output* o = txtSample[2] = new Fl_Output(135, 95, 45, 25, "First Response");
+          txtSample[2]->textfont(13);
+          o->value("Text");
+          o->color(bgColors[2]);
+          o->textcolor(fgColors[2]);
+        } // Fl_Output* txtSample[2]
+        { btnFg[2] = new Fl_Button(195, 95, 45, 25, "Fg");
+          btnFg[2]->callback((Fl_Callback*)cb_btnFg1);
+        } // Fl_Button* btnFg[2]
+        { btnBg[2] = new Fl_Button(260, 95, 45, 25, "Bg");
+          btnBg[2]->callback((Fl_Callback*)cb_btnBg1);
+        } // Fl_Button* btnBg[2]
+        { Fl_Output* o = txtSample[3] = new Fl_Output(135, 130, 45, 25, "Second Response");
+          txtSample[3]->textfont(13);
+          o->value("Text");
+          o->color(bgColors[3]);
+          o->textcolor(fgColors[3]);
+        } // Fl_Output* txtSample[3]
+        { btnFg[3] = new Fl_Button(195, 130, 45, 25, "Fg");
+          btnFg[3]->callback((Fl_Callback*)cb_btnFg2);
+        } // Fl_Button* btnFg[3]
+        { btnBg[3] = new Fl_Button(260, 130, 45, 25, "Bg");
+          btnBg[3]->callback((Fl_Callback*)cb_btnBg2);
+        } // Fl_Button* btnBg[3]
+        { Fl_Output* o = txtSample[4] = new Fl_Output(135, 165, 45, 25, "Logged Out");
+          txtSample[4]->textfont(13);
+          o->value("Text");
+          o->color(bgColors[4]);
+          o->textcolor(fgColors[4]);
+        } // Fl_Output* txtSample[4]
+        { btnFg[4] = new Fl_Button(195, 165, 45, 25, "Fg");
+          btnFg[4]->callback((Fl_Callback*)cb_btnFg3);
+        } // Fl_Button* btnFg[4]
+        { btnBg[4] = new Fl_Button(260, 165, 45, 25, "Bg");
+          btnBg[4]->callback((Fl_Callback*)cb_btnBg3);
+        } // Fl_Button* btnBg[4]
+        tabGroupColors->end();
+      } // Fl_Group* tabGroupColors
+      { tabGroupPriority = new Fl_Group(5, 35, 430, 185, "Priority");
+        tabGroupPriority->hide();
+        { cfgP1 = new Fl_Input(160, 70, 20, 25, "Priority 1 character");
+        } // Fl_Input* cfgP1
+        { inpStatesList1 = new Fl_Input(200, 70, 225, 25, "States List (ie: FL, AL, GA)");
+          inpStatesList1->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+        } // Fl_Input* inpStatesList1
+        { cfgP2 = new Fl_Input(160, 100, 20, 25, "Priority 2 character");
+        } // Fl_Input* cfgP2
+        { inpStatesList2 = new Fl_Input(200, 100, 225, 25);
+          inpStatesList2->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+        } // Fl_Input* inpStatesList2
+        { cfgP3 = new Fl_Input(160, 130, 20, 25, "Priority 3 character");
+        } // Fl_Input* cfgP3
+        { inpStatesList3 = new Fl_Input(200, 130, 225, 25);
+          inpStatesList3->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+        } // Fl_Input* inpStatesList3
+        { chkAutoPriority = new Fl_Check_Button(160, 165, 25, 25, "Auto By Priority");
+          chkAutoPriority->down_box(FL_DOWN_BOX);
+          chkAutoPriority->align(Fl_Align(FL_ALIGN_LEFT));
+        } // Fl_Check_Button* chkAutoPriority
+        tabGroupPriority->end();
+      } // Fl_Group* tabGroupPriority
+      tabsConfig->end();
+    } // Fl_Tabs* tabsConfig
+    { btnConfigOK = new Fl_Return_Button(355, 235, 75, 25, "OK");
+      btnConfigOK->callback((Fl_Callback*)cb_btnCloseConfig);
+    } // Fl_Return_Button* btnConfigOK
+    o->end();
+  } // Fl_Double_Window* o
+  return w;
+}
+
+Fl_Browser *log_in_view=(Fl_Browser *)0;
+
+Fl_Button *btn_copy_to_clipboard=(Fl_Button *)0;
+
+static void cb_btn_copy_to_clipboard(Fl_Button*, void*) {
+  copy_to_clipboard();
+}
+
+Fl_Button *btn_close_log_ins=(Fl_Button *)0;
+
+static void cb_btn_close_log_ins(Fl_Button* o, void*) {
+  o->parent()->hide();
+}
+
+Fl_Double_Window* Log_ins_dialog() {
+  Fl_Double_Window* w;
+  { Fl_Double_Window* o = new Fl_Double_Window(240, 235, "Current Log Ins");
+    w = o;
+    { log_in_view = new Fl_Browser(0, 0, 240, 205);
+      log_in_view->align(Fl_Align(FL_ALIGN_TOP));
+    } // Fl_Browser* log_in_view
+    { btn_copy_to_clipboard = new Fl_Button(30, 210, 70, 20, "Copy");
+      btn_copy_to_clipboard->callback((Fl_Callback*)cb_btn_copy_to_clipboard);
+    } // Fl_Button* btn_copy_to_clipboard
+    { btn_close_log_ins = new Fl_Button(140, 210, 70, 20, "Close");
+      btn_close_log_ins->callback((Fl_Callback*)cb_btn_close_log_ins);
+    } // Fl_Button* btn_close_log_ins
+    o->end();
+  } // Fl_Double_Window* o
+  return w;
+}
diff --git a/src/net_ui.fl b/src/net_ui.fl
new file mode 100644
index 0000000..53b155a
--- /dev/null
+++ b/src/net_ui.fl
@@ -0,0 +1,415 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0302 
+header_name {.h} 
+code_name {.cpp}
+decl {\#include <stdlib.h>} {private local
+} 
+
+decl {\#include <stdio.h>} {private local
+} 
+
+decl {\#include <string.h>} {private local
+} 
+
+decl {\#include <FL/fl_show_colormap.H>} {private local
+} 
+
+decl {\#include "netsupport.h"} {private local
+} 
+
+decl {\#include "netshared.h"} {private local
+} 
+
+decl {\#include "config.h"} {private local
+} 
+
+decl {\#include "net_config.h"} {private local
+} 
+
+Function {newNetControl()} {open
+} {
+  Fl_Window {} {
+    label flnet open
+    xywh {541 215 390 455} type Double box BORDER_BOX
+    code0 {\#include "my_UI.h"} visible
+  } {
+    Fl_Menu_Bar mnu_bar {open
+      xywh {0 0 390 25}
+    } {
+      Submenu {} {
+        label {&Files} open
+        xywh {0 0 100 20}
+      } {
+        MenuItem mnuOpen {
+          label {&Open}
+          callback cb_mnuOpen
+          xywh {0 0 100 20} divider
+        }
+        MenuItem mnuExit {
+          label {&Exit}
+          callback cb_mnuExit
+          xywh {0 0 100 20}
+        }
+      }
+      MenuItem mnuEditor {
+        label {&Editor}
+        callback cb_mnuEditor selected
+        xywh {0 0 100 20}
+      }
+      MenuItem mnuConfig {
+        label Config
+        callback cb_mnuConfig
+        xywh {0 0 100 20}
+      }
+      MenuItem mnuLogIns {
+        label {Log-Ins}
+        callback {open_log_ins();}
+        xywh {0 0 36 21}
+      }
+      MenuItem mnuSize {
+        label Size
+        callback {change_size();}
+        xywh {0 0 36 21}
+      }
+      Submenu {} {
+        label {&Help} open
+        xywh {0 0 100 20}
+      } {
+        MenuItem mnu_Content {
+          label Content
+          callback cb_mnuHelpContent
+          xywh {0 0 100 20} divider
+        }
+        MenuItem mnu_About {
+          label About
+          callback cb_mnuAbout
+          xywh {0 0 100 20}
+        }
+      }
+    }
+    Fl_Group myUI {open
+      xywh {0 25 390 430}
+      class my_UI
+    } {
+      Fl_Box txtNcallins {
+        label {0 callins}
+        xywh {125 25 75 20} align 20
+      }
+      Fl_Group net_grp1 {
+        label {      Call In List} open
+        tooltip {Use UP/DN arrow keys to scroll list} xywh {0 45 225 255} labelfont 1 align 5
+      } {
+        Fl_Box ptr_left {
+          label {@>}
+          xywh {5 125 15 25}
+        }
+        Fl_Box ptr_right {
+          label {@<}
+          xywh {210 125 15 25}
+        }
+        Fl_Group net_grp2 {open
+          xywh {17 45 196 255} box DOWN_BOX color 7
+        } {
+          Fl_Box txtTitles {
+            label {Call    Name    Time  F}
+            xywh {20 47 190 22} box FLAT_BOX color 23 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[0]} {
+            xywh {20 70 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[1]} {
+            xywh {20 85 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[2]} {
+            xywh {20 100 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[3]} {
+            xywh {20 115 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[4]} {
+            xywh {20 130 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[5]} {
+            xywh {20 145 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[6]} {
+            xywh {20 160 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[7]} {
+            xywh {20 175 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[8]} {
+            xywh {20 190 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[9]} {
+            xywh {20 205 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[10]} {
+            xywh {20 220 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[11]} {
+            xywh {20 235 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[12]} {
+            xywh {20 250 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[13]} {
+            xywh {20 265 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+          Fl_Box {txtLine[14]} {
+            xywh {20 280 190 15} box FLAT_BOX color 7 labelfont 4 labelsize 13 align 20
+          }
+        }
+      }
+      Fl_Group dbSelectGroup {open
+        xywh {230 45 155 250} box ENGRAVED_FRAME align 5
+      } {
+        Fl_Box inpLoginSuffix {
+          tooltip {Enter SUFFIX, Esc to abort} xywh {240 75 40 25} box DOWN_BOX color 7 labelfont 13 align 20
+        }
+        Fl_Box inpLoginPrefix {
+          tooltip {Enter PREFIX Esc to abort} xywh {285 75 30 25} box DOWN_BOX color 7 labelfont 13 align 20
+        }
+        Fl_Box inpLoginArea {
+          tooltip {Enter AREA Esc to abort} xywh {320 75 40 25} box DOWN_BOX color 7 labelfont 13 align 20
+        }
+        Fl_Group net_grp3 {open
+          tooltip {Use UP/DN arrow keys to select callsign} xywh {240 115 75 160} box DOWN_BOX color 7
+        } {
+          Fl_Box {txtPick[0]} {
+            xywh {240 115 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[1]} {
+            xywh {240 131 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[2]} {
+            xywh {240 147 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[3]} {
+            xywh {240 163 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[4]} {
+            xywh {240 179 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[5]} {
+            xywh {240 195 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[6]} {
+            xywh {240 211 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[7]} {
+            xywh {240 227 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[8]} {
+            xywh {240 243 75 16} color 7 labelfont 13 align 20
+          }
+          Fl_Box {txtPick[9]} {
+            xywh {240 259 75 16} color 7 labelfont 13 align 20
+          }
+        }
+        Fl_Box txtPickArrows {
+          xywh {320 135 25 120} hide
+        }
+        Fl_Box bx_suffix {
+          label Suffix
+          xywh {235 45 40 30}
+        }
+        Fl_Box bx_prefix {
+          label Prefix
+          xywh {280 45 40 30}
+        }
+        Fl_Box bx_area {
+          label Area
+          xywh {320 45 40 30}
+        }
+      }
+    }
+    Fl_Box txtInfo {
+      xywh {5 301 379 150} box DOWN_BOX color 20 selection_color 7 labelfont 5 align 21
+    }
+  }
+} 
+
+Function {configDialog()} {} {
+  Fl_Window {} {
+    label {Net Configuration} open
+    xywh {1093 33 440 275} type Double hide
+  } {
+    Fl_Tabs tabsConfig {open
+      xywh {5 10 430 210} color 44
+    } {
+      Fl_Group {} {
+        label {UI behavior} open
+        xywh {5 35 430 185}
+      } {
+        Fl_Check_Button btn_new_login_is_up {
+          label {New login is up}
+          callback {disp_new_login=o->value();}
+          tooltip {Move new login to the >...<
+spot in the calll in list} xywh {30 60 70 15} down_box DOWN_BOX
+          code0 {o->value(disp_new_login);}
+        }
+        Fl_Check_Button btnOpenEditor {
+          label {Open editor for new login}
+          callback {open_editor = o->value();}
+          tooltip {Open editor for new call in
+New login is up must be enabled} xywh {60 102 70 15} down_box DOWN_BOX
+          code0 {o->value(open_editor);}
+        }
+        Fl_Check_Button btn_current_call_in_is_up {
+          label {Current call in is up}
+          callback {callin_is_up = o->value();}
+          tooltip {Move last login to the >...<
+spot in the calll in list} xywh {30 145 70 15} down_box DOWN_BOX
+          code0 {o->value(callin_is_up);}
+        }
+      }
+      Fl_Group tabGroupColors {
+        label Colors open
+        xywh {5 45 430 160} hide
+      } {
+        Fl_Output {txtSample[1]} {
+          label {Logged In}
+          xywh {135 60 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[1]);}
+          code2 {o->textcolor(fgColors[1]);}
+        }
+        Fl_Button {btnFg[1]} {
+          label Fg
+          callback {fgColors[1] = fl_show_colormap(fgColors[1]);
+txtSample[1]->textcolor(fgColors[1]);
+txtSample[1]->redraw();}
+          xywh {195 60 45 25}
+        }
+        Fl_Button {btnBg[2]} {
+          label Bg
+          callback {bgColors[1] = fl_show_colormap(bgColors[1]);
+txtSample[1]->color(bgColors[1]);
+txtSample[1]->redraw();}
+          xywh {260 60 45 25}
+        }
+        Fl_Output {txtSample[2]} {
+          label {First Response}
+          xywh {135 95 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[2]);}
+          code2 {o->textcolor(fgColors[2]);}
+        }
+        Fl_Button {btnFg[2]} {
+          label Fg
+          callback {fgColors[2] = fl_show_colormap(fgColors[2]);
+txtSample[2]->textcolor(fgColors[2]);
+txtSample[2]->redraw();}
+          xywh {195 95 45 25}
+        }
+        Fl_Button {btnBg[2]} {
+          label Bg
+          callback {bgColors[2] = fl_show_colormap(bgColors[2]);
+txtSample[2]->color(bgColors[2]);
+txtSample[2]->redraw();}
+          xywh {260 95 45 25}
+        }
+        Fl_Output {txtSample[3]} {
+          label {Second Response}
+          xywh {135 130 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[3]);}
+          code2 {o->textcolor(fgColors[3]);}
+        }
+        Fl_Button {btnFg[3]} {
+          label Fg
+          callback {fgColors[3] = fl_show_colormap(fgColors[3]);
+txtSample[3]->textcolor(fgColors[3]);
+txtSample[3]->redraw();}
+          xywh {195 130 45 25}
+        }
+        Fl_Button {btnBg[3]} {
+          label Bg
+          callback {bgColors[3] = fl_show_colormap(bgColors[3]);
+txtSample[3]->color(bgColors[3]);
+txtSample[3]->redraw();}
+          xywh {260 130 45 25}
+        }
+        Fl_Output {txtSample[4]} {
+          label {Logged Out}
+          xywh {135 165 45 25} textfont 13
+          code0 {o->value("Text");}
+          code1 {o->color(bgColors[4]);}
+          code2 {o->textcolor(fgColors[4]);}
+        }
+        Fl_Button {btnFg[4]} {
+          label Fg
+          callback {fgColors[4] = fl_show_colormap(fgColors[4]);
+txtSample[4]->textcolor(fgColors[4]);
+txtSample[4]->redraw();}
+          xywh {195 165 45 25}
+        }
+        Fl_Button {btnBg[4]} {
+          label Bg
+          callback {bgColors[4] = fl_show_colormap(bgColors[4]);
+txtSample[4]->color(bgColors[4]);
+txtSample[4]->redraw();}
+          xywh {260 165 45 25}
+        }
+      }
+      Fl_Group tabGroupPriority {
+        label Priority open
+        xywh {5 35 430 185} hide
+      } {
+        Fl_Input cfgP1 {
+          label {Priority 1 character}
+          xywh {160 70 20 25}
+        }
+        Fl_Input inpStatesList1 {
+          label {States List (ie: FL, AL, GA)}
+          xywh {200 70 225 25} align 5
+        }
+        Fl_Input cfgP2 {
+          label {Priority 2 character}
+          xywh {160 100 20 25}
+        }
+        Fl_Input inpStatesList2 {
+          xywh {200 100 225 25} align 5
+        }
+        Fl_Input cfgP3 {
+          label {Priority 3 character}
+          xywh {160 130 20 25}
+        }
+        Fl_Input inpStatesList3 {
+          xywh {200 130 225 25} align 5
+        }
+        Fl_Check_Button chkAutoPriority {
+          label {Auto By Priority}
+          xywh {160 165 25 25} down_box DOWN_BOX align 4
+        }
+      }
+    }
+    Fl_Return_Button btnConfigOK {
+      label OK
+      callback cb_btnCloseConfig
+      xywh {355 235 75 25}
+    }
+  }
+} 
+
+Function {Log_ins_dialog()} {} {
+  Fl_Window {} {
+    label {Current Log Ins} open
+    xywh {608 169 240 235} type Double hide
+  } {
+    Fl_Browser log_in_view {
+      xywh {0 0 240 205} align 1
+    }
+    Fl_Button btn_copy_to_clipboard {
+      label Copy
+      callback {copy_to_clipboard();}
+      xywh {30 210 70 20}
+    }
+    Fl_Button btn_close_log_ins {
+      label Close
+      callback {o->parent()->hide();}
+      xywh {140 210 70 20}
+    }
+  }
+} 
diff --git a/src/netedits.cxx b/src/netedits.cxx
new file mode 100644
index 0000000..6329b5b
--- /dev/null
+++ b/src/netedits.cxx
@@ -0,0 +1,237 @@
+// =====================================================================
+//
+// netedits.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+// Copyright (C) 2014, Robert Stiles, KK5VD
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// =====================================================================
+// Editor dialogs for both 16 & 24 field database structures
+
+
+#include "netedits.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "netshared.h"
+#include "netutils.h"
+#include "date.h"
+#include "calendar.h"
+
+static void cb_mnuSortByAPS(Fl_Menu_*, void*) {
+	SortByAPS ();
+	cbGoFirstRec (NULL,NULL);
+}
+
+static void cb_mnuSortBySAP(Fl_Menu_*, void*) {
+	SortBySAP ();
+	cbGoFirstRec (NULL,NULL);
+}
+
+static void cb_mnuSortByNetNbr(Fl_Menu_*, void*) {
+	SortByNetNbr ();
+	cbGoFirstRec (NULL,NULL);
+}
+
+Fl_Menu_Item menu_mbarMain[] = {
+	{"&Sort", 0,  0, 0, 64, 0, 0, 14, 56},
+	{"&Area/Prefix/Suffix", 0,  (Fl_Callback*)cb_mnuSortByAPS, 0, 0, 0, 0, 14, 56},
+	{"&Suffix/Area/Prefix", 0,  (Fl_Callback*)cb_mnuSortBySAP, 0, 0, 0, 0, 14, 56},
+	{"&Net Number", 0,  (Fl_Callback*)cb_mnuSortByNetNbr, 0, 0, 0, 0, 14, 56},
+	{0},
+	{"Sea&rch", 0,  0, 0, 64, 0, 0, 14, 56},
+	{"&Callsign", 0,  (Fl_Callback*)cb_mnuSearchCallsign, 0, 0, 0, 0, 14, 56},
+	{"&NetNbr", 0,  (Fl_Callback*)cb_mnuSearchNetNbr, 0, 0, 0, 0, 14, 56},
+	{0},
+	{"&Browse", 0,  0, 0, 64, 0, 0, 14, 56},
+	{"&Callsign", 0,  (Fl_Callback*)cb_mnuBrowseCallsign, 0, 0, 0, 0, 14, 56},
+	{"&NetNbr", 0,  (Fl_Callback*)cb_mnuBrowseNetNbr, 0, 0, 0, 0, 14, 56},
+	{0},
+	{"Fldigi", 0,  (Fl_Callback*)cb_mnuFldigiEditor, 0, 0, 0, 0, 14, 56},
+	{"QRZ", 0,  (Fl_Callback*)cb_mnuQRZ, 0, 0, 0, 0, 14, 56},
+	{0}
+};
+
+Fl_Menu_Bar *mbarMain = (Fl_Menu_Bar *)0;
+Fl_Input *inpPrefix=(Fl_Input *)0;
+Fl_Input *inpArea=(Fl_Input *)0;
+Fl_Input *inpSuffix=(Fl_Input *)0;
+Fl_Input *inpNickname=(Fl_Input *)0;
+Fl_Input *inpNetNbr=(Fl_Input *)0;
+Fl_Input *inpFname=(Fl_Input *)0;
+Fl_Input *inpLname=(Fl_Input *)0;
+Fl_Input *inpAddress=(Fl_Input *)0;
+Fl_Input *inpCity=(Fl_Input *)0;
+Fl_Input *inpState=(Fl_Input *)0;
+Fl_Input *inpZip=(Fl_Input *)0;
+Fl_Input *inpPhone=(Fl_Input *)0;
+Fl_DateInput *inpBirthday=(Fl_DateInput *)0;
+Fl_Input *inpSpouse=(Fl_Input *)0;
+Fl_Input *inpSpBirthday=(Fl_Input *)0;
+Fl_DateInput *txtLogDate=(Fl_DateInput *)0;
+Fl_Button *btnFirst=(Fl_Button *)0;
+Fl_Button *btnPrev=(Fl_Button *)0;
+Fl_Button *btnNext=(Fl_Button *)0;
+Fl_Button *btnLast=(Fl_Button *)0;
+Fl_Button *btnNewSave=(Fl_Button *)0;
+Fl_Button *btn2Queue=(Fl_Button *)0;
+Fl_Button *btnDelete=(Fl_Button *)0;
+Fl_Button *btnUpdateCancel=(Fl_Button *)0;
+Fl_Button *btnClose=(Fl_Button *)0;
+Fl_Output *lblFileName=(Fl_Output *)0;
+Fl_Output *lblNumRecs=(Fl_Output *)0;
+Fl_Input *inpCallsign=(Fl_Input *)0;
+Fl_DateInput *inpPrevDate=(Fl_DateInput *)0;
+Fl_Input *inpNbrLogins=(Fl_Input *)0;
+Fl_Input *inpStatus=(Fl_Input *)0;
+Fl_DateInput *inpJoined=(Fl_DateInput *)0;
+Fl_Input *inpEmail=(Fl_Input *)0;
+Fl_Input *inpComment1=(Fl_Input *)0;
+Fl_Input *inpComment2=(Fl_Input *)0;
+
+static Fl_Window *editor = (Fl_Window *)0;
+
+Fl_Window * getEditWindow()
+{
+	if(!editor) {
+		editor = newEditWindow(false);
+	}
+	return editor;
+}
+
+Fl_Window * newEditWindow(bool new_window_flag)
+{
+
+	if(editor && !new_window_flag)
+		return editor;
+
+	Fl_Window *dlgNetEdit =
+	new Fl_Window(	main_window->x() + main_window->w() + 10,
+				  main_window->y(),
+				  535, 460, "Database Editor");
+	dlgNetEdit->color(52);
+
+	mbarMain = new Fl_Menu_Bar(0, 0, 535, 25);
+	mbarMain->menu(menu_mbarMain);
+
+	inpPrefix = new Fl_Input(35, 75, 35, 25, "Prefix");
+	inpPrefix->align(FL_ALIGN_TOP_LEFT);
+
+	inpArea = new Fl_Input(80, 75, 30, 25, "Area");
+	inpArea->align(FL_ALIGN_TOP_LEFT);
+
+	inpSuffix = new Fl_Input(125, 75, 45, 25, "Suffix");
+	inpSuffix->align(FL_ALIGN_TOP_LEFT);
+
+	inpNickname = new Fl_Input(230, 75, 125, 25, "Nickname");
+	inpNickname->align(FL_ALIGN_TOP_LEFT);
+
+	inpNetNbr = new Fl_Input(385, 75, 60, 25, "Net #");
+	inpNetNbr->align(FL_ALIGN_TOP_LEFT);
+
+	inpFname = new Fl_Input(80, 205, 105, 25, "Name:");
+	inpLname = new Fl_Input(190, 205, 170, 25);
+	inpAddress = new Fl_Input(80, 235, 280, 25, "Address:");
+	inpCity = new Fl_Input(80, 265, 190, 25, "City/St/Zip:");
+	inpState = new Fl_Input(275, 265, 35, 25);
+	inpZip = new Fl_Input(320, 265, 50, 25);
+	inpPhone = new Fl_Input(385, 265, 135, 25, "Phone:");
+	inpPhone->align(FL_ALIGN_TOP_LEFT);
+
+	inpBirthday = new Fl_DateInput(385, 205, 110, 25, (char*)"Birthday:");
+	inpBirthday->align(FL_ALIGN_TOP_LEFT);
+	inpBirthday->format(1);
+
+	inpSpouse = new Fl_Input(80, 325, 85, 25, "Spouse:");
+	inpSpBirthday = new Fl_Input(235, 325, 75, 25, "Birthday:");
+	txtLogDate = new Fl_DateInput(80, 140, 110, 25, (char*)"Log Date:");
+	txtLogDate->format(2);
+
+	int xpos = 45;
+	int ypos = 420;
+	int width = 25;
+	int height = 25;
+
+	btnFirst = new Fl_Button(xpos, ypos, width, height, "@|<");
+	btnFirst->callback((Fl_Callback*)cbGoFirstRec);
+
+	xpos += width;
+	btnPrev = new Fl_Button(xpos, ypos, width, height, "@<");
+	btnPrev->callback((Fl_Callback*)cbGoPrevRec);
+
+	xpos += width;
+	btnNext = new Fl_Button(xpos, ypos, width, height, "@>");
+	btnNext->callback((Fl_Callback*)cbGoNextRec);
+
+	xpos += width;
+	btnLast = new Fl_Button(xpos, ypos, width, height, "@>|");
+	btnLast->callback((Fl_Callback*)cbGoLastRec);
+
+	xpos += (width + 10);
+	width = 55;
+	btnNewSave = new Fl_Button(xpos, ypos, width, height, "New");
+	btnNewSave->callback((Fl_Callback*)cb_btnNewSave);
+
+	xpos += (width + 10);
+	btnUpdateCancel = new Fl_Button(xpos, ypos, width, height, "Update");
+	btnUpdateCancel->callback((Fl_Callback*)cb_btnUpdateCancel);
+
+	xpos += (width + 10);
+	btnDelete = new Fl_Button(xpos, ypos, width, height, "Delete");
+	btnDelete->callback((Fl_Callback*)cb_btnDelete);
+
+	xpos += (width + 10);
+	btn2Queue = new Fl_Button(xpos, ypos, width, height, "Queue");
+	btn2Queue->callback((Fl_Callback*)cb_btn2Queue);
+
+	xpos += (width + 30);
+	btnClose = new Fl_Button(xpos, ypos, width, height, "Close");
+	btnClose->callback((Fl_Callback*)cb_CloseEditor);
+
+	lblFileName = new Fl_Output(25, 30, 410, 25);
+	lblFileName->box(FL_BORDER_BOX);
+	lblFileName->color(52);
+
+	lblNumRecs = new Fl_Output(440, 30, 85, 25);
+	lblNumRecs->box(FL_BORDER_BOX);
+	lblNumRecs->color(53);
+
+	inpCallsign = new Fl_Input(80, 105, 85, 25, "Callsign:");
+
+	inpPrevDate = new Fl_DateInput(200, 140, 110, 25, (char*)"Prev Date:");
+	inpPrevDate->format(2);
+	inpPrevDate->align(FL_ALIGN_TOP_LEFT);
+
+	inpNbrLogins = new Fl_Input(315, 140, 85, 25, "Nbr Logins:");
+	inpNbrLogins->align(FL_ALIGN_TOP_LEFT);
+
+	inpStatus = new Fl_Input(80, 175, 25, 25, "Status:");
+	inpJoined = new Fl_DateInput(180, 175, 110, 25, (char*)"Joined:");
+	inpJoined->format(2);
+	inpEmail = new Fl_Input(80, 295, 440, 25, "Email:");
+	inpComment1 = new Fl_Input(80, 355, 440, 25, "Comments");
+	inpComment2 = new Fl_Input(80, 385, 440, 25);
+	
+	dlgNetEdit->set_modal();
+	dlgNetEdit->end();
+	
+	return dlgNetEdit;
+}
+
diff --git a/src/netshared.cxx b/src/netshared.cxx
new file mode 100644
index 0000000..8c6fdc4
--- /dev/null
+++ b/src/netshared.cxx
@@ -0,0 +1,936 @@
+// =====================================================================
+//
+// netshared.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+// Copyright (C) 2014, Robert Stiles, KK5VD
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// =====================================================================
+
+
+#include <string>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <time.h>
+
+#include <FL/Fl_Window.H>
+#include <FL/Fl.H>
+#include <FL/fl_ask.H>
+#include <FL/Fl_File_Chooser.H>
+#include <FL/filename.H>
+
+#include "netshared.h"
+#include "my_UI.h"
+#include "loglist.h"
+#include "qrzlib.h"
+#include "netsupport.h"
+#include "config.h"
+#include "net_config.h"
+#include "xml_io.h"
+
+#include "csvdb.h"
+
+csvdb netdb;
+
+extern loglist callinlist;
+
+short	rc;
+int		fc, nrecs;
+
+brwsStruct *brwsData = NULL;
+static int brwstabs[] = { 80, 0 };
+
+State editState = UPDATE;
+
+size_t		currec;
+size_t		brwsnum;
+size_t		AddedRecNbr;
+
+char sSimpleName[120];
+char szDispName[80];
+
+Fl_Window	*NetNbrSearch = NULL,
+*NetNbrBrowse = NULL,
+*CallsignSearch = NULL,
+*CallsignBrowse = NULL;
+
+char *uppercase (const char *s)
+{
+	static char ucase[128];
+	memset (ucase, (char)0, sizeof(ucase));
+	strncpy (ucase, s, sizeof(ucase)-1);
+	for (unsigned int i = 0; i < strlen(ucase); i++)
+		ucase[i] = toupper(ucase[i]);
+	return ucase;
+}
+
+char *trim (const char *s)
+{
+	static char trimmed[128];
+	memset (trimmed, (char)0, sizeof(trimmed));
+	strncpy (trimmed, s, sizeof(trimmed)-1);
+	while ( (strlen(trimmed)) && (trimmed[strlen(trimmed)-1] == ' '))
+		trimmed[strlen(trimmed)-1] = 0;
+	if (trimmed[0] == 0) return trimmed;
+	while (trimmed[0] == ' ')
+		strcpy(trimmed, trimmed+1);
+	return trimmed;
+}
+
+void gotoRec (long L)
+{
+	currec = L;
+	dispRec ();
+}
+
+void showState ()
+{
+	switch (editState) {
+		case UPDATE:
+			btnNewSave->label("New");
+			btnUpdateCancel->label ("Update");
+			btnNewSave->show ();
+			btnDelete->show ();
+			btnFirst->show ();
+			btnPrev->show ();
+			btnNext->show ();
+			btnLast->show ();
+			btn2Queue->show ();
+			break;
+
+		case NEW:
+			btnNewSave->label ("Save");
+			btnUpdateCancel->label ("Cancel");
+			btnNewSave->show ();
+			btnDelete->hide ();
+			btnDelete->show ();
+			btnFirst->show ();
+			btnPrev->show ();
+			btnNext->show ();
+			btnLast->show ();
+			btn2Queue->show ();
+			break;
+
+		case ADD:
+			btnNewSave->label ("Save");
+			btnUpdateCancel->label ("Cancel");
+			btnNewSave->show ();
+			btnDelete->hide ();
+			btnFirst->hide ();
+			btnPrev->hide ();
+			btnNext->hide ();
+			btnLast->hide ();
+			btn2Queue->hide ();
+			break;
+
+		case MODIFY:
+			btnNewSave->hide ();
+			btnDelete->hide ();
+			btnFirst->hide ();
+			btnPrev->hide ();
+			btnNext->hide ();
+			btnLast->hide ();
+			btn2Queue->hide ();
+			btnUpdateCancel->label ("Update");
+			break;
+	}
+}
+
+void toggleState()
+{
+	if (editState == NEW || editState == ADD) {
+		editState = UPDATE;
+		showState ();
+	} else {
+		showState ();
+	}
+}
+
+long IsInDB (const char *p, const char *a, const char *s)
+{
+	char prefix[3], area[2], suffix[4];
+	long found;
+	int cmp, suffix_only = 0;
+	memset (prefix, 0, 3);
+	memset (area, 0, 2);
+	memset (suffix, 0, 4);
+	strncpy (prefix, trim (uppercase (p)), 2);
+	strncpy (area, trim (uppercase (a)), 1);
+	strncpy (suffix, trim (uppercase (s)), 3);
+
+	found = -1L;
+	if (area[0] == 0 && prefix[0]== 0) suffix_only = 1;
+
+	SortBySAP ();
+
+	for (int n = 0; n < netdb.numrecs(); n++) {
+		cmp = strcmp (suffix, trim (brwsData[n].suffix));
+		if (cmp > 0) continue;
+		if (cmp < 0) break;
+		// only looking for a suffix match
+		if (suffix_only) {
+			found = n;
+			break;
+		}
+		if (strcmp(prefix, trim (brwsData[n].prefix)) == 0 &&
+			strcmp(area, brwsData[n].area) == 0) {
+			found = n;
+			break;
+		}
+	}
+	return found;
+}
+
+extern Fl_Input *inpCallsign;
+
+void AddNewRecord (char *prefix, char *area, char *suffix)
+{
+	char tmp[12];
+	clearEditForm ();
+	inpPrefix->value (prefix);
+	inpArea->value (area);
+	inpSuffix->value (suffix);
+	strcpy (tmp, trim(prefix));
+	strcat (tmp, trim(area));
+	strcat (tmp, trim(suffix));
+	inpCallsign->value (tmp);
+	inpNickname->take_focus ();
+	editState = ADD;
+	showState ();
+}
+
+void ModifyRecord (long N)
+{
+	editState = MODIFY;
+	showState ();
+	gotoRec (N);
+}
+
+
+void getBrwsData()
+{
+	if (!netdb.numrecs()) {
+		return;
+	}
+
+	snprintf (szDispName, sizeof(szDispName), "%s (%d)", sSimpleName, (int)netdb.numrecs());
+	dbSelectGroup->label (szDispName);
+	dbSelectGroup->redraw ();
+
+	currec = netdb.recnbr();
+	if (brwsData) {
+		delete[] brwsData;
+		brwsData = NULL;
+	}
+
+	csvRecord rec;
+	brwsData = new brwsStruct[netdb.numrecs()];
+	for (int n = 0; n < netdb.numrecs(); n++) {
+		netdb.get(n, rec);
+		brwsData[n].recN = n;
+		strcpy (brwsData[n].netnbr, rec.netnbr.c_str());
+		strcpy (brwsData[n].prefix, rec.prefix.c_str());
+		strcpy (brwsData[n].area, rec.area.c_str());
+		strcpy (brwsData[n].suffix, rec.suffix.c_str());
+		while (strlen(brwsData[n].suffix) < 3)
+			strcat (brwsData[n].suffix, " ");
+	}
+	netdb.get(currec, rec);
+}
+
+int NetNbrCompare (const void *p1, const void *p2)
+{
+	brwsStruct *s1 = (brwsStruct *)p1;
+	brwsStruct *s2 = (brwsStruct *)p2;
+	int n1 = atoi(s1->netnbr);
+	int n2 = atoi(s2->netnbr);
+	if (n1 == n2) return 0;
+	if (n1 == 0) return 1;
+	if (n2 == 0) return -1;
+	if (n1 < n2) return -1;
+	return 1;
+}
+
+int SAPcompare (const void *p1, const void *p2)
+{
+	brwsStruct *s1 = (brwsStruct *)p1;
+	brwsStruct *s2 = (brwsStruct *)p2;
+	int cmp;
+	if ((cmp = strcmp(s1->suffix, s2->suffix)) != 0) return cmp;
+	if ((cmp = strcmp(s1->area, s2->area)) != 0) return cmp;
+	return strcmp(s1->prefix, s2->prefix);
+}
+
+int APScompare (const void *p1, const void *p2)
+{
+	brwsStruct *s1 = (brwsStruct *)p1;
+	brwsStruct *s2 = (brwsStruct *)p2;
+	int cmp;
+	if ((cmp = strcmp(s1->area, s2->area)) != 0) return cmp;
+	if ((cmp = strcmp(s1->prefix, s2->prefix)) != 0) return cmp;
+	return strcmp(s1->suffix, s2->suffix);
+}
+
+void SortBySAP()
+{
+	if (!brwsData || !netdb.numrecs()) return;
+	qsort ( &(brwsData[0]), netdb.numrecs(), sizeof(brwsStruct), SAPcompare);
+}
+
+void SortByNetNbr()
+{
+	if (!brwsData || !netdb.numrecs()) return;
+	qsort ( &(brwsData[0]), netdb.numrecs(), sizeof(brwsStruct), NetNbrCompare);
+}
+
+void SortByAPS()
+{
+	if (!brwsData || !netdb.numrecs()) return;
+	qsort ( &(brwsData[0]), netdb.numrecs(), sizeof(brwsStruct), APScompare);
+}
+
+void closeDB()
+{
+	netdb.save();
+	std::string cfg_filename = home_dir;
+	cfg_filename.append("flnet.cfg");
+	FILE *cfg_file = fopen(cfg_filename.c_str(),"w");
+	fprintf(cfg_file, "%s\n", selected_file.c_str());
+	fclose(cfg_file);
+}
+
+void openDB(string fname)
+{
+	strcpy (sSimpleName, fl_filename_name(fname.c_str()));
+	netdb.filename(fname.c_str());
+	if (netdb.load() != 0) {
+		fl_message("Not an flnet csv file");
+		exit(0);
+	}
+	if (netdb.numrecs()) {
+		readConfig ();
+		callinlist.setPri_1 (chP1[0]);
+		callinlist.setPri_2 (chP2[0]);
+		callinlist.setPri_3 (chP3[0]);
+		if (chAuto == 'y') callinlist.AutoPriority (1);
+		getBrwsData();
+	}
+}
+
+void dispRec ()
+{
+	char buf[80];
+	sprintf (buf,"File:%s",sSimpleName);
+	lblFileName->value (buf);
+	sprintf (buf,"Recs: %d", (int)netdb.numrecs());
+	lblNumRecs->value (buf);
+
+	csvRecord rec;
+	netdb.get(currec, rec);
+
+	inpPrefix->value (trim (rec.prefix.c_str()));
+	inpArea->value (trim (rec.area.c_str()));
+	inpSuffix->value (trim (rec.suffix.c_str()));
+	inpNickname->value (trim (rec.name.c_str()));
+	inpNetNbr->value (trim (rec.netnbr.c_str()));
+	txtLogDate->value( rec.logdate.c_str());
+	inpFname->value (trim (rec.fname.c_str()));
+	inpLname->value (trim (rec.lname.c_str()));
+	inpAddress->value (trim (rec.addr.c_str()));
+	inpCity->value (trim (rec.city.c_str()));
+	inpState->value (trim (rec.state.c_str()));
+	inpZip->value (trim (rec.zip.c_str()));
+	strcpy(buf, rec.phone.c_str());
+	if (strpbrk (buf, "0123456789") != NULL)
+		inpPhone->value (trim (buf));
+	else
+		inpPhone->value ("");
+	inpSpouse->value (trim (rec.spouse.c_str()));
+	inpSpBirthday->value (trim (rec.sp_birth.c_str()));
+	inpBirthday->value(rec.birthdate.c_str());
+
+	inpCallsign->value (trim (rec.callsign.c_str()));
+	inpNbrLogins->value (trim (rec.nbrlogins.c_str()));
+	inpStatus->value (trim (rec.status.c_str()));
+	inpJoined->value (trim (rec.joined.c_str()));
+	inpComment1->value (trim (rec.comment1.c_str()));
+	inpComment2->value (trim (rec.comment2.c_str()));
+	inpEmail->value (trim (rec.email.c_str()));
+	inpPrevDate->value (trim (rec.prevdate.c_str()));
+
+}
+
+void clearEditForm ()
+{
+	inpPrefix->value ("");
+	inpArea->value ("");
+	inpSuffix->value ("");
+	inpNickname->value ("");
+	inpNetNbr->value ("");
+	txtLogDate->value ("");
+	inpFname->value ("");
+	inpLname->value ("");
+	inpAddress->value ("");
+	inpCity->value ("");
+	inpState->value ("");
+	inpZip->value ("");
+	inpPhone->value ("");
+	inpBirthday->value ("");
+	inpSpouse->value ("");
+	inpSpBirthday->value ("");
+	inpCallsign->value ("");
+	inpNbrLogins->value ("");
+	inpStatus->value ("");
+	inpJoined->value ("");
+	inpComment1->value ("");
+	inpComment2->value ("");
+	inpPrevDate->value ("");
+	inpEmail->value ("");
+}
+
+void setFields (csvRecord &rec)
+{
+	rec.prefix = uppercase (inpPrefix->value ());
+	rec.area = inpArea->value ();
+	rec.suffix =	uppercase (inpSuffix->value ());
+	rec.name = inpNickname->value ();
+	rec.netnbr = inpNetNbr->value ();
+	rec.logdate = txtLogDate->value();
+	rec.fname = inpFname->value ();
+	rec.lname = inpLname->value ();
+	rec.addr	= inpAddress->value ();
+	rec.city	= inpCity->value ();
+	rec.state = inpState->value ();
+	rec.zip	 = inpZip->value ();
+	rec.phone = inpPhone->value ();
+	rec.birthdate = inpBirthday->value ();
+	rec.spouse = inpSpouse->value ();
+	rec.sp_birth = inpSpBirthday->value ();
+	rec.callsign = inpCallsign->value();
+	rec.nbrlogins = inpNbrLogins->value ();
+	rec.status = inpStatus->value ();
+	rec.joined = inpJoined->value();
+	rec.comment1 = inpComment1->value ();
+	rec.comment2 = inpComment2->value ();
+	rec.email = inpEmail->value ();
+	rec.prevdate = inpPrevDate->value();
+
+}
+
+void saveCurRecord ()
+{
+	csvRecord rec;
+	setFields (rec);
+	netdb.put(currec, rec);
+	dispRec ();
+}
+
+void appendNewRecord ()
+{
+	csvRecord rec;
+	setFields (rec);
+	netdb.add(rec);
+	getBrwsData ();
+}
+
+void appendNewRecord (csvRecord &rec)
+{
+	setFields (rec);
+	netdb.add(rec);
+	getBrwsData ();
+}
+
+
+int add_fldigi_record(void)
+{
+	std::string prefix, area, suffix;
+
+	if (!fldigi_online) {
+		fl_alert ("FLDIGI<->FLNET XMLRPC Commmunication failure!");
+		return -1;
+	}
+
+	struct callsign_data *data = update_flnet_calldata();
+
+	if(!data) {
+		fl_alert ("XMLRPC Internal Data transfer failure!");
+		return -1;
+	}
+
+	if(split_call(data->callsign, prefix, area, suffix) == false) return -1;
+
+	if(IsInDB (prefix.c_str(), area.c_str(), suffix.c_str()) < 0) {
+		csvRecord rec;
+		char date[32];
+		time_t rawtime = 0;
+		struct tm * timeinfo = 0;
+
+		time (&rawtime);
+		timeinfo = localtime (&rawtime);
+		memset(date, 0, sizeof(date));
+		snprintf(date, sizeof(date)-1, "%04d%02d%02d", timeinfo->tm_year+1900, timeinfo->tm_mon+1, timeinfo->tm_mday);
+
+		rec.prefix    = trim(uppercase(prefix.c_str()));
+		rec.area      = trim(area.c_str());
+		rec.suffix    = trim(uppercase(suffix.c_str()));
+		rec.name      = trim(data->name.c_str());
+		rec.fname     = trim(data->name.c_str());
+		rec.city      = trim(data->qth.c_str());
+		rec.state     = trim(data->state.c_str());
+		rec.callsign  = trim(uppercase(data->callsign.c_str()));
+		rec.netnbr 	  = "";
+		rec.logdate   = date;
+		rec.lname 	  = "";
+		rec.addr	  = "";
+		rec.zip	      = "";
+		rec.phone     = "";
+		rec.birthdate = "";
+		rec.spouse    = "";
+		rec.sp_birth  = "";
+		rec.nbrlogins = "";
+		rec.status    = "";
+		rec.joined    = date;
+		rec.comment1  = "";
+		rec.comment2  = "";
+		rec.email     = "";
+		rec.prevdate  = "";
+
+		netdb.add(rec);
+		getBrwsData ();
+	}
+
+	delete data;
+
+	return (int) IsInDB (prefix.c_str(), area.c_str(), suffix.c_str());
+}
+
+bool split_call(std::string src, std::string &pre, std::string &area, std::string &post)
+{
+	if(src.empty()) return false;
+
+	int index = 0;
+	int start = 0;
+	int end = 0;
+	std::string temp;
+
+	for(index = src.size() - 1; index > -1; index--) {
+		if(src[index] <= ' ') continue;
+		if(isdigit(src[index])) break;
+		if(!end) end = index;
+		start = index;
+	}
+
+	temp.clear();
+	for(int j = start; j <= end; j++)
+		temp += toupper(src[j]);
+	post.assign(temp);
+
+	start = 0;
+	end = 0;
+
+	for(; index > -1; index--) {
+		if(src[index] <= ' ') continue;
+		if(isalpha(src[index])) break;
+		if(!end) end = index;
+		start = index;
+	}
+
+	temp.clear();
+	for(int j = start; j <= end; j++)
+		temp += src[j];
+	area.assign(temp);
+
+	start = 0;
+	end = 0;
+
+	for(; index > -1; index--) {
+		if(src[index] <= ' ') continue;
+		if(!isalnum(src[index])) break;
+		if(!end) end = index;
+		start = index;
+	}
+
+	temp.clear();
+	for(int j = start; j <= end; j++)
+		temp += toupper(src[j]);
+	pre.assign(temp);
+
+	return true;
+}
+
+void cb_mnuFldigiEditor(Fl_Menu_*, void*)
+{
+	int rn = add_fldigi_record();
+	if(rn < 0) return;
+	gotoRec(brwsData[rn].recN);
+}
+
+void cb_F12(int WhoIsUp)
+{
+	long shownrec;
+	int n;
+	n = callinlist.numlist ();
+	if (!n) return;
+
+	Fl_Window *editor = getEditWindow();
+	editor->resize(main_window->x() + main_window->w() + 10, main_window->y(), 535, 460);
+
+	SortBySAP ();
+	clearEditForm ();
+	editor->show ();
+
+	if ((shownrec = callinlist.recN (WhoIsUp)) != -1)
+		ModifyRecord (shownrec);
+	else
+		AddNewRecord (callinlist.prefix (WhoIsUp),
+					  callinlist.area (WhoIsUp),
+					  callinlist.suffix (WhoIsUp));
+}
+
+void cb_ShiftF12(void)
+{
+	int rn = add_fldigi_record();
+	if(rn < 0) return;
+	myUI->PickedToCallinsDB((size_t) brwsData[rn].recN);
+}
+
+
+void cbEditor ()
+{
+	Fl_Window *editor = getEditWindow();
+	editor->resize(main_window->x() + main_window->w() + 10, main_window->y(), 535, 460);
+
+	SortBySAP ();
+	clearEditForm ();
+	editor->show ();
+	editState = UPDATE;
+	showState ();
+	cbGoFirstRec (NULL, NULL);
+}
+
+void cbCloseEditor ()
+{
+	Fl_Window *editor = getEditWindow();
+	getBrwsData ();
+	SortBySAP ();
+	editState = UPDATE;
+	showState ();
+	editor->hide ();
+	myUI->dispCallIns (false);
+}
+void cb_btnCancelCallsignSearch(Fl_Button*, void*)
+{
+	CallsignBrowse->hide();
+}
+
+void cb_OkCallsignSearch(Fl_Button*, void*)
+{
+	int selrec = brwsCallsign->value();
+	CallsignBrowse->hide();
+	if (selrec != 0) {
+		brwsnum = selrec - 1;
+		gotoRec ( brwsData[brwsnum].recN);
+	}
+}
+
+void cb_mnuBrowseCallsign (Fl_Menu_*, void*)
+{
+	char brwsLine[30];
+	if (!CallsignBrowse) CallsignBrowse = winCallsignBrowse();
+	getBrwsData();
+	SortByAPS();
+	brwsCallsign->column_widths(brwstabs);
+	brwsCallsign->clear ();
+	for (int i = 0; i < netdb.numrecs(); i++) {
+		strcpy(brwsLine, brwsData[i].netnbr);
+		strcat(brwsLine, "\t");
+		strcat(brwsLine, brwsData[i].prefix);
+		strcat(brwsLine, brwsData[i].area);
+		strcat(brwsLine, brwsData[i].suffix);
+		brwsCallsign->add (brwsLine);
+	}
+	CallsignBrowse->show();
+}
+
+void cb_btnCancelNetNbrSearch(Fl_Button*, void*)
+{
+	NetNbrBrowse->hide();
+}
+
+void cb_OkNetNbrSearch(Fl_Button*, void*)
+{
+	int selrec = brwsNetNbr->value();
+	NetNbrBrowse->hide();
+	if (selrec != 0) {
+		brwsnum = selrec - 1;
+		gotoRec (brwsData[brwsnum].recN);
+	}
+}
+
+void cb_mnuBrowseNetNbr (Fl_Menu_*, void*)
+{
+	char brwsLine[30];
+	if (!NetNbrBrowse) NetNbrBrowse = winNetNbrBrowse();
+	getBrwsData();
+	SortByNetNbr();
+	brwsNetNbr->clear ();
+	brwsNetNbr->column_widths(brwstabs);
+	for (int i = 0; i < netdb.numrecs(); i++) {
+		strcpy(brwsLine, brwsData[i].netnbr);
+		strcat(brwsLine, "\t");
+		strcat(brwsLine, brwsData[i].prefix);
+		strcat(brwsLine, brwsData[i].area);
+		strcat(brwsLine, brwsData[i].suffix);
+		brwsNetNbr->add (brwsLine);
+	}
+	NetNbrBrowse->show();
+}
+
+void cb_btnSearchCancel(Fl_Button *b, void *d)
+{
+	CallsignSearch->hide ();
+}
+
+void cb_btnSearchOK(Fl_Return_Button *b, void *d)
+{
+	long found;
+	if (!brwsData) return;
+
+	CallsignSearch->hide ();
+
+	found = IsInDB (sSrchPrefix->value(), sSrchArea->value(), sSrchSuffix->value());
+	if (found > -1) {
+		brwsnum = found;
+		gotoRec (brwsData[found].recN);
+	}
+}
+
+void cb_mnuSearchCallsign (Fl_Menu_ *m, void *d)
+{
+	if (!CallsignSearch)
+		CallsignSearch = newSearchCallsignDialog();
+	CallsignSearch->show();
+}
+
+void cb_btnSearchNetNbrCancel (Fl_Button *b, void *d)
+{
+	NetNbrSearch->hide ();
+}
+
+void cb_btnSearchNetNbrOK (Fl_Return_Button *b, void *d)
+{
+	if (!brwsData) return;
+	long found;
+	char szNbr[10];
+	int nbr, netnbr;
+
+	strcpy (szNbr, sSrchNetNbr->value());
+	NetNbrSearch->hide ();
+
+	found = -1L;
+	SortByNetNbr ();
+	nbr = atoi(szNbr);
+	for (int n = 0; n < netdb.numrecs(); n++) {
+		netnbr = atoi (brwsData[n].netnbr);
+		if (nbr > netnbr) continue;
+		if (nbr < netnbr) break;
+		found = n;
+		break;
+	}
+	if (found > -1) {
+		brwsnum = found;
+		gotoRec (brwsData[found].recN);
+	}
+}
+
+void cb_mnuSearchNetNbr (Fl_Menu_ *m, void *d)
+{
+	if (!NetNbrSearch)
+		NetNbrSearch = newSearchNetNbrDialog ();
+	NetNbrSearch->show ();
+}
+
+void cb_btn2Queue(Fl_Button *b, void *d)
+{
+	myUI->PickedToCallinsDB ((size_t)currec);
+}
+
+void cb_btnUpdateCancel(Fl_Button *b, void *d)
+{
+	Fl_Window *editor = getEditWindow();
+
+	if (editState == ADD) {
+		toggleState ();
+		editor->hide ();
+		return;
+	}
+	if (editState == NEW) {
+		clearEditForm ();
+		dispRec ();
+		toggleState ();
+		return;
+	}
+	if (editState == MODIFY) {
+		callinlist.modify (WhoIsUp, currec,
+						   inpPrefix->value(),
+						   inpArea->value (),
+						   inpSuffix->value (),
+						   inpNickname->value ());
+		saveCurRecord ();
+		getBrwsData ();
+		SortBySAP ();
+		toggleState ();
+		editor->hide ();
+		updateCallins (false);
+	} else { // must be an UPDATE in normal editor mode
+		if (netdb.numrecs() > 0) {
+			saveCurRecord ();
+			getBrwsData ();
+			SortBySAP ();
+		}
+	}
+}
+
+void cb_btnDelete(Fl_Button *b, void *d)
+{
+	if (fl_choice("Confirm Delete", "cancel", "OK", NULL) == 1) {
+		netdb.erase(currec);
+		cbGoFirstRec (NULL,NULL);
+	}
+}
+
+void cbGoFirstRec(Fl_Button *b, void *d)
+{
+	if (!brwsData) return;
+	brwsnum = 0;
+	gotoRec (brwsData[brwsnum].recN);
+}
+
+void cbGoPrevRec(Fl_Button *b, void *d)
+{
+	if (!brwsData || brwsnum == 0) return;
+	brwsnum--;
+	gotoRec (brwsData[brwsnum].recN);
+}
+
+void cbGoNextRec(Fl_Button *b, void *d)
+{
+	if (!brwsData || brwsnum == (netdb.numrecs() - 1)) return;
+	brwsnum++;
+	gotoRec (brwsData[brwsnum].recN);
+}
+
+void cbGoLastRec(Fl_Button *b, void *d)
+{
+	if (!brwsData) return;
+	brwsnum = netdb.numrecs() - 1;
+	gotoRec (brwsData[brwsnum].recN);
+}
+
+void cb_btnNewSave(Fl_Button *b, void *d)
+{
+	if (editState == NEW || editState == ADD) {
+		if (IsInDB (inpPrefix->value(), inpArea->value(), inpSuffix->value()) == -1) {
+			std::string newPrefix;
+			std::string newArea;
+			std::string newSuffix;
+
+			newPrefix.assign(trim(inpPrefix->value()));
+			newArea.assign(trim(inpArea->value()));
+			newSuffix.assign(trim(inpSuffix->value()));
+
+			appendNewRecord ();
+
+			getBrwsData ();
+			SortBySAP();
+
+			if(newPrefix.size() && newArea.size() && newSuffix.size()) {
+				long found =  IsInDB (newPrefix.c_str(), newArea.c_str(), newSuffix.c_str());
+				if(found > -1) {
+					currec = brwsData[found].recN;
+					gotoRec(currec);
+				}
+			}
+
+			if (editState == ADD) {
+				Fl_Window *editor = getEditWindow();
+				myUI->UpdateWhoIsUp (netdb.numrecs() - 1);
+				toggleState ();
+				editor->hide ();
+				updateCallins (false);
+				return;
+			}
+		} else
+			fl_alert ("Callsign already in database");
+		//cbGoLastRec (NULL, NULL);
+	} else {
+		clearEditForm ();
+		editState = NEW;
+		showState ();
+		inpPrefix->take_focus ();
+		return;
+	}
+	toggleState ();
+}
+
+void cb_mnuQRZ (Fl_Menu_ *m, void *d)
+{
+	QRZ *qCall = new QRZ ((char*)"callbkc");
+	if (qCall->getQRZvalid() == 0) {
+		fl_alert ("Could not open QRZ database");
+		return;
+	}
+	char tcall[7];
+	char buff[256];
+	strcpy (tcall, trim(uppercase(inpPrefix->value())));
+	strcat (tcall, trim(uppercase(inpArea->value())));
+	strcat (tcall, trim(uppercase(inpSuffix->value())));
+	if (qCall->FindRecord (tcall) == 1) {
+		memset (buff, 0, 256);
+		strncpy (buff, qCall->GetFname (), 10);
+		inpFname->value (buff);
+		memset (buff, 0, 256);
+		strncpy (buff, qCall->GetLname (), 20);
+		inpLname->value (buff);
+		memset (buff, 0, 256);
+		strncpy (buff, qCall->GetStreet (), 30);
+		inpAddress->value (buff);
+		memset (buff, 0, 256);
+		strncpy (buff, qCall->GetCity (), 25);
+		inpCity->value (buff);
+		memset (buff, 0, 256);
+		strncpy (buff, qCall->GetState (), 2);
+		inpState->value (buff);
+		memset (buff, 0, 256);
+		strncpy (buff, qCall->GetZIP (),5);
+		inpZip->value (buff);
+#ifdef HAVE_EMAIL
+		if (inpEmail) {
+			strcpy (buff, szEmail(qCall->GetCall()));
+			inpEmail->value (buff);
+		}
+#endif
+	}
+	delete qCall;
+	return;
+}
+
diff --git a/src/netsupport.cxx b/src/netsupport.cxx
new file mode 100644
index 0000000..ad963d3
--- /dev/null
+++ b/src/netsupport.cxx
@@ -0,0 +1,149 @@
+// =====================================================================
+//
+// netsupport.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// =====================================================================
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string>
+
+#include <FL/fl_ask.H>
+#include <FL/Fl_File_Chooser.H>
+
+#include "net_ui.h"
+#include "netshared.h"
+#include "netversion.h"
+#include "loglist.h"
+#include "netsupport.h"
+#include "xml_io.h"
+
+#include "config.h"
+
+static Fl_Window *about = ( Fl_Window * )0;
+//Fl_Window *editor = NULL;
+//Fl_Window *content = ( Fl_Window * )0;
+
+extern void updateLogins ();
+
+void cb_mnuOpen(Fl_Menu_*mnu, void *d)
+{
+	char *p = fl_file_chooser ("Select .csv file", "*.csv", selected_file.c_str(), 0);
+	if (!p) return;
+	selected_file = p;
+	updateLogins ();
+	openDB (selected_file.c_str());
+}
+
+void cb_CloseEditor (Fl_Button *b, void *d)
+{
+	cbCloseEditor ();
+}
+
+
+void cb_mnuEditor(Fl_Menu_ *mnu, void *d)
+{
+	cbEditor ();
+}
+
+void cleanExit()
+{
+	updateLogins ();
+	closeDB();
+	close_xmlrpc();
+	exit(0);
+}
+
+void cb_mnuExit (Fl_Menu_ *m, void *d)
+{
+	cleanExit();
+}
+
+void cb_mnuConfig (Fl_Menu_ *m, void *d)
+{
+	cbConfig ();
+}
+
+void cb_btnCloseConfig (Fl_Return_Button *b, void *d)
+{
+	cbCloseConfig ();
+}
+
+void cb_mnuMigrate (Fl_Menu_ *m, void *d)
+{
+}
+
+char szVersion[80];
+
+void cb_mnuAbout(Fl_Menu_ *mnu, void *d)
+{
+	if (!about) {
+		sprintf (szVersion, "\
+				 Net control program\n\
+				 Version %s\n\
+				 Free Hamware From\n\
+				 W1HKJ\n\n\
+				 Report problems to:", flnet_VERSION);
+		about = newAboutDialog ();
+		lblVersion->label (szVersion);
+	}
+	about->show ();
+}
+
+void cb_mnuHelpContent (Fl_Menu_ *mnu, void *d)
+{
+	visit_URL((void*)"http://www.w1hkj.com/Net-help/index.html");
+	return;
+}
+
+//------------------------------------------------------------------------------
+// support of log-in list viewer
+//------------------------------------------------------------------------------
+Fl_Double_Window *login_list = (Fl_Double_Window *)0;
+string copy_list;
+
+void open_log_ins()
+{
+	if (!login_list) login_list = Log_ins_dialog();
+	if (callinlist.numlist() == 0) return;
+
+	char szLine[40];
+	log_in_view->clear();
+	copy_list.clear();
+
+	static int widths[] = { 80, 80, 80, 0 };  // widths for each column
+	log_in_view->column_widths(widths); // assign array to widget
+
+	for (int i = 0; i < callinlist.numlist(); i++) {
+		strcpy(szLine, callinlist.report_line(i));
+		log_in_view->add(szLine);
+		copy_list.append(szLine).append("\n");
+	}
+	login_list->show();
+}
+
+void copy_to_clipboard()
+{
+	// copy list to clipboard
+	Fl::copy(copy_list.c_str(), copy_list.length(), 1);
+}
diff --git a/src/netutils.cxx b/src/netutils.cxx
new file mode 100644
index 0000000..f6a1a11
--- /dev/null
+++ b/src/netutils.cxx
@@ -0,0 +1,155 @@
+// generated by Fast Light User Interface Designer (fluid) version 1.0302
+
+#include "netutils.h"
+
+Fl_Browser *brwsCallsign=(Fl_Browser *)0;
+
+Fl_Button *btnCancelCallsignSearch=(Fl_Button *)0;
+
+Fl_Button *btn_OkCallsignSearch=(Fl_Button *)0;
+
+Fl_Double_Window* winCallsignBrowse() {
+  Fl_Double_Window* w;
+  { Fl_Double_Window* o = new Fl_Double_Window(304, 231, "Browse by Callsign");
+    w = o;
+    o->color(FL_LIGHT2);
+    { brwsCallsign = new Fl_Browser(0, 0, 215, 230);
+      brwsCallsign->type(2);
+      brwsCallsign->textfont(13);
+      brwsCallsign->when(FL_WHEN_RELEASE);
+    } // Fl_Browser* brwsCallsign
+    { btnCancelCallsignSearch = new Fl_Button(230, 35, 60, 40, "Cancel");
+      btnCancelCallsignSearch->callback((Fl_Callback*)cb_btnCancelCallsignSearch);
+    } // Fl_Button* btnCancelCallsignSearch
+    { btn_OkCallsignSearch = new Fl_Button(230, 135, 60, 40, "OK");
+      btn_OkCallsignSearch->callback((Fl_Callback*)cb_OkCallsignSearch);
+    } // Fl_Button* btn_OkCallsignSearch
+    o->set_modal();
+    o->end();
+  } // Fl_Double_Window* o
+  return w;
+}
+
+Fl_Browser *brwsNetNbr=(Fl_Browser *)0;
+
+Fl_Button *btnCancelNetNbrSearch=(Fl_Button *)0;
+
+Fl_Button *btn_OkNetNbrSearch=(Fl_Button *)0;
+
+Fl_Double_Window* winNetNbrBrowse() {
+  Fl_Double_Window* w;
+  { Fl_Double_Window* o = new Fl_Double_Window(300, 230, "Browse by Net Nbr");
+    w = o;
+    o->color(FL_LIGHT2);
+    { brwsNetNbr = new Fl_Browser(0, 0, 215, 230);
+      brwsNetNbr->type(2);
+      brwsNetNbr->textfont(4);
+      brwsNetNbr->when(FL_WHEN_RELEASE);
+    } // Fl_Browser* brwsNetNbr
+    { btnCancelNetNbrSearch = new Fl_Button(225, 45, 60, 40, "Cancel");
+      btnCancelNetNbrSearch->callback((Fl_Callback*)cb_btnCancelNetNbrSearch);
+    } // Fl_Button* btnCancelNetNbrSearch
+    { btn_OkNetNbrSearch = new Fl_Button(225, 120, 60, 40, "OK");
+      btn_OkNetNbrSearch->callback((Fl_Callback*)cb_OkNetNbrSearch);
+    } // Fl_Button* btn_OkNetNbrSearch
+    o->set_modal();
+    o->end();
+  } // Fl_Double_Window* o
+  return w;
+}
+
+Fl_Double_Window *winSearchCallsignDialog=(Fl_Double_Window *)0;
+
+Fl_Input *sSrchPrefix=(Fl_Input *)0;
+
+Fl_Input *sSrchArea=(Fl_Input *)0;
+
+Fl_Input *sSrchSuffix=(Fl_Input *)0;
+
+Fl_Button *btnSearchCancel=(Fl_Button *)0;
+
+Fl_Return_Button *btnSearchOK=(Fl_Return_Button *)0;
+
+Fl_Double_Window* newSearchCallsignDialog() {
+  { winSearchCallsignDialog = new Fl_Double_Window(207, 107);
+    { sSrchPrefix = new Fl_Input(40, 35, 25, 25, "Prefix");
+      sSrchPrefix->textfont(13);
+      sSrchPrefix->align(Fl_Align(FL_ALIGN_TOP));
+    } // Fl_Input* sSrchPrefix
+    { sSrchArea = new Fl_Input(85, 35, 25, 25, "Area");
+      sSrchArea->textfont(13);
+      sSrchArea->align(Fl_Align(FL_ALIGN_TOP));
+    } // Fl_Input* sSrchArea
+    { sSrchSuffix = new Fl_Input(130, 35, 40, 25, "Suffix");
+      sSrchSuffix->textfont(13);
+      sSrchSuffix->align(Fl_Align(FL_ALIGN_TOP_LEFT));
+    } // Fl_Input* sSrchSuffix
+    { btnSearchCancel = new Fl_Button(20, 70, 80, 25, "Cancel");
+      btnSearchCancel->callback((Fl_Callback*)cb_btnSearchCancel);
+    } // Fl_Button* btnSearchCancel
+    { btnSearchOK = new Fl_Return_Button(105, 70, 80, 25, "Search");
+      btnSearchOK->callback((Fl_Callback*)cb_btnSearchOK);
+    } // Fl_Return_Button* btnSearchOK
+    { new Fl_Box(0, 0, 210, 20, "Enter Full Call / Suffix Only");
+    } // Fl_Box* o
+    winSearchCallsignDialog->set_modal();
+    winSearchCallsignDialog->end();
+  } // Fl_Double_Window* winSearchCallsignDialog
+  return winSearchCallsignDialog;
+}
+
+Fl_Double_Window *winSearchNetNbrDialog=(Fl_Double_Window *)0;
+
+Fl_Input *sSrchNetNbr=(Fl_Input *)0;
+
+Fl_Button *btnSearchNetNbrCancel=(Fl_Button *)0;
+
+Fl_Return_Button *btnSearchNetNbrOK=(Fl_Return_Button *)0;
+
+Fl_Double_Window* newSearchNetNbrDialog() {
+  { winSearchNetNbrDialog = new Fl_Double_Window(207, 107);
+    { sSrchNetNbr = new Fl_Input(80, 30, 50, 25, "Enter Net Number");
+      sSrchNetNbr->textfont(13);
+      sSrchNetNbr->align(Fl_Align(FL_ALIGN_TOP));
+    } // Fl_Input* sSrchNetNbr
+    { btnSearchNetNbrCancel = new Fl_Button(20, 70, 80, 25, "Cancel");
+      btnSearchNetNbrCancel->callback((Fl_Callback*)cb_btnSearchNetNbrCancel);
+    } // Fl_Button* btnSearchNetNbrCancel
+    { btnSearchNetNbrOK = new Fl_Return_Button(105, 70, 80, 25, "Search");
+      btnSearchNetNbrOK->callback((Fl_Callback*)cb_btnSearchNetNbrOK);
+    } // Fl_Return_Button* btnSearchNetNbrOK
+    winSearchNetNbrDialog->set_modal();
+    winSearchNetNbrDialog->end();
+  } // Fl_Double_Window* winSearchNetNbrDialog
+  return winSearchNetNbrDialog;
+}
+
+Fl_Double_Window *dlgAbout=(Fl_Double_Window *)0;
+
+Fl_Group *lblVersion=(Fl_Group *)0;
+
+static void cb_Thanks(Fl_Return_Button*, void*) {
+  dlgAbout->hide ();
+}
+
+Fl_Double_Window* newAboutDialog() {
+  { dlgAbout = new Fl_Double_Window(185, 180);
+    dlgAbout->color((Fl_Color)53);
+    { lblVersion = new Fl_Group(0, 5, 180, 110, "xxx:");
+      lblVersion->box(FL_ENGRAVED_FRAME);
+      lblVersion->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
+      lblVersion->end();
+    } // Fl_Group* lblVersion
+    { Fl_Return_Button* o = new Fl_Return_Button(40, 150, 100, 25, "Thanks");
+      o->callback((Fl_Callback*)cb_Thanks);
+    } // Fl_Return_Button* o
+    { Fl_Group* o = new Fl_Group(0, 115, 180, 30, "w1hkj@@w1hkj.com");
+      o->box(FL_ENGRAVED_FRAME);
+      o->align(Fl_Align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE));
+      o->end();
+    } // Fl_Group* o
+    dlgAbout->set_modal();
+    dlgAbout->end();
+  } // Fl_Double_Window* dlgAbout
+  return dlgAbout;
+}
diff --git a/src/netutils.fl b/src/netutils.fl
new file mode 100644
index 0000000..902b63e
--- /dev/null
+++ b/src/netutils.fl
@@ -0,0 +1,122 @@
+# data file for the Fltk User Interface Designer (fluid)
+version 1.0109 
+header_name {.h} 
+code_name {.cpp}
+Function {winCallsignBrowse()} {} {
+  Fl_Window {} {
+    label {Browse by Callsign}
+    xywh {466 272 304 231} type Double color 52 hide modal
+  } {
+    Fl_Browser brwsCallsign {
+      xywh {0 0 215 230} type Hold when 4 textfont 13
+    }
+    Fl_Button btnCancelCallsignSearch {
+      label Cancel
+      callback cb_btnCancelCallsignSearch
+      xywh {230 35 60 40}
+    }
+    Fl_Button btn_OkCallsignSearch {
+      label OK
+      callback cb_OkCallsignSearch
+      xywh {230 135 60 40}
+    }
+  }
+} 
+
+Function {winNetNbrBrowse()} {open
+} {
+  Fl_Window {} {
+    label {Browse by Net Nbr} open
+    xywh {582 647 300 230} type Double color 52 modal visible
+  } {
+    Fl_Browser brwsNetNbr {
+      xywh {0 0 215 230} type Hold when 4 textfont 4
+    }
+    Fl_Button btnCancelNetNbrSearch {
+      label Cancel
+      callback cb_btnCancelNetNbrSearch
+      xywh {225 45 60 40}
+    }
+    Fl_Button btn_OkNetNbrSearch {
+      label OK
+      callback cb_OkNetNbrSearch
+      xywh {225 120 60 40}
+    }
+  }
+} 
+
+Function {newSearchCallsignDialog()} {} {
+  Fl_Window winSearchCallsignDialog {open
+    xywh {383 185 207 107} type Double hide modal
+  } {
+    Fl_Input sSrchPrefix {
+      label Prefix
+      xywh {40 35 25 25} align 1 textfont 13
+    }
+    Fl_Input sSrchArea {
+      label Area
+      xywh {85 35 25 25} align 1 textfont 13
+    }
+    Fl_Input sSrchSuffix {
+      label Suffix
+      xywh {130 35 40 25} align 5 textfont 13
+    }
+    Fl_Button btnSearchCancel {
+      label Cancel
+      callback cb_btnSearchCancel
+      xywh {20 70 80 25}
+    }
+    Fl_Return_Button btnSearchOK {
+      label Search
+      callback cb_btnSearchOK
+      xywh {105 70 80 25}
+    }
+    Fl_Box {} {
+      label {Enter Full Call / Suffix Only}
+      xywh {0 0 210 20}
+    }
+  }
+} 
+
+Function {newSearchNetNbrDialog()} {} {
+  Fl_Window winSearchNetNbrDialog {open
+    xywh {393 195 207 107} type Double hide modal
+  } {
+    Fl_Input sSrchNetNbr {
+      label {Enter Net Number}
+      xywh {80 30 50 25} align 1 textfont 13
+    }
+    Fl_Button btnSearchNetNbrCancel {
+      label Cancel
+      callback cb_btnSearchNetNbrCancel
+      xywh {20 70 80 25}
+    }
+    Fl_Return_Button btnSearchNetNbrOK {
+      label Search
+      callback cb_btnSearchNetNbrOK
+      xywh {105 70 80 25}
+    }
+  }
+} 
+
+Function {newAboutDialog()} {
+  callback cb_mnuAbout open
+} {
+  Fl_Window dlgAbout {open
+    xywh {363 200 185 180} type Double color 53 modal visible
+  } {
+    Fl_Group lblVersion {
+      label {xxx:} open selected
+      xywh {0 5 180 110} box ENGRAVED_FRAME align 16
+    } {}
+    Fl_Return_Button {} {
+      label Thanks
+      callback {dlgAbout->hide ();}
+      xywh {40 150 100 25}
+    }
+    Fl_Group {} {
+      label {w1hkj@@w1hkj.com}
+      xywh {0 115 180 30} box ENGRAVED_FRAME align 16
+    } {}
+  }
+} 
diff --git a/src/qrzlib.cxx b/src/qrzlib.cxx
new file mode 100644
index 0000000..43f3797
--- /dev/null
+++ b/src/qrzlib.cxx
@@ -0,0 +1,970 @@
+// ====================================================================
+//
+//  qrzlib.cc
+//
+//  Interface library to the QRZ database distributed by AA7BQ
+//
+//  Access to the library functions is possible by C, C++, Tcl/Tk
+//  or other means.  The library functions are "wrapped" for Tcl/Tk
+//  using the software tool SWIG, available at www.swig.org.
+//
+//  Copyright (C) 1999 David Freese
+//
+//  This program is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU General Public License as
+//  published by the Free Software Foundation; either version 2 of
+//  the License, or (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program; if not, write to the Free Software
+//  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+//  Version 2.0
+//    14 June 2000
+//    Author: Dave Freese, W1HKJ
+//  Internet: dfreese at intrepid.net
+//
+// ====================================================================
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#if defined(WIN32) && !defined(__CYGWIN__)
+#else
+# include <unistd.h>
+# include <pwd.h>
+#endif
+
+#include "qrzlib.h"
+
+char QRZdir[256] = "";
+
+char *QRZpath;
+char const *QRZtry[] = {
+#ifdef WIN32
+	"c:/Program Files/QRZ Ham Radio/CALLBK/",
+	"c:/callbk/",
+	"d:/callbk/",
+	"e:/callbk/",
+	"f:/callbk/",
+	"g:/callbk/",
+#else
+	"~/callbk/",
+	"/cdrom/callbk/",
+	"/mnt/cdrom/callbk/",  "/mnt/cdrom0/callbk/",  "/mnt/cdrom1/callbk/",
+	"/media/cdrom/callbk/", "/media/cdrom0/callbk/", "/media/cdrom1/callbk/",
+	"~/callbk/",
+	"/cdrom/callbk/",
+	"/mnt/cdrom/callbk/",  "/mnt/cdrom0/callbk/",  "/mnt/cdrom1/callbk/",
+	"/media/cdrom/callbk/", "/media/cdrom0/callbk/", "/media/cdrom1/callbk/",
+#endif
+	0 };
+
+#ifdef HAVE_EMAIL
+#include "../../qrzemail/QRZemail.cxx"
+bool emailIsOpen = false;
+#endif
+
+FILE *imagefile = NULL;
+
+// filename expand taken from fltk source
+// replicated to exlude need for fltk in the library
+
+#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
+static inline int isdirsep(char c) {return c=='/' || c=='\\';}
+#else
+#define isdirsep(c) ((c)=='/')
+#endif
+
+size_t strlcpy(
+			   char       *dst,	/* O - Destination string */
+			   const char *src,	/* I - Source string */
+			   size_t      size) {	/* I - Size of destination string buffer */
+
+	size_t	srclen;		/* Length of source string */
+	size --;
+	srclen = strlen(src);
+	if (srclen > size) srclen = size;
+	memcpy(dst, src, srclen);
+	dst[srclen] = '\0';
+	return (srclen);
+}
+
+int filename_expand(char *to,int tolen, const char *from) {
+
+	char temp[tolen];
+	strlcpy(temp,from, tolen);
+	char *start = temp;
+	char *end = temp+strlen(temp);
+
+	int ret = 0;
+
+	for (char *a=temp; a<end; ) {	// for each slash component
+		char *e; for (e=a; e<end && !isdirsep(*e); e++); // find next slash
+		const char *value = 0; // this will point at substitute value
+		switch (*a) {
+			case '~':	// a home directory name
+				if (e <= a+1) {	// current user's directory
+					value = getenv("HOME");
+#ifndef WIN32
+				} else {	// another user's directory
+					struct passwd *pwd;
+					char t = *e; *(char *)e = 0;
+					pwd = getpwnam(a+1);
+					*(char *)e = t;
+					if (pwd) value = pwd->pw_dir;
+#endif
+				}
+				break;
+			case '$':		/* an environment variable */
+			{char t = *e; *(char *)e = 0; value = getenv(a+1); *(char *)e = t;}
+				break;
+		}
+		if (value) {
+			// substitutions that start with slash delete everything before them:
+			if (isdirsep(value[0])) start = a;
+#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
+			// also if it starts with "A:"
+			if (value[0] && value[1]==':') start = a;
+#endif
+			int t = strlen(value); if (isdirsep(value[t-1])) t--;
+			if ((end+1-e+t) >= tolen) end += tolen - (end+1-e+t);
+			memmove(a+t, e, end+1-e);
+			end = a+t+(end-e);
+			*end = '\0';
+			memcpy(a, value, t);
+			ret++;
+		} else {
+			a = e+1;
+#if defined(WIN32) || defined(__EMX__) && !defined(__CYGWIN__)
+			if (*e == '\\') {*e = '/'; ret++;} // ha ha!
+#endif
+		}
+	}
+
+	strlcpy(to, start, tolen);
+
+	return ret;
+}
+
+
+char *QRZImageFilename (char *call)
+{
+	static char fname[80], *p, imgcall[12];
+	FILE *f;
+	strcpy(imgcall, call);
+	p = imgcall;
+	while (*p) {*p = tolower (*p); p++; }
+	strcpy (fname, QRZdir);
+	strcat (fname, "images/");
+	strcat (fname, &imgcall[strlen(imgcall)-1]);
+	strcat (fname, "/");
+	strcat (fname, imgcall);
+	while (fname[strlen(fname)-1] == ' ') fname[strlen(fname)-1] = 0;
+	strcat (fname, ".jpg");
+	f = fopen(fname, "r");
+	if (f != NULL) {
+		fclose (f);
+		return fname;
+	}
+	return NULL;
+}
+
+int  checkPath( char *filename )
+{
+	char fname[80];
+	FILE *f;
+	char **pQRZpath = (char**)QRZtry;
+	while (*pQRZpath) {
+		strcpy( fname, *pQRZpath );
+		strcat( fname, filename );
+		strcat( fname, ".dat" );
+		if (fname[0] == '~' || fname[0] == '$') {
+			char f2name[80];
+			filename_expand(f2name, 79, fname);
+			strcpy (fname, f2name);
+		}
+		f = fopen(fname, "r" );
+		if( f != NULL )  {
+			fclose( f );
+			QRZpath = *pQRZpath;
+			if (QRZpath[0] == '~' || QRZpath[0] == '$')
+				filename_expand(QRZdir, 79, QRZpath);
+			else
+				strcpy (QRZdir, QRZpath);
+			return 1;
+		}
+		pQRZpath++;
+	}
+	QRZpath = (char*)QRZtry[0];
+	return 0;
+}
+
+void SetQRZdirectory(char *dir)
+{
+	strcpy(QRZdir, dir);
+	strcat(QRZdir, "/");
+}
+
+bool QRZ::ImageExists() {
+	if (Qimagefname == NULL)
+		return (hasImage = false);
+	imagefile = fopen(Qimagefname, "r");
+	if (imagefile) {
+		fclose (imagefile);
+		return (hasImage = true);
+	}
+	return (hasImage = false);
+}
+
+void QRZ::OpenQRZFiles( char *fname )
+{
+	long fsize;
+	char dfname[64];
+	char idxname[64];
+
+	if( fname[0] == 0 ) {
+		QRZvalid = 0;
+		return;
+	}
+
+	QRZvalid = 1;
+
+	if (*QRZdir == 0)
+		if( checkPath( fname ) == 0 ) {
+			QRZvalid = 0;
+			return;
+		}
+
+	strcpy( dfname, QRZdir );
+	strcpy( idxname, QRZdir );
+
+	strcat( idxname, fname );
+	strcat( idxname, ".idx" );
+	strcat( dfname, fname );
+	strcat( dfname, ".dat" );
+
+	idxfile = fopen( idxname, "r" );
+	if( idxfile == NULL ) {
+		QRZvalid = 0;
+		return;
+	}
+
+	fseek( idxfile, 0, SEEK_END );
+	fsize = ftell( idxfile );
+	rewind( idxfile );
+
+	idxsize = fsize - 48;
+
+	index = (char *) malloc( idxsize );
+
+	if( index == NULL ) {
+		fclose( idxfile );
+		QRZvalid = 0;
+		return;
+	}
+	memset( index, 0, idxsize );
+
+	fread( &idxhdr.dataname, 1, 48, idxfile );
+	fread( index, 1, idxsize, idxfile ) ;
+
+	fflush( stdout );
+
+	fclose( idxfile );
+
+	datafile = fopen( dfname, "r" );
+	if( datafile == NULL ) {
+		free( index );
+		QRZvalid = 0;
+		return;
+	}
+
+	sscanf( idxhdr.bytesperkey, "%d", &datarecsize );
+	if( datarecsize == 0 || datarecsize > 32767 ) {
+		free( index );
+		QRZvalid = 0;
+		return;
+	}
+
+	// allocate sufficient data buffer for file read over key boundary
+
+	data = (char *) malloc( datarecsize + 512 );
+	if( data == NULL ) {
+		free( index );
+		QRZvalid = 0;
+		return;
+	}
+	// fill buffer with new-lines to insure not reading past end of
+	// the buffer
+	memset( data, '\n', datarecsize + 512 );
+
+	sscanf( idxhdr.keylen, "%d", &keylen );
+	sscanf( idxhdr.numkeys, "%ld", &numkeys );
+	top = index + idxsize - keylen;
+
+#ifdef HAVE_EMAIL
+	emailIsOpen = OpenEmailFile ();
+#endif
+}
+
+
+QRZ::QRZ( char *fname )
+{
+	int len = strlen(fname);
+	criteria = fname[ len - 1 ];
+	OpenQRZFiles( fname );
+}
+
+QRZ::QRZ( char *fname, char c )
+{
+	criteria = c;
+	OpenQRZFiles( fname );
+}
+
+
+QRZ::~QRZ()
+{
+	if( index != NULL ) free( index );
+	if( data  != NULL ) free( data );
+	if( datafile != NULL ) fclose( datafile );
+	return;
+}
+
+int QRZ::CallComp( char *s1, char *s2 )
+{
+	static char sa[7], sb[7];
+	strncpy( sb, s2, 6 );
+	strncpy( sa, s1, 6 );
+	sa[6] = 0;
+	sb[6] = 0;
+
+	int stest = strncasecmp( sa + 3, sb + 3, 3 );
+	if( stest < 0 )
+		return -1;
+	if( stest > 0 )
+		return 1;
+	// suffix are equal
+	int atest = strncasecmp( sa + 2, sb + 2, 1 );
+	if( atest < 0 )
+		return -1;
+	if( atest > 0 )
+		return 1;
+	// suffix & call area are equal
+	int ptest = strncasecmp( sa, sb, 2 );
+	if( ptest < 0 )
+		return -1;
+	if( ptest > 0 )
+		return 1;
+	// total match of calls
+	return 0;
+}
+
+char *Composite( char *s )
+{
+	static char newstr[7];
+	int ccount = strlen(s) < 7 ? strlen(s) : 6;
+	memset(newstr, ' ', 6 );
+	newstr[6] = 0;
+	if( isdigit( s[2] ) ) {
+		for( int i = 0; i < ccount; i++ )
+			newstr[i] = s[i];
+	} else {
+		newstr[0] = s[0];
+		newstr[2] = s[1];
+		for( int i = 2; i < ccount; i++ )
+			newstr[i+1] = s[i];
+	}
+	return( newstr );
+}
+
+int QRZ::ReadDataBlock( long p )
+{
+	rewind( datafile );
+
+	if ( p < 0 ) p = 0;
+
+	if( fseek( datafile, p, SEEK_SET ) != 0 ) {
+		return 1;
+	}
+
+	databytesread = fread( data, 1, datarecsize + 512, datafile );
+	dataoffset = p;
+
+	fflush( stdout);
+	return 0;
+}
+
+int QRZ::FindCallsign( char *field )
+{
+	char composite[7],
+	testcall[7];
+	char *endofdata;
+	int  matched = 0, iOffset;
+
+	memset( composite, 0, 6 );
+	memset( testcall, 0, 6 );
+	found = 0;
+	idxptr = index;
+
+	if( strlen( field ) < 3 )  // must be a valid callsign
+		return 0;
+
+	if ( !(isdigit( field[1] ) || isdigit( field[2] ) ) )
+		return 0;
+
+	strcpy( composite, Composite( field ) );
+
+	for( iOffset = 0; iOffset < numkeys; iOffset++, idxptr += keylen )
+		if( CallComp( composite, idxptr) <= 0 )
+			break;
+
+	iOffset--;
+	if (iOffset < 0) iOffset = 0;
+
+	ReadDataBlock( datarecsize * iOffset );
+
+	dfptr = data;
+	endofdata = data + databytesread;
+
+	endofline = strchr( dfptr, '\n' );
+
+	if( idxptr != index ) {
+		endofline = strchr( dfptr, '\n' );
+		if (endofline != NULL )
+			dfptr = endofline + 1;
+	}
+
+	found = 0;
+
+	while ( !found && (dfptr < endofdata ) ) {
+		memcpy( testcall, dfptr, 6 );
+		if( (matched = CallComp( composite, Composite(testcall) ) ) <= 0 )
+			found = 1;
+		else {
+			endofline = strchr( dfptr, '\n' );
+			dfptr = endofline + 1;
+		}
+	}
+
+	if ( matched == 0 ) {
+		endofline = strchr( dfptr, '\n' );
+		*endofline = 0;
+		strcpy( recbuffer, dfptr );
+		// check for old call referencing new call
+		if (strlen(recbuffer) < 15 ) {
+			dfptr = strchr( dfptr, ',' ) + 1;
+			strcpy( recbuffer, dfptr );
+			//      Qcall = recbuffer;
+			found = -1;
+		}
+		else {
+			found = 1;
+			dfptr = endofline + 1;  // point to next record
+		}
+		return (found);
+	}
+	found = 0;
+	return 0;
+}
+
+int QRZ::nextrec()
+{
+	if( dfptr > data + datarecsize ) {
+		if( ReadDataBlock( dataoffset + (dfptr - data) ) != 0)
+			return 0;
+		dfptr = data;
+	}
+
+	endofline = strchr( dfptr, '\n' );
+	*endofline = 0;
+	strcpy( recbuffer, dfptr );
+	dfptr = endofline + 1;
+	if (strlen(recbuffer) < 15 ) {
+		nextrec();
+	}
+	return 1;
+}
+
+int QRZ::NextRecord()
+{
+	if( nextrec() == 1 );
+	return( ReadRec() );
+	return 0;
+}
+
+int QRZ::FindName( char *field )
+{
+	char *endofdata;
+	int  matched = 0, iOffset;
+	char *Lname, *Fname;
+	char sFname[17];
+	char sLname[17];
+	char sIdxName[33];
+	char *cptr;
+
+	memset( sFname, 0, 17 );
+	memset( sLname, 0, 17 );
+	memset( sIdxName, 0, 33 );
+
+	if ( (cptr = strchr( field, ',' ) ) != NULL ) {
+		strncpy( sLname, field, cptr - field );
+		strcpy( sFname, cptr + 1 );
+	} else
+		strcpy( sLname, field );
+
+	strcpy( sIdxName, sLname );
+	if( strlen( sFname ) > 0 ) {
+		strcat( sIdxName, " " );
+		strcat( sIdxName, sFname );
+	}
+
+	found = 0;
+	idxptr = index;
+
+	for( iOffset = 0; iOffset < numkeys; iOffset++, idxptr += keylen )
+		if( strncasecmp( sIdxName, idxptr, keylen ) <= 0 )
+			break;
+
+	iOffset--;
+	if (iOffset < 0) iOffset = 0;
+
+	ReadDataBlock( datarecsize * iOffset );
+
+	dfptr = data;
+	endofdata = data + databytesread;
+
+	if( idxptr != index ) {
+		endofline = strchr( dfptr, '\n' );
+		if (endofline != NULL )
+			dfptr = endofline + 1;
+	}
+
+	found = 0;
+	while ( !found && (dfptr < endofdata ) ) {
+		endofline = strchr( dfptr, '\n' );
+		if( endofline == NULL || endofline > endofdata )
+			break;
+		if( endofline - dfptr > 14 ) {            // valid racord
+			Lname = strchr( dfptr, ',' ) + 1;       // locate Lname element
+			Fname = strchr( Lname, ',' ) + 1;       // locate Fname element
+			if( *Fname == ',' )
+				Fname++;
+			else
+				Fname = strchr( Fname, ',' ) + 1;
+			if( (matched = strncasecmp( sLname, Lname, strlen(sLname) ) ) == 0 ) {
+				if( sFname[0] == 0 )
+					found = 1;
+				else
+					if( ( matched = strncasecmp( sFname, Fname, strlen(sFname) ) ) <= 0 )
+						found = 1;
+			}
+		}
+		if (!found && (dfptr < endofdata ) )
+			dfptr = strchr( dfptr, '\n' ) + 1;    // move to next record
+	}
+
+	if ( matched == 0 ) {
+		endofline = strchr( dfptr, '\n' );
+		*endofline = 0;
+		strcpy( recbuffer, dfptr );
+		found = 1;
+		dfptr = endofline + 1;  // point to next record
+		return (found);
+	}
+	found = 0;
+	return 0;
+}
+
+int QRZ::CompState( char *field, char *state, char *city )
+{
+	int compsize = strlen(field+2),
+	chk;
+	if (compsize > keylen) compsize = keylen;
+
+	if(strlen( field ) == 2)
+		return ( strncasecmp( field, state, 2 ) );
+
+	if( (chk = strncasecmp( field, state, 2 ) ) < 0 )
+		return -1;
+	if( chk > 0 )
+		return 1;
+	chk = strncasecmp( field + 2, city, compsize);
+	if (chk < 0)
+		return -1;
+	if (chk > 0)
+		return 1;
+	return 0;
+}
+
+int QRZ::FindState( char *field )
+{
+	char *endofdata;
+	int  matched = 0, iOffset;
+	char *state;
+	char *city;
+	int  compsize = strlen(field);
+
+	if (compsize > keylen) compsize = keylen;
+
+	found = 0;
+	idxptr = index;
+
+	for( iOffset = 0; iOffset < numkeys; iOffset++, idxptr += keylen )
+		if( strncasecmp( field, idxptr, compsize ) <= 0 )
+			break;
+
+	iOffset--;
+	if (iOffset < 0) iOffset = 0;
+
+	ReadDataBlock( datarecsize * iOffset );
+
+	dfptr = data;
+	endofdata = data + datarecsize;
+
+	if( idxptr != index ) {
+		endofline = strchr( dfptr, '\n' );
+		if (endofline != NULL )
+			dfptr = endofline + 1;
+	}
+
+	found = 0;
+	while ( !found && (dfptr < endofdata ) ) {
+		endofline = strchr( dfptr, '\n' );
+		if( endofline - dfptr > 14 ) {            // valid record
+
+			city = dfptr;
+			for( int i = 0; i < 9; i++ )             // move to city element
+				city = strchr( city, ',' ) + 1;
+			state = strchr( city, ',' ) + 1;         // move to state element
+			matched = CompState( field, state, city );
+
+			if( matched == 0)
+				found = 1;
+			else {
+				endofline = strchr( dfptr, '\n' );  // no match, move to next
+				dfptr = endofline + 1;
+			}
+		} else {
+			endofline = strchr( dfptr, '\n' );    // invalid record, move to next
+			dfptr = endofline + 1;
+		}
+	}
+
+	if ( matched == 0 ) {
+		endofline = strchr( dfptr, '\n' );
+		*endofline = 0;
+		strcpy( recbuffer, dfptr );
+		found = 1;
+		dfptr = endofline + 1;  // point to next record
+		return (found);
+	}
+	found = 0;
+	return 0;
+}
+
+int QRZ::FindZip( char *field )
+{
+	char *endofdata;
+	int  matched = 0, iOffset;
+	char *zip;
+
+	found = 0;
+	idxptr = index;
+
+	for( iOffset = 0; iOffset < numkeys; iOffset++, idxptr += keylen )
+		if( strncasecmp( field, idxptr, 5 ) <= 0 )
+			break;
+
+	iOffset--;
+	if (iOffset < 0) iOffset = 0;
+
+	ReadDataBlock( datarecsize * iOffset );
+
+	dfptr = data;
+	endofdata = data + datarecsize;
+
+	if( idxptr != index ) {
+		endofline = strchr( dfptr, '\n' );
+		if (endofline != NULL )
+			dfptr = endofline + 1;
+	}
+
+	found = 0;
+	while ( !found && (dfptr < endofdata ) ) {
+		endofline = strchr( dfptr, '\n' );
+
+		if( endofline - dfptr > 14 ) {            // valid record
+			zip = dfptr;
+			for( int i = 0; i < 11; i++ )             // move to Zip element
+				zip = strchr( zip, ',' ) + 1;
+			if( (matched = strncasecmp( field, zip, 5 ) ) <= 0 )
+				found = 1;
+			else {
+				endofline = strchr( dfptr, '\n' );  // no match, move to next
+				dfptr = endofline + 1;
+			}
+		} else {
+			endofline = strchr( dfptr, '\n' );    // invalid record, move to next
+			dfptr = endofline + 1;
+		}
+	}
+
+	if ( matched == 0 ) {
+		endofline = strchr( dfptr, '\n' );
+		*endofline = 0;
+		strcpy( recbuffer, dfptr );
+		found = 1;
+		dfptr = endofline + 1;  // point to next record
+		return (found);
+	}
+	found = 0;
+	return 0;
+}
+
+int QRZ::FindRecord( char *field )
+{
+	if (QRZvalid == 0 ) return 0;
+
+	switch (criteria) {
+		case 'c' :
+			FindCallsign( field );
+			break;
+		case 'n' :
+			FindName( field );
+			break;
+		case 's' :
+			FindState( field );
+			break;
+		case 'z' :
+			FindZip( field );
+	}
+	return( ReadRec() );
+}
+
+static char *empty = (char*)"";
+
+
+int QRZ::ReadRec()
+{
+	char *comma;
+
+	if( found == 1 ) {
+		Qcall = recbuffer;
+		comma = strchr( Qcall, ',' );
+		*comma = 0;
+		Qlname = comma + 1;
+		comma = strchr( Qlname, ',' );
+		*comma = 0;
+		Qfname = comma + 1;
+		comma = strchr( Qfname, ',' );
+		Qfname = comma + 1;      // skip JR field
+		comma = strchr( Qfname, ',' );
+		*comma = 0;
+		Qdob = comma + 1;
+		comma = strchr( Qdob, ',' );
+		Qdob = comma + 1;        // skip MI field
+		comma = strchr( Qdob, ',' );
+		*comma = 0;
+		Qefdate = comma + 1;
+		comma = strchr( Qefdate, ',' );
+		*comma = 0;
+		Qexpdate = comma + 1;
+		comma = strchr( Qexpdate, ',' );
+		*comma = 0;
+		Qmail_str = comma + 1;
+		comma = strchr( Qmail_str, ',' );
+		*comma = 0;
+		Qmail_city = comma + 1;
+		comma = strchr( Qmail_city, ',' );
+		*comma = 0;
+		Qmail_st = comma + 1;
+		comma = strchr( Qmail_st, ',' );
+		*comma = 0;
+		Qmail_zip = comma + 1;
+		comma = strchr( Qmail_zip, ',' );
+		*comma = 0;
+		Qopclass = comma + 1;
+		comma = strchr( Qopclass, ',' );
+		*comma = 0;
+		Qp_call = comma + 1;
+		comma = strchr( Qp_call, ',' );
+		*comma = 0;
+		Qp_class = comma + 1;
+		Qp_class[1] = 0;
+		Qimagefname = QRZImageFilename (GetCall());
+		return( 1 );
+	} else {
+		Qcall = empty;
+		Qlname = empty;
+		Qfname = empty;
+		Qdob = empty;
+		Qefdate = empty;
+		Qexpdate = empty;
+		Qmail_str = empty;
+		Qmail_city = empty;
+		Qmail_st = empty;
+		Qmail_zip = empty;
+		Qopclass = empty;
+		Qp_call = empty;
+		Qp_class = empty;
+		Qimagefname = NULL;
+		return( 0 );
+	}
+}
+
+int QRZ::GetCount( char *unknown )
+{
+	int matched, cnt = 0;
+	char temp[40];
+
+	if( FindRecord( unknown ) != 1 )
+		return(0);
+	matched = 0;
+	while (matched == 0) {
+		cnt++;
+		NextRecord();
+		switch (criteria) {
+			case 'c' :
+				matched = 1;
+				break;
+			case 'n' :
+				if( strchr( unknown, ',' ) == 0 )
+					matched = strcasecmp( unknown, GetLname() );
+				else {
+					strcpy( temp, GetLname() );
+					strcat( temp, "," );
+					strcat( temp, GetFname() );
+					matched = strncasecmp( unknown, temp, strlen(unknown) );
+				}
+				break;
+			case 'z' :
+				matched = strncmp( unknown, GetZIP(), 5 );
+				break;
+			case 's' :
+				matched = CompState( unknown, GetState(), GetCity() );
+				break;
+			default  :
+				matched = 1;
+		}
+	}
+	return cnt;
+}
+
+char * QRZ::GetCall()
+{
+	static char call[15];
+	char *p = call;
+	strcpy (call, Qcall);
+	while (*p) {
+		if (*p == ' ') strcpy (p, p+1);
+		if (*p != ' ') p++;
+	}
+	return( call );
+};
+
+char * QRZ::GetLname()
+{
+	return( Qlname );
+};
+
+char * QRZ::GetFname()
+{
+	return( Qfname );
+};
+
+char * QRZ::GetDOB()
+{
+	return( Qdob );
+};
+
+char * QRZ::GetEFdate()
+{
+	return( Qefdate );
+};
+
+char * QRZ::GetEXPdate()
+{
+	return( Qexpdate );
+};
+
+char * QRZ::GetStreet()
+{
+	return( Qmail_str );
+};
+
+char * QRZ::GetCity()
+{
+	return( Qmail_city );
+};
+
+char * QRZ::GetState()
+{
+	return( Qmail_st );
+};
+
+char * QRZ::GetZIP()
+{
+	return( Qmail_zip );
+};
+
+char * QRZ::GetOPclass()
+{
+	return( Qopclass );
+};
+
+char * QRZ::GetPriorCall()
+{
+	return( Qp_call );
+};
+
+char * QRZ::GetPriorClass()
+{
+	return( Qp_class );
+};
+
+int QRZ::getQRZvalid()
+{
+	return( QRZvalid );
+}
+
+char * QRZ::GetImageFileName ()
+{
+	return (Qimagefname);
+}
+
+char * QRZ::CSV_Record()
+{
+	static char info[256];
+	memset( info, 0, 256 );
+	sprintf( info, "%s,%s,%s,%s,%s,%s,%s,%s,%s",
+			GetCall(), Qopclass, Qefdate,
+			Qlname, Qfname, Qmail_str, Qmail_city, Qmail_st, Qmail_zip );
+	return info;
+}
+
+char *QRZ::Fmt_Record()
+{
+	static char info[256];
+	memset( info, 0, 256 );
+	sprintf( info, "%s   %s : %s\n%s %s\n%s\n%s, %s  %s\n%s\n",
+			GetCall(), Qopclass, Qefdate,
+			Qfname, Qlname,
+			Qmail_str,
+			Qmail_city, Qmail_st, Qmail_zip,
+#ifdef HAVE_EMAIL
+			szEmail(GetCall())
+#else
+			" "
+#endif
+			);
+	return info;
+}
+
+
diff --git a/src/timeops.cxx b/src/timeops.cxx
new file mode 100644
index 0000000..8ae2fb9
--- /dev/null
+++ b/src/timeops.cxx
@@ -0,0 +1,204 @@
+// ----------------------------------------------------------------------------
+//	timeops.cxx
+//
+// Copyright (C) 2007-2013
+//		David Freese, W1HKJ
+//		Stelios Bounanos, M0GLD
+//
+// This file is part of flnet.
+//
+// flnet 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 3 of the License, or
+// (at your option) any later version.
+//
+// flnet 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "timeops.h"
+#ifdef __MINGW32__
+#  include "compat.h"
+#endif
+
+#if !HAVE_CLOCK_GETTIME
+#  ifdef __APPLE__
+#    include <mach/mach_time.h>
+#  endif
+#  if TIME_WITH_SYS_TIME
+#    include <sys/time.h>
+#  endif
+#  include <errno.h>
+int clock_gettime(clockid_t clock_id, struct timespec* tp)
+{
+	if (clock_id == CLOCK_REALTIME) {
+		struct timeval t;
+		if (gettimeofday(&t, NULL) != 0)
+			return -1;
+		tp->tv_sec = t.tv_sec;
+		tp->tv_nsec = t.tv_usec * 1000;
+	}
+	else if (clock_id == CLOCK_MONOTONIC) {
+#if defined(__WOE32__)
+		int32_t msec = GetTickCount();
+		tp->tv_sec = msec / 1000;
+		tp->tv_nsec = (msec % 1000) * 1000000;
+#elif defined(__APPLE__)
+		static mach_timebase_info_data_t info = { 0, 0 };
+		if (info.denom == 0)
+			mach_timebase_info(&info);
+		uint64_t t = mach_absolute_time() * info.numer / info.denom;
+		tp->tv_sec = t / 1000000000;
+		tp->tv_nsec = t % 1000000000;
+#endif
+	}
+	else {
+		errno = EINVAL;
+		return -1;
+	}
+
+	return 0;
+}
+#endif // !HAVE_CLOCK_GETTIME
+
+struct timespec operator+(const struct timespec &t0, const double &t)
+{
+	struct timespec r;
+	r.tv_sec = t0.tv_sec + static_cast<time_t>(t);
+	r.tv_nsec = t0.tv_nsec + static_cast<long>((t - static_cast<time_t>(t)) * 1e9);
+	if (r.tv_nsec > 1000000000) {
+		r.tv_nsec -= 1000000000;
+		r.tv_sec++;
+	}
+	return r;
+}
+
+struct timespec operator-(const struct timespec &t0, const struct timespec &t1)
+{
+	struct timespec r = t0;
+
+	if (r.tv_nsec < t1.tv_nsec) {
+		--r.tv_sec;
+		r.tv_nsec += 1000000000L;
+	}
+	r.tv_sec -= t1.tv_sec;
+	r.tv_nsec -= t1.tv_nsec;
+
+	return r;
+}
+
+struct timespec& operator-=(struct timespec &t0, const struct timespec &t1)
+{
+	if (t0.tv_nsec < t1.tv_nsec) {
+		--t0.tv_sec;
+		t0.tv_nsec += 1000000000L;
+	}
+	t0.tv_sec -= t1.tv_sec;
+	t0.tv_nsec -= t1.tv_nsec;
+
+	return t0;
+}
+
+bool operator>(const struct timespec &t0, const struct timespec &t1)
+{
+	if (t0.tv_sec == t1.tv_sec)
+		return t0.tv_nsec > t1.tv_nsec;
+	else if (t0.tv_sec > t1.tv_sec)
+		return true;
+	else
+		return false;
+}
+
+bool operator==(const struct timespec &t0, const struct timespec &t1)
+{
+	return t0.tv_sec == t1.tv_sec && t0.tv_nsec == t1.tv_nsec;
+}
+
+
+struct timeval operator+(const struct timeval &t0, const double &t)
+{
+	struct timeval r;
+	r.tv_sec = t0.tv_sec + static_cast<time_t>(t);
+	r.tv_usec = t0.tv_usec + static_cast<suseconds_t>((t - static_cast<time_t>(t)) * 1e9);
+	if (r.tv_usec > 1000000) {
+		r.tv_usec -= 1000000;
+		r.tv_sec++;
+	}
+	return r;
+}
+
+struct timeval operator-(const struct timeval &t0, const struct timeval &t1)
+{
+	struct timeval r = t0;
+
+	if (r.tv_usec < t1.tv_usec) {
+		--r.tv_sec;
+		r.tv_usec += 1000000;
+	}
+	r.tv_sec -= t1.tv_sec;
+	r.tv_usec -= t1.tv_usec;
+
+	return r;
+}
+
+struct timeval& operator-=(struct timeval &t0, const struct timeval &t1)
+{
+	if (t0.tv_usec < t1.tv_usec) {
+		--t0.tv_sec;
+		t0.tv_usec += 1000000L;
+	}
+	t0.tv_sec -= t1.tv_sec;
+	t0.tv_usec -= t1.tv_usec;
+
+	return t0;
+}
+
+bool operator>(const struct timeval &t0, const struct timeval &t1)
+{
+	if (t0.tv_sec == t1.tv_sec)
+		return t0.tv_usec > t1.tv_usec;
+	else if (t0.tv_sec > t1.tv_sec)
+		return true;
+	else
+		return false;
+}
+
+bool operator==(const struct timeval &t0, const struct timeval &t1)
+{
+	return t0.tv_sec == t1.tv_sec && t0.tv_usec == t1.tv_usec;
+}
+
+
+#ifndef HAVE_GMTIME_R
+#include "threads.h"
+
+static pthread_mutex_t gmtime_r_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+struct tm *gmtime_r(const time_t *_Time, struct tm *_Tm)
+{
+	pthread_mutex_lock (&gmtime_r_mutex);
+	struct tm *p = gmtime(_Time);
+	if (p && _Tm) memcpy (_Tm, p, sizeof (struct tm));
+	pthread_mutex_unlock (&gmtime_r_mutex);
+	return p;
+}
+
+static pthread_mutex_t gmtime_local_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+struct tm *localtime_r(const time_t *_Time,struct tm *_Tm)
+{
+	pthread_mutex_lock (&gmtime_local_mutex);
+	struct tm *p = localtime(_Time);
+	if (p && _Tm) memcpy (_Tm, p, sizeof (struct tm));
+	pthread_mutex_unlock (&gmtime_local_mutex);
+	return p;
+}
+
+#endif
diff --git a/src/xml_io.cxx b/src/xml_io.cxx
new file mode 100644
index 0000000..5b6ea3d
--- /dev/null
+++ b/src/xml_io.cxx
@@ -0,0 +1,444 @@
+//======================================================================
+// xml_io.cxx
+//
+// Authors:
+//
+// Copyright (C) 2012, Dave Freese, W1HKJ
+// Copyright (C) 2014, Robert Stiles, KK5VD
+//
+// This file is part of FLNET.
+//
+// This 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 3 of the License, or
+// (at your option) any later version.
+//
+// This software 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, see <http://www.gnu.org/licenses/>.
+//
+// xmlrpc interface to fldigi
+//
+// fetches current list of modem types from fldigi
+// fetches current modem in use in fldigi
+// sets fldigi modem-by-name when required
+//
+//======================================================================
+
+#include <stdio.h>
+
+#include <cstdlib>
+#include <string>
+#include <vector>
+#include <queue>
+
+#include <iostream>
+#include <errno.h>
+
+#include "XmlRpcClient.h"
+#include "XmlRpcSocket.h"
+#include "XmlRpcException.h"
+#include "XmlRpcValue.h"
+#include "XmlRpc.h"
+#include "xml_io.h"
+#include "threads.h"
+
+using namespace std;
+using XmlRpc::XmlRpcValue;
+
+#define DEFAULT_XMLRPC_TIMEOUT 6.0
+
+double xmlrpc_timeout = DEFAULT_XMLRPC_TIMEOUT;
+
+// these are set only
+static const char* fldigi_set_callsign  = "log.set_call";
+static const char* fldigi_set_name      = "log.set_name";
+static const char* fldigi_get_callsign  = "log.get_call";
+static const char* fldigi_get_name      = "log.get_name";
+static const char* fldigi_get_qth       = "log.get_qth";
+static const char* fldigi_get_state     = "log.get_state";
+static const char* fldigi_online_xmlrpc = "fldigi.name";
+
+static XmlRpc::XmlRpcClient* client;
+
+//#define XMLRPC_UPDATE_INTERVAL  250
+#define XMLRPC_UPDATE_INTERVAL  500
+#define XMLRPC_UPDATE_AFTER_WRITE 1000
+#define XMLRPC_RETRY_INTERVAL 2000
+
+extern int errno;
+
+#define LOG_ERROR printf
+#define LOG_DEBUG printf
+#define LOG_INFO  printf
+
+#define DEFAULT_XMLRPC_IP_ADDRESS "127.0.0.1"
+#define DEFAULT_XMLRPC_PORT_NO "7362"
+
+static std::string xmlrpc_ip_address = DEFAULT_XMLRPC_IP_ADDRESS;
+static std::string xmlrpc_port_no    = DEFAULT_XMLRPC_PORT_NO;
+
+pthread_t *xmlrpc_thread = 0;
+pthread_mutex_t mutex_xmlrpc  = PTHREAD_MUTEX_INITIALIZER;
+
+int  xmlrpc_errno     = 0;
+bool xmlrpc_running   = false;
+bool xmlrpc_kill_flag = false;
+bool fldigi_online    = false;
+
+bool numbers_and_dots_only(char *str, int expected_argc);
+void * xmlrpc_loop(void *d);
+
+//=====================================================================
+// socket ops
+//=====================================================================
+int update_interval = XMLRPC_UPDATE_INTERVAL;
+
+string xmlcall = "";
+
+/*************************************************************
+ *
+ *************************************************************/
+void MilliSleep(long msecs)
+{
+#ifndef __WIN32__
+	struct timespec tv;
+	tv.tv_sec = msecs / 1000;
+	tv.tv_nsec = (msecs - tv.tv_sec * 1000) * 1000000L;
+	nanosleep(&tv, NULL);
+#else
+	Sleep(msecs);
+#endif
+
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+void set_xmlrpc_port_number(char *port)
+{
+	if(numbers_and_dots_only(port, 1)) {
+		xmlrpc_port_no.assign(port);
+		LOG_INFO("XMLRPC Port assignment:%s\n", port);
+	}
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+void set_xmlrpc_ip_address(char *addr)
+{
+	if(numbers_and_dots_only(addr, 4)) {
+		xmlrpc_ip_address.assign(addr);
+		LOG_INFO("XMLRPC Address assignment:%s\n", addr);
+	}
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+bool numbers_and_dots_only(char *str, int expected_argc)
+{
+	int f = 0, s = 0, t = 0, fo = 0;
+	int argc = 0;
+
+	if(str == (char *)0) return false;
+	if(*str == (char) 0) return false;
+
+	argc = sscanf((const char *)str, "%d.%d.%d.%d", &f, &s, &t, &fo);
+
+	if(argc == expected_argc) return true;
+
+	return false;
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+static inline void execute(const char* name, const XmlRpcValue& param, XmlRpcValue& result)
+{
+	if (client) {
+		if (!client->execute(name, param, result, xmlrpc_timeout)) {
+			xmlrpc_errno = errno;
+
+			if(client->isFault())
+				LOG_DEBUG("Server fault response!\n");
+
+			throw XmlRpc::XmlRpcException(name);
+		}
+	}
+	xmlrpc_errno = errno;
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+void set_xmlrpc_timeout(double value)
+{
+	pthread_mutex_lock(&mutex_xmlrpc);
+	if(value < DEFAULT_XMLRPC_TIMEOUT) return;
+	xmlrpc_timeout = value;
+	pthread_mutex_unlock(&mutex_xmlrpc);
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+void set_xmlrpc_timeout_default(void)
+{
+	xmlrpc_timeout = DEFAULT_XMLRPC_TIMEOUT;
+}
+
+
+/*************************************************************
+ *
+ *************************************************************/
+void send_callsign(std::string data)
+{
+	pthread_mutex_lock(&mutex_xmlrpc);
+	try {
+		XmlRpcValue call(data), res;
+		execute(fldigi_set_callsign, call, res);
+	} catch (const XmlRpc::XmlRpcException& e) {
+		LOG_ERROR("%s xmlrpc_errno = %d\n", e.getMessage().c_str(), xmlrpc_errno);
+	}
+	update_interval = XMLRPC_UPDATE_AFTER_WRITE;
+	pthread_mutex_unlock(&mutex_xmlrpc);
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+void send_name(std::string data)
+{
+	pthread_mutex_lock(&mutex_xmlrpc);
+	try {
+		XmlRpcValue call(data), res;
+		execute(fldigi_set_name, call, res);
+	} catch (const XmlRpc::XmlRpcException& e) {
+		LOG_ERROR("%s xmlrpc_errno = %d\n", e.getMessage().c_str(), xmlrpc_errno);
+	}
+	update_interval = XMLRPC_UPDATE_AFTER_WRITE;
+	pthread_mutex_unlock(&mutex_xmlrpc);
+}
+
+/*************************************************************
+ * Returns comma delimited data.
+ *************************************************************/
+std::string get_callsign(void)
+{
+	XmlRpcValue status;
+	XmlRpcValue query;
+	static string response;
+
+	pthread_mutex_lock(&mutex_xmlrpc);
+	try {
+		execute(fldigi_get_callsign, query, status);
+		string resp = status;
+		response = resp;
+	} catch (const XmlRpc::XmlRpcException& e) {
+		LOG_ERROR("%s xmlrpc_errno = %d\n", e.getMessage().c_str(), xmlrpc_errno);
+	}
+	pthread_mutex_unlock(&mutex_xmlrpc);
+
+	return response;
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+std::string get_name(void)
+{
+	XmlRpcValue status;
+	XmlRpcValue query;
+	static string response;
+
+	pthread_mutex_lock(&mutex_xmlrpc);
+	try {
+		execute(fldigi_get_name, query, status);
+		string resp = status;
+		response = resp;
+	} catch (const XmlRpc::XmlRpcException& e) {
+		LOG_ERROR("%s xmlrpc_errno = %d\n", e.getMessage().c_str(), xmlrpc_errno);
+	}
+	pthread_mutex_unlock(&mutex_xmlrpc);
+
+	return response;
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+std::string get_qth(void)
+{
+	XmlRpcValue status;
+	XmlRpcValue query;
+	static string response;
+
+	pthread_mutex_lock(&mutex_xmlrpc);
+	try {
+		execute(fldigi_get_qth, query, status);
+		string resp = status;
+		response = resp;
+	} catch (const XmlRpc::XmlRpcException& e) {
+		LOG_ERROR("%s xmlrpc_errno = %d\n", e.getMessage().c_str(), xmlrpc_errno);
+	}
+	pthread_mutex_unlock(&mutex_xmlrpc);
+
+	return response;
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+std::string get_state(void)
+{
+	XmlRpcValue status;
+	XmlRpcValue query;
+	static string response;
+
+	pthread_mutex_lock(&mutex_xmlrpc);
+	try {
+		execute(fldigi_get_state, query, status);
+		string resp = status;
+		response = resp;
+	} catch (const XmlRpc::XmlRpcException& e) {
+		LOG_ERROR("%s xmlrpc_errno = %d\n", e.getMessage().c_str(), xmlrpc_errno);
+	}
+	pthread_mutex_unlock(&mutex_xmlrpc);
+
+	return response;
+}
+
+/*************************************************************
+ * Return emply string if offline
+ * Contains "T" if online.
+ *************************************************************/
+std::string fldigi_online_check(void)
+{
+	XmlRpcValue status;
+	XmlRpcValue query;
+	static string response;
+
+	pthread_mutex_lock(&mutex_xmlrpc);
+	try {
+		execute(fldigi_online_xmlrpc, query, status);
+		string resp = status;
+		response = resp;
+	} catch (const XmlRpc::XmlRpcException& e) {
+		LOG_ERROR("%s xmlrpc_errno = %d\n", e.getMessage().c_str(), xmlrpc_errno);
+		response.clear();
+	}
+	pthread_mutex_unlock(&mutex_xmlrpc);
+
+	return response;
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+void close_xmlrpc()
+{
+	void *vPtr = (void *)0;
+
+	xmlrpc_kill_flag = true;
+	pthread_join(*xmlrpc_thread, &vPtr);
+
+	pthread_mutex_lock(&mutex_xmlrpc);
+	delete client;
+	client = NULL;
+	pthread_mutex_unlock(&mutex_xmlrpc);
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+void open_xmlrpc(void)
+{
+	fldigi_online = false;
+	xmlrpc_thread = new pthread_t;
+	if (pthread_create(xmlrpc_thread, NULL, xmlrpc_loop, NULL)) {
+		perror("pthread_create");
+		return;
+	}
+
+	pthread_mutex_lock(&mutex_xmlrpc);
+
+	int server_port = atoi(xmlrpc_port_no.c_str());
+
+	client = new XmlRpc::XmlRpcClient( xmlrpc_ip_address.c_str(), server_port );
+
+	pthread_mutex_unlock(&mutex_xmlrpc);
+}
+
+
+/*************************************************************
+ * dos loop
+ *************************************************************/
+void * xmlrpc_loop(void *d)
+{
+	fldigi_online = false;
+	std::string data = "";
+	xmlrpc_running = true;
+	xmlrpc_kill_flag = false;
+
+	while(!xmlrpc_kill_flag) {
+
+		try {
+			data = fldigi_online_check();
+		} catch (const XmlRpc::XmlRpcException& e) {
+			LOG_ERROR("%s xmlrpc_errno = %d\n", e.getMessage().c_str(), xmlrpc_errno);
+			fldigi_online = false;
+		}
+
+		MilliSleep(update_interval);
+
+		pthread_mutex_lock(&mutex_xmlrpc);
+
+		if(data.empty()) {
+			fldigi_online = false;
+		} else if(data[0] == 'F' || data[0] == 'f') {
+			fldigi_online = true;
+		}
+
+		if (update_interval != XMLRPC_UPDATE_INTERVAL)
+			update_interval = XMLRPC_UPDATE_INTERVAL;
+		pthread_mutex_unlock(&mutex_xmlrpc);
+	}
+		
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+void update_fldigi_callsign(std::string szFirstName, std::string szCallSign)
+{
+	if(szCallSign.empty() || !fldigi_online) return;
+
+	send_callsign(szCallSign);
+	send_name(szFirstName);
+}
+
+/*************************************************************
+ *
+ *************************************************************/
+struct callsign_data *update_flnet_calldata(void)
+{
+	if(!fldigi_online) return (CALLSIGN_DATA *)0;
+
+	CALLSIGN_DATA *data = (CALLSIGN_DATA *)0;
+	data = (CALLSIGN_DATA *) new CALLSIGN_DATA;
+
+	if(data) {
+		data->name.assign(get_name());
+		data->callsign.assign(get_callsign());
+		data->qth.assign(get_qth());
+		data->state.assign(get_state());
+	}
+
+	return data;
+}
diff --git a/src/xmlrpcpp/XmlRpc.h b/src/xmlrpcpp/XmlRpc.h
new file mode 100644
index 0000000..6cb5d1b
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpc.h
@@ -0,0 +1,104 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPC_H_
+#define _XMLRPC_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+
+#include <string>
+
+#include "XmlRpcClient.h"
+#include "XmlRpcException.h"
+#include "XmlRpcServer.h"
+#include "XmlRpcServerMethod.h"
+#include "XmlRpcValue.h"
+#include "XmlRpcUtil.h"
+
+namespace XmlRpc {
+
+
+  //! An interface allowing custom handling of error message reporting.
+  class XmlRpcErrorHandler {
+  public:
+  
+    XmlRpcErrorHandler() {}
+    ~XmlRpcErrorHandler() {}
+    
+    //! Returns a pointer to the currently installed error handling object.
+    static XmlRpcErrorHandler* getErrorHandler() 
+    { return _errorHandler; }
+
+    //! Specifies the error handler.
+    static void setErrorHandler(XmlRpcErrorHandler* eh)
+    { _errorHandler = eh; }
+
+    //! Report an error. Custom error handlers should define this method.
+    virtual void error(const char* msg) = 0;
+
+  protected:
+    static XmlRpcErrorHandler* _errorHandler;
+  };
+
+  //! An interface allowing custom handling of informational message reporting.
+  class XmlRpcLogHandler {
+  public:
+    //! Returns a pointer to the currently installed message reporting object.
+    static XmlRpcLogHandler* getLogHandler() 
+    { return _logHandler; }
+
+    //! Specifies the message handler.
+    static void setLogHandler(XmlRpcLogHandler* lh)
+    { _logHandler = lh; }
+
+    //! Returns the level of verbosity of informational messages. 0 is no output, 5 is very verbose.
+    static int getVerbosity() 
+    { return _verbosity; }
+
+    //! Specify the level of verbosity of informational messages. 0 is no output, 5 is very verbose.
+    static void setVerbosity(int v) 
+    { _verbosity = v; }
+
+    //! Output a message. Custom error handlers should define this method.
+    virtual void log(int level, const char* msg) = 0;
+
+  protected:
+    static XmlRpcLogHandler* _logHandler;
+    static int _verbosity;
+  };
+
+  //! Returns log message verbosity. This is short for XmlRpcLogHandler::getVerbosity()
+  int getVerbosity();
+  //! Sets log message verbosity. This is short for XmlRpcLogHandler::setVerbosity(level)
+  void setVerbosity(int level);
+
+
+  //! Version identifier
+  extern const char XMLRPC_VERSION[];
+
+} // namespace XmlRpc
+
+#endif // _XMLRPC_H_
diff --git a/src/xmlrpcpp/XmlRpcClient.cpp b/src/xmlrpcpp/XmlRpcClient.cpp
new file mode 100644
index 0000000..8aa1a1a
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcClient.cpp
@@ -0,0 +1,552 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "XmlRpcClient.h"
+
+#include "XmlRpcSocket.h"
+#include "XmlRpc.h"
+#include "util.h"
+
+#include "base64.h"   // For HTTP authentication encoding
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+#include <string>
+
+using namespace XmlRpc;
+using namespace std;
+
+// Static data
+const char REQUEST_BEGIN[] =
+  "<?xml version=\"1.0\"?>\r\n"
+  "<methodCall><methodName>";
+const char REQUEST_END_METHODNAME[] = "</methodName>\r\n";
+const char PARAMS_TAG[] = "<params>";
+const char PARAMS_ETAG[] = "</params>";
+const char PARAM_TAG[] = "<param>";
+const char PARAM_ETAG[] =  "</param>";
+const char REQUEST_END[] = "</methodCall>\r\n";
+
+
+
+
+XmlRpcClient::XmlRpcClient(const char* host, int port, const char* uri/*=0*/)
+{
+  XmlRpcUtil::log(1, "XmlRpcClient new client: host %s, port %d.", host, port);
+
+  _host = host;
+  _port = port;
+  if (uri && *uri)
+    _uri = uri;
+  else
+    _uri = "/RPC2";
+  _connectionState = NO_CONNECTION;
+  _executing = false;
+  _eof = false;
+
+  // Default to keeping the connection open until an explicit close is done
+  setKeepOpen();
+}
+
+
+XmlRpcClient::XmlRpcClient(const char* host, int port,
+                           const char* login, const char* password, const char* uri/*=0*/)
+{
+  XmlRpcUtil::log(1, "XmlRpcClient new client: host %s, port %d, login %s.", host, port, login);
+
+  _host = host;
+  _port = port;
+
+  _login = login ? login : "";
+  _password = password ? password : "";
+
+  _uri = uri ? uri : "/RPC2";
+
+  _connectionState = NO_CONNECTION;
+  _executing = false;
+  _eof = false;
+
+  // Default to keeping the connection open until an explicit close is done
+  setKeepOpen();
+}
+
+
+
+XmlRpcClient::~XmlRpcClient()
+{
+  XmlRpcUtil::log(1, "XmlRpcClient dtor client: host %s, port %d.", _host.c_str(), _port);
+  if (_connectionState != NO_CONNECTION) close();
+}
+
+
+// Close the owned fd
+void
+XmlRpcClient::close()
+{
+  XmlRpcUtil::log(4, "XmlRpcClient::close: fd %d.", getfd());
+  _connectionState = NO_CONNECTION;
+  _disp.exit();
+  _disp.removeSource(this);
+
+  XmlRpcSource::close();
+}
+
+
+// Clear the referenced flag even if exceptions or errors occur.
+struct ClearFlagOnExit {
+  ClearFlagOnExit(bool& flag) : _flag(flag) {}
+  ~ClearFlagOnExit() { _flag = false; }
+  bool& _flag;
+};
+
+// Execute the named procedure on the remote server.
+// Params should be an array of the arguments for the method.
+// Returns true if the request was sent and a result received (although the result
+// might be a fault).
+bool
+XmlRpcClient::execute(const char* method, XmlRpcValue const& params, XmlRpcValue& result, double timeoutSeconds)
+{
+  XmlRpcUtil::log(1, "XmlRpcClient::execute: method %s (_connectionState %d).", method, _connectionState);
+
+  // This is not a thread-safe operation, if you want to do multithreading, use separate
+  // clients for each thread. If you want to protect yourself from multiple threads
+  // accessing the same client, replace this code with a real mutex.
+  if (_executing)
+    return false;
+
+  _executing = true;
+  ClearFlagOnExit cf(_executing);
+
+  _sendAttempts = 0;
+  _isFault = false;
+
+  if ( ! setupConnection())
+    return false;
+
+  if ( ! generateRequest(method, params))
+    return false;
+
+  result.clear();
+
+  // Process until either a response is received or the timeout period passes
+  _disp.work(timeoutSeconds);
+
+  if (_connectionState != IDLE || ! parseResponse(result))
+    return false;
+
+  XmlRpcUtil::log(1, "XmlRpcClient::execute: method %s completed.", method);
+  _response.clear();
+  return true;
+}
+
+// XmlRpcSource interface implementation
+// Handle server responses. Called by the event dispatcher during execute.
+unsigned
+XmlRpcClient::handleEvent(unsigned eventType)
+{
+  if (eventType == XmlRpcDispatch::Exception)
+  {
+    //if (XmlRpcSocket::nonFatalError())
+    //  return (_connectionState == WRITE_REQUEST)
+    //        ? XmlRpcDispatch::WritableEvent : XmlRpcDispatch::ReadableEvent;
+
+    if (_connectionState == WRITE_REQUEST && _bytesWritten == 0)
+      XmlRpcUtil::error("Error in XmlRpcClient::handleEvent: could not connect to server (%s).",
+                       XmlRpcSocket::getErrorMsg().c_str());
+    else
+      XmlRpcUtil::error("Error in XmlRpcClient::handleEvent (state %d): %s.",
+                        _connectionState, XmlRpcSocket::getErrorMsg().c_str());
+    return 0;
+  }
+
+  if (_connectionState == WRITE_REQUEST)
+    if ( ! writeRequest()) return 0;
+
+  if (_connectionState == READ_HEADER)
+    if ( ! readHeader()) return 0;
+
+  if (_connectionState == READ_RESPONSE)
+    if ( ! readResponse()) return 0;
+
+  // This should probably always ask for Exception events too
+  return (_connectionState == WRITE_REQUEST)
+        ? XmlRpcDispatch::WritableEvent : XmlRpcDispatch::ReadableEvent;
+}
+
+
+// Create the socket connection to the server if necessary
+bool
+XmlRpcClient::setupConnection()
+{
+  // If an error occurred last time through, or if the server closed the connection, close our end
+  if ((_connectionState != NO_CONNECTION && _connectionState != IDLE) || _eof)
+    close();
+
+  _eof = false;
+  if (_connectionState == NO_CONNECTION)
+    if (! doConnect())
+      return false;
+
+  // Prepare to write the request
+  _connectionState = WRITE_REQUEST;
+  _bytesWritten = 0;
+
+  // Notify the dispatcher to listen on this source (calls handleEvent when the socket is writable)
+  _disp.removeSource(this);       // Make sure nothing is left over
+  _disp.addSource(this, XmlRpcDispatch::WritableEvent | XmlRpcDispatch::Exception);
+
+  return true;
+}
+
+
+// Connect to the xmlrpc server
+bool
+XmlRpcClient::doConnect()
+{
+  XmlRpcSocket::Socket fd = XmlRpcSocket::socket();
+  if (fd == XmlRpcSocket::Invalid)
+  {
+    XmlRpcUtil::error("Error in XmlRpcClient::doConnect: Could not create socket (%s).", XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  XmlRpcUtil::log(3, "XmlRpcClient::doConnect: fd %d.", fd);
+  this->setfd(fd);
+
+  // Don't block on connect/reads/writes
+  if ( ! XmlRpcSocket::setNonBlocking(fd))
+  {
+    this->close();
+    XmlRpcUtil::error("Error in XmlRpcClient::doConnect: Could not set socket to non-blocking IO mode (%s).", XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  if ( ! XmlRpcSocket::connect(fd, _host, _port))
+  {
+    this->close();
+    XmlRpcUtil::error("Error in XmlRpcClient::doConnect: Could not connect to server (%s).", XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  return XmlRpcSource::doConnect();
+}
+
+// Encode the request to call the specified method with the specified parameters into xml
+bool
+XmlRpcClient::generateRequest(const char* methodName, XmlRpcValue const& params)
+{
+  std::string body = REQUEST_BEGIN;
+  body += methodName;
+  body += REQUEST_END_METHODNAME;
+
+  // If params is an array, each element is a separate parameter
+  if (params.valid()) {
+    body += PARAMS_TAG;
+    if (params.getType() == XmlRpcValue::TypeArray)
+    {
+      for (int i=0; i<params.size(); ++i) {
+        body += PARAM_TAG;
+        body += params[i].toXml();
+        body += PARAM_ETAG;
+      }
+    }
+    else
+    {
+      body += PARAM_TAG;
+      body += params.toXml();
+      body += PARAM_ETAG;
+    }
+
+    body += PARAMS_ETAG;
+  }
+  body += REQUEST_END;
+
+  std::string header = generateHeader(body);
+  XmlRpcUtil::log(4, "XmlRpcClient::generateRequest: header is %d bytes, content-length is %d.",
+                  header.length(), body.length());
+
+  _request = header + body;
+  return true;
+}
+
+// Prepend http headers
+std::string
+XmlRpcClient::generateHeader(std::string const& body)
+{
+  std::string header =
+    "POST " + _uri + " HTTP/1.1\r\n"
+    "User-Agent: ";
+  header += XMLRPC_VERSION;
+  header += "\r\nHost: ";
+  header += _host;
+
+  char buff[40];
+  sprintf(buff,":%d\r\n", _port);
+
+  header += buff;
+
+  if (_login.length() != 0)
+  {
+    // convert to base64
+    std::vector<char> base64data;
+    int iostatus = 0;
+    base64<char> encoder;
+    std::back_insert_iterator<std::vector<char> > ins =
+      std::back_inserter(base64data);
+
+    std::string authBuf = _login + ":" + _password;
+
+    encoder.put(authBuf.begin(), authBuf.end(), ins, iostatus,
+                base64<>::crlf());
+
+    header += "Authorization: Basic ";
+    std::string authEnc(base64data.begin(), base64data.end());
+    // handle pesky linefeed characters
+    string::size_type lf;
+    while ( (lf = authEnc.find("\r")) != string::npos ) {
+      authEnc.erase(lf, 1);
+    }
+    while ( (lf = authEnc.find("\n")) != string::npos ) {
+      authEnc.erase(lf, 1);
+    }
+    header += authEnc;
+    header += "\r\n";
+  }
+
+  header += "Content-Type: text/xml\r\nContent-length: ";
+
+  sprintf(buff,"%"PRIuSZ"\r\n\r\n", body.size());
+
+  return header + buff;
+}
+
+bool
+XmlRpcClient::writeRequest()
+{
+  if (_bytesWritten == 0)
+    XmlRpcUtil::log(5, "XmlRpcClient::writeRequest (attempt %d):\n%s\n", _sendAttempts+1, _request.c_str());
+
+  // Try to write the request
+  if ( ! nbWrite(_request, &_bytesWritten))
+  {
+    XmlRpcUtil::error("Error in XmlRpcClient::writeRequest: write error (%s).",XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  XmlRpcUtil::log(3, "XmlRpcClient::writeRequest: wrote %d of %d bytes.", _bytesWritten, _request.length());
+
+  // Wait for the result
+  if (_bytesWritten == int(_request.length()))
+  {
+    _header = "";
+    _response = "";
+    _connectionState = READ_HEADER;
+  }
+  return true;
+}
+
+
+// Read the header from the response
+bool
+XmlRpcClient::readHeader()
+{
+  // Read available data
+  if ( ! nbRead(_header, &_eof) || (_eof && _header.length() == 0))
+  {
+    // If we haven't read any data yet and this is a keep-alive connection, the server may
+    // have timed out, so we try one more time.
+    if (getKeepOpen() && _header.length() == 0 && _sendAttempts++ == 0)
+    {
+      XmlRpcUtil::log(4, "XmlRpcClient::readHeader: re-trying connection");
+      XmlRpcSource::close();
+
+      _connectionState = NO_CONNECTION;
+      _eof = false;
+      return setupConnection();
+    }
+
+    XmlRpcUtil::error("Error in XmlRpcClient::readHeader: error while reading header (%s) on fd %d.",
+                      XmlRpcSocket::getErrorMsg().c_str(), getfd());
+    return false;
+  }
+
+  XmlRpcUtil::log(4, "XmlRpcClient::readHeader: client has read %d bytes", _header.length());
+
+  return parseHeader();
+}
+
+bool
+XmlRpcClient::parseHeader()
+{
+  char const *hp = _header.c_str();         // Start of header
+  char const *ep = hp + _header.length();   // End of string
+  char const *bp = 0;                       // Start of body
+  char const *lp = 0;                       // Start of content-length value
+
+  std::string const CONTINUE100("100 Continue");
+  int nc100 = int(CONTINUE100.length());
+  for (char const *cp = hp; (bp == 0) && (cp < ep); ++cp)
+  {
+    if ((ep - cp > 16) && (strncasecmp(cp, "Content-length: ", 16) == 0))
+    {
+      lp = cp + 16;
+    }
+    else if ((ep - cp > 4) && (strncmp(cp, "\r\n\r\n", 4) == 0))
+    {
+      if (cp - hp > nc100 && strncmp(cp-CONTINUE100.length(), CONTINUE100.c_str(), CONTINUE100.length()) == 0)
+        cp += 3;
+      else
+        bp = cp + 4;
+    }
+    else if ((ep - cp > 2) && (strncmp(cp, "\n\n", 2) == 0))
+    {
+      if (cp - hp > nc100 && strncmp(cp-CONTINUE100.length(), CONTINUE100.c_str(), CONTINUE100.length()) == 0)
+        ++ cp;
+      else
+        bp = cp + 2;
+    }
+  }
+
+  // If we haven't gotten the entire header yet, return (keep reading)
+  if (bp == 0)
+  {
+    if (_eof)          // EOF in the middle of a response is an error
+    {
+      XmlRpcUtil::error("Error in XmlRpcClient::readHeader: EOF while reading header");
+      return false;   // Close the connection
+    }
+
+    return true;  // Keep reading
+  }
+
+  // Decode content length
+  if (lp == 0)
+  {
+    XmlRpcUtil::error("Error XmlRpcClient::readHeader: No Content-length specified");
+    return false;   // We could try to figure it out by parsing as we read, but for now...
+  }
+
+  _contentLength = atoi(lp);
+  if (_contentLength <= 0)
+  {
+    XmlRpcUtil::error("Error in XmlRpcClient::readHeader: Invalid Content-length specified (%d).", _contentLength);
+    return false;
+  }
+
+  XmlRpcUtil::log(4, "client read content length: %d", _contentLength);
+
+  // Otherwise copy non-header data to response buffer and set state to read response.
+  _response = bp;
+  _header = "";   // should parse out any interesting bits from the header (connection, etc)...
+  _connectionState = READ_RESPONSE;
+  return true;    // Continue monitoring this source
+}
+
+
+bool
+XmlRpcClient::readResponse()
+{
+  // If we dont have the entire response yet, read available data
+  if (int(_response.length()) < _contentLength)
+  {
+    if ( ! nbRead(_response, &_eof))
+    {
+      XmlRpcUtil::error("Error in XmlRpcClient::readResponse: read error (%s).",XmlRpcSocket::getErrorMsg().c_str());
+      return false;
+    }
+
+    // If we haven't gotten the entire _response yet, return (keep reading)
+    if (int(_response.length()) < _contentLength)
+    {
+      if (_eof)
+      {
+        XmlRpcUtil::error("Error in XmlRpcClient::readResponse: EOF while reading response");
+        return false;
+      }
+      return true;
+    }
+  }
+
+  // Otherwise, parse and return the result
+  XmlRpcUtil::log(3, "XmlRpcClient::readResponse (read %d bytes)", _response.length());
+  XmlRpcUtil::log(5, "response:\n%s", _response.c_str());
+
+  _connectionState = IDLE;
+
+  return false;    // Stop monitoring this source (causes return from work)
+}
+
+
+// Convert the response xml into a result value
+bool
+XmlRpcClient::parseResponse(XmlRpcValue& result)
+{
+  std::string r;
+  _response.swap(r);
+
+  // Parse response xml into result
+  bool emptyParam;
+  int offset = 0;
+  if ( ! XmlRpcUtil::findTag("methodResponse",r,&offset,&emptyParam) || emptyParam)
+  {
+    XmlRpcUtil::error("Error in XmlRpcClient::parseResponse: Invalid response - no methodResponse. Response:\n%s", r.c_str());
+    return false;
+  }
+
+  // Expect either <params><param>... or <fault>...
+  if (XmlRpcUtil::nextTagIs("params",r,&offset,&emptyParam) &&
+      XmlRpcUtil::nextTagIs("param",r,&offset,&emptyParam))
+  {
+    if (emptyParam)
+    {
+      result = 0; // No result?
+    }
+    else if (  ! result.fromXml(r, &offset))
+    {
+      XmlRpcUtil::error("Error in XmlRpcClient::parseResponse: Invalid response value. Response:\n%s", r.c_str());
+      return false;
+    }
+  }
+  else if (XmlRpcUtil::nextTagIs("fault",r,&offset,&emptyParam))
+  {
+    _isFault = true;
+
+    if (emptyParam || ! result.fromXml(r, &offset))
+    {
+      result = 0; // No result?
+      return false;
+    }
+  }
+  else
+  {
+    XmlRpcUtil::error("Error in XmlRpcClient::parseResponse: Invalid response - no param or fault tag. Response:\n%s", r.c_str());
+    return false;
+  }
+
+  return result.valid();
+}
+
diff --git a/src/xmlrpcpp/XmlRpcClient.h b/src/xmlrpcpp/XmlRpcClient.h
new file mode 100644
index 0000000..a59c30f
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcClient.h
@@ -0,0 +1,155 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCCLIENT_H_
+#define _XMLRPCCLIENT_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+
+#include <string>
+
+#include "XmlRpcDispatch.h"
+#include "XmlRpcSource.h"
+
+namespace XmlRpc {
+
+  // Arguments and results are represented by XmlRpcValues
+  class XmlRpcValue;
+
+  //! A class to send XML RPC requests to a server and return the results.
+  class XmlRpcClient : public XmlRpcSource {
+  public:
+
+    //! Construct a client to connect to the server at the specified host:port address
+    //!  @param host The name of the remote machine hosting the server, eg "myserver.mycompany.com"
+    //!  @param port The port on the remote machine where the server is listening
+    //!  @param uri  An optional string to be sent as the URI in the HTTP GET header
+    //! Note that the host is not a URL, do not prepend "http://" or other protocol specifiers.
+    XmlRpcClient(const char* host, int port, const char* uri=0);
+
+    //! Construct a client to connect to the server at the specified host:port address including HTTP authentication
+    //!  @param host  The name of the remote machine hosting the server
+    //!  @param port  The port on the remote machine where the server is listening
+    //!  @param login The username passed to the server
+    //!  @param pass  The password passed to the server
+    //!  @param uri   An optional string to be sent as the URI in the HTTP GET header
+    XmlRpcClient(const char* host, int port, const char* login, const char* password, const char* uri=0);
+
+    //! Destructor
+    virtual ~XmlRpcClient();
+
+    //! Execute the named procedure on the remote server.
+    //!  @param method The name of the remote procedure to execute
+    //!  @param params An array of the arguments for the method
+    //!  @param result The result value to be returned to the client
+    //!  @param timeoutSeconds Seconds to wait for a response (defaults to forever)
+    //!  @return true if the request was sent and a result received 
+    //!   (although the result might be a fault).
+    //!
+    //! Currently this is a synchronous (blocking) implementation (execute
+    //! does not return until it receives a response or an error). Use isFault()
+    //! to determine whether the result is a fault response.
+    bool execute(const char* method, XmlRpcValue const& params, XmlRpcValue& result, double timeoutSeconds = -1);
+
+    //! Returns true if the result of the last execute() was a fault response.
+    bool isFault() const { return _isFault; }
+
+    //! Return the host name of the server
+    const char* const host() const { return _host.c_str(); }
+
+    //! Return the port
+    int port() const { return _port; }
+
+    //! Return the URI
+    const char* const uri() const { return _uri.c_str(); }
+
+    // XmlRpcSource interface implementation
+    //! Close the connection
+    virtual void close();
+
+    //! Handle server responses. Called by the event dispatcher during execute.
+    //!  @param eventType The type of event that occurred. 
+    //!  @see XmlRpcDispatch::EventType
+    virtual unsigned handleEvent(unsigned eventType);
+
+  protected:
+    // Execution processing helpers
+    virtual bool doConnect();
+    virtual bool setupConnection();
+
+    virtual bool generateRequest(const char* method, XmlRpcValue const& params);
+    virtual std::string generateHeader(std::string const& body);
+    virtual bool writeRequest();
+    virtual bool readHeader();
+    virtual bool parseHeader();
+    virtual bool readResponse();
+    virtual bool parseResponse(XmlRpcValue& result);
+
+    // Possible IO states for the connection
+    enum ClientConnectionState { NO_CONNECTION, CONNECTING, WRITE_REQUEST, READ_HEADER, READ_RESPONSE, IDLE };
+    ClientConnectionState _connectionState;
+
+    // Server location
+    std::string _host;
+    std::string _uri;
+    int _port;
+
+    // Login information for HTTP authentication
+    std::string _login;
+    std::string _password;
+
+    // The xml-encoded request, http header of response, and response xml
+    std::string _request;
+    std::string _header;
+    std::string _response;
+
+    // Number of times the client has attempted to send the request
+    int _sendAttempts;
+
+    // Number of bytes of the request that have been written to the socket so far
+    int _bytesWritten;
+
+    // True if we are currently executing a request. If you want to multithread,
+    // each thread should have its own client.
+    bool _executing;
+
+    // True if the server closed the connection
+    bool _eof;
+
+    // True if a fault response was returned by the server
+    bool _isFault;
+
+    // Number of bytes expected in the response body (parsed from response header)
+    int _contentLength;
+
+    // Event dispatcher
+    XmlRpcDispatch _disp;
+
+  };	// class XmlRpcClient
+
+}	// namespace XmlRpc
+
+#endif	// _XMLRPCCLIENT_H_
diff --git a/src/xmlrpcpp/XmlRpcDispatch.cpp b/src/xmlrpcpp/XmlRpcDispatch.cpp
new file mode 100644
index 0000000..74bd18a
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcDispatch.cpp
@@ -0,0 +1,298 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "XmlRpcDispatch.h"
+#include "XmlRpcSource.h"
+#include "XmlRpcUtil.h"
+
+#include <errno.h>
+#include <math.h>
+
+#if defined(__FreeBSD__) 
+#	ifdef USE_FTIME
+#		include <sys/timeb.h>
+#	endif
+#else
+#	include <sys/timeb.h>
+#endif // __FreeBSD__
+
+#if defined(_WINDOWS)
+# include <winsock2.h>
+
+# define USE_FTIME
+# if defined(_MSC_VER)
+#  define timeb _timeb
+#  define ftime _ftime
+# endif
+#else
+# include <sys/time.h>
+#endif  // _WINDOWS
+
+
+using namespace XmlRpc;
+
+
+XmlRpcDispatch::XmlRpcDispatch()
+{
+  _endTime = -1.0;
+  _doClear = false;
+  _inWork = false;
+}
+
+
+XmlRpcDispatch::~XmlRpcDispatch()
+{
+}
+
+// Monitor this source for the specified events and call its event handler
+// when the event occurs
+void
+XmlRpcDispatch::addSource(XmlRpcSource* source, unsigned mask)
+{
+  _sources.push_back(MonitoredSource(source, mask));
+}
+
+// Stop monitoring this source. Does not close the source.
+void
+XmlRpcDispatch::removeSource(XmlRpcSource* source)
+{
+  for (SourceList::iterator it=_sources.begin(); it!=_sources.end(); ++it)
+    if (it->getSource() == source)
+    {
+      _sources.erase(it);
+      break;
+    }
+}
+
+
+// Modify the types of events to watch for on this source
+void 
+XmlRpcDispatch::setSourceEvents(XmlRpcSource* source, unsigned eventMask)
+{
+  for (SourceList::iterator it=_sources.begin(); it!=_sources.end(); ++it)
+    if (it->getSource() == source)
+    {
+      it->getMask() = eventMask;
+      break;
+    }
+}
+
+
+
+// Watch current set of sources and process events
+void
+XmlRpcDispatch::work(double timeoutSeconds)
+{
+  // Compute end time
+  double timeNow = getTime();
+  _endTime = (timeoutSeconds < 0.0) ? -1.0 : (timeNow + timeoutSeconds);
+  _doClear = false;
+  _inWork = true;
+
+  // Only work while there is something to monitor
+  while (_sources.size() > 0) {
+
+    // Wait for and dispatch events
+    if ( ! waitForAndProcessEvents(timeoutSeconds))
+    {
+      _inWork = false;
+      return;
+    }
+
+
+    // Check whether to clear all sources
+    if (_doClear)
+    {
+      SourceList sourcesToClose;
+      _sources.swap(sourcesToClose);
+      for (SourceList::iterator it=sourcesToClose.begin(); it!=sourcesToClose.end(); ++it)
+      {
+        XmlRpcSource *src = it->getSource();
+        src->close();
+      }
+
+      _doClear = false;
+    }
+
+    // Check whether end time has passed or exit has been called
+    if (_endTime == 0.0)        // Exit
+    {
+      break;
+    }
+    else if (_endTime > 0.0)    // Check for timeout
+    {
+      double t = getTime();
+      if (t > _endTime)
+        break;
+
+      // Decrement timeout by elapsed time
+      timeoutSeconds -= (t - timeNow);
+      if (timeoutSeconds < 0.0) 
+        timeoutSeconds = 0.0;    // Shouldn't happen but its fp math...
+      timeNow = t;
+    }
+  }
+
+  _inWork = false;
+}
+
+
+
+// Exit from work routine. Presumably this will be called from
+// one of the source event handlers.
+void
+XmlRpcDispatch::exit()
+{
+  _endTime = 0.0;   // Return from work asap
+}
+
+
+// Clear all sources from the monitored sources list
+void
+XmlRpcDispatch::clear()
+{
+  if (_inWork)
+  {
+    _doClear = true;  // Finish reporting current events before clearing
+  }
+  else
+  {
+    SourceList sourcesToClose;
+    _sources.swap(sourcesToClose);
+    for (SourceList::iterator it=sourcesToClose.begin(); it!=sourcesToClose.end(); ++it)
+      it->getSource()->close();
+  }
+}
+
+
+// Time utility- return time in seconds
+double
+XmlRpcDispatch::getTime()
+{
+#ifdef USE_FTIME
+  struct timeb	tbuff;
+
+  ftime(&tbuff);
+  return ((double) tbuff.time + ((double)tbuff.millitm / 1000.0) +
+	  ((double) tbuff.timezone * 60));
+#else
+  struct timeval	tv;
+  struct timezone	tz;
+
+  gettimeofday(&tv, &tz);
+  return (tv.tv_sec + tv.tv_usec / 1000000.0);
+#endif /* USE_FTIME */
+}
+
+
+// Wait for I/O on any source, timeout, or interrupt signal.
+bool
+XmlRpcDispatch::waitForAndProcessEvents(double timeoutSeconds)
+{
+  // Construct the sets of descriptors we are interested in
+  fd_set inFd, outFd, excFd;
+  FD_ZERO(&inFd);
+  FD_ZERO(&outFd);
+  FD_ZERO(&excFd);
+
+  XmlRpcSocket::Socket maxFd = 0;
+  for (SourceList::iterator it=_sources.begin(); it!=_sources.end(); ++it)
+  {
+    XmlRpcSocket::Socket fd = it->getSource()->getfd();
+    if (it->getMask() & ReadableEvent) FD_SET(fd, &inFd);
+    if (it->getMask() & WritableEvent) FD_SET(fd, &outFd);
+    if (it->getMask() & Exception)     FD_SET(fd, &excFd);
+    if (it->getMask() && fd > maxFd)   maxFd = fd;
+  }
+
+  // Check for events
+  int nEvents;
+  if (_endTime < 0.0)
+  {
+    nEvents = select(int(maxFd+1), &inFd, &outFd, &excFd, NULL);
+  }
+  else 
+  {
+    struct timeval tv;
+    tv.tv_sec = (int)floor(timeoutSeconds);
+    tv.tv_usec = ((int)floor(1000000.0 * (timeoutSeconds-floor(timeoutSeconds)))) % 1000000;
+    nEvents = select(int(maxFd+1), &inFd, &outFd, &excFd, &tv);
+  }
+
+  if (nEvents < 0 && errno != EINTR)
+  {
+    XmlRpcUtil::error("Error in XmlRpcDispatch::work: error in select (%d).", nEvents);
+    return false;
+  }
+
+  // Process events. Copy source list to avoid invalidating iterator by removing sources.
+  SourceList s(_sources);
+  for (SourceList::iterator it=s.begin(); it != s.end(); ++it)
+  {
+    XmlRpcSource* src = it->getSource();
+    XmlRpcSocket::Socket fd = src->getfd();
+
+    if (fd <= maxFd)
+    {
+      // handleEvent is called once per event type signalled
+      unsigned newMask = 0;
+      int nset = 0;
+      if (FD_ISSET(fd, &inFd))
+      {
+        newMask |= src->handleEvent(ReadableEvent);
+        ++nset;
+      }
+      if (FD_ISSET(fd, &outFd))
+      {
+        newMask |= src->handleEvent(WritableEvent);
+        ++nset;
+      }
+      if (FD_ISSET(fd, &excFd))
+      {
+        newMask |= src->handleEvent(Exception);
+        ++nset;
+      }
+
+      // Some event occurred
+      if (nset)
+      {
+        // This bit is not terribly efficient if many connections are active...
+        if (newMask)
+        {
+          setSourceEvents(src, newMask);
+        }
+        else       // Stop monitoring this one
+        {
+          removeSource(src);
+
+          if ( ! src->getKeepOpen())
+            src->close();
+        }
+      }
+    }
+  }
+
+  return true;
+}
diff --git a/src/xmlrpcpp/XmlRpcDispatch.h b/src/xmlrpcpp/XmlRpcDispatch.h
new file mode 100644
index 0000000..0ee8866
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcDispatch.h
@@ -0,0 +1,112 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCDISPATCH_H_
+#define _XMLRPCDISPATCH_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#include <vector>
+
+namespace XmlRpc {
+
+  // An RPC source represents a file descriptor to monitor
+  class XmlRpcSource;
+
+  //! An object which monitors file descriptors for events and performs
+  //! callbacks when interesting events happen.
+  class XmlRpcDispatch {
+  public:
+    //! Constructor
+    XmlRpcDispatch();
+    ~XmlRpcDispatch();
+
+    //! Values indicating the type of events a source is interested in
+    enum EventType {
+      ReadableEvent = 1,    //!< data available to read
+      WritableEvent = 2,    //!< connected/data can be written without blocking
+      Exception     = 4     //!< uh oh
+    };
+    
+    //! Monitor this source for the event types specified by the event mask
+    //! and call its event handler when any of the events occur.
+    //!  @param source The source to monitor
+    //!  @param eventMask Which event types to watch for. \see EventType
+    void addSource(XmlRpcSource* source, unsigned eventMask);
+
+    //! Stop monitoring this source.
+    //!  @param source The source to stop monitoring
+    //! The source socket is not closed.
+    void removeSource(XmlRpcSource* source);
+
+    //! Modify the types of events to watch for on this source
+    void setSourceEvents(XmlRpcSource* source, unsigned eventMask);
+
+
+    //! Watch current set of sources and process events for the specified
+    //! duration (in seconds, -1 implies wait forever, or until exit is called)
+    void work(double timeSeconds);
+
+    //! Exit from work routine
+    void exit();
+
+    //! Clear all sources from the monitored sources list. Sources are closed.
+    void clear();
+
+  protected:
+
+    //! Wait for I/O on any source, timeout, or interrupt signal.
+    bool waitForAndProcessEvents(double timeoutSeconds);
+
+
+    //! Returns current time in seconds since something
+    double getTime();
+
+    // A source to monitor and what to monitor it for
+    struct MonitoredSource
+    {
+      MonitoredSource(XmlRpcSource* src, unsigned mask) : _src(src), _mask(mask) {}
+      XmlRpcSource* getSource() const { return _src; }
+      unsigned& getMask() { return _mask; }
+      XmlRpcSource* _src;
+      unsigned _mask;
+    };
+
+    // A list of sources to monitor
+    typedef std::vector< MonitoredSource > SourceList; 
+
+    // Sources being monitored
+    SourceList _sources;
+
+    // When work should stop (-1 implies wait forever, or until exit is called)
+    double _endTime;
+
+    bool _doClear;
+    bool _inWork;
+
+  };
+} // namespace XmlRpc
+
+#endif  // _XMLRPCDISPATCH_H_
diff --git a/src/xmlrpcpp/XmlRpcException.h b/src/xmlrpcpp/XmlRpcException.h
new file mode 100644
index 0000000..706fa92
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcException.h
@@ -0,0 +1,62 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCEXCEPTION_H_
+#define _XMLRPCEXCEPTION_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#ifndef MAKEDEPEND
+# include <string>
+#endif
+
+
+namespace XmlRpc {
+
+  //! A class representing an error.
+  //! If server methods throw this exception, a fault response is returned
+  //! to the client.
+  class XmlRpcException {
+  public:
+    //! Constructor
+    //!   @param message  A descriptive error message
+    //!   @param code     An integer error code
+    XmlRpcException(const std::string& message, int code=-1) :
+        _message(message), _code(code) {}
+
+    //! Return the error message.
+    const std::string& getMessage() const { return _message; }
+
+    //! Return the error code.
+    int getCode() const { return _code; }
+
+  private:
+    std::string _message;
+    int _code;
+  };
+
+}
+
+#endif	// _XMLRPCEXCEPTION_H_
diff --git a/src/xmlrpcpp/XmlRpcMutex.cpp b/src/xmlrpcpp/XmlRpcMutex.cpp
new file mode 100644
index 0000000..6bc28f8
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcMutex.cpp
@@ -0,0 +1,85 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#if defined(XMLRPC_THREADS)
+
+#include <config.h>
+
+#include "XmlRpcMutex.h"
+
+#if defined(_WINDOWS)
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#else
+# include <pthread.h>
+#endif
+
+using namespace XmlRpc;
+
+
+//! Destructor.
+XmlRpcMutex::~XmlRpcMutex()
+{
+  if (_pMutex)
+  {
+#if defined(_WINDOWS)
+    ::CloseHandle((HANDLE)_pMutex);
+#else
+    ::pthread_mutex_destroy((pthread_mutex_t*)_pMutex);
+    delete _pMutex;
+#endif
+    _pMutex = 0;
+  }
+}
+
+//! Wait for the mutex to be available and then acquire the lock.
+void XmlRpcMutex::acquire()
+{
+#if defined(_WINDOWS)
+  if ( ! _pMutex)
+    _pMutex = ::CreateMutex(0, TRUE, 0);
+  else
+    ::WaitForSingleObject(_pMutex, INFINITE);
+#else
+  if ( ! _pMutex)
+  {
+    _pMutex = new pthread_mutex_t;
+    ::pthread_mutex_init((pthread_mutex_t*)_pMutex, 0);
+  }
+  ::pthread_mutex_lock((pthread_mutex_t*)_pMutex);
+#endif
+}
+
+//! Release the mutex.
+void XmlRpcMutex::release()
+{
+  if (_pMutex)
+#if defined(_WINDOWS)
+    ::ReleaseMutex(_pMutex);
+#else
+    ::pthread_mutex_unlock((pthread_mutex_t*)_pMutex);
+#endif
+}
+
+#endif // XMLRPC_THREADS
+
diff --git a/src/xmlrpcpp/XmlRpcMutex.h b/src/xmlrpcpp/XmlRpcMutex.h
new file mode 100644
index 0000000..1fb57ad
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcMutex.h
@@ -0,0 +1,67 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCMUTEX_H_
+#define _XMLRPCMUTEX_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+namespace XmlRpc {
+
+  //! A simple platform-independent mutex API implemented for posix and windows.
+  class XmlRpcMutex {
+  public:
+    //! Construct a Mutex object.
+    XmlRpcMutex() : _pMutex(0) {}
+
+    //! Destroy a Mutex object.
+    ~XmlRpcMutex();
+
+    //! Wait for the mutex to be available and then acquire the lock.
+    void acquire();
+
+    //! Release the mutex.
+    void release();
+
+    //! Utility class to acquire a mutex at construction and release it when destroyed.
+    struct AutoLock {
+      //! Acquire the mutex at construction
+      AutoLock(XmlRpcMutex& m) : _m(m) { _m.acquire(); }
+      //! Release at destruction
+      ~AutoLock() { _m.release(); }
+      //! The mutex being held
+      XmlRpcMutex& _m;
+    };
+
+  private:
+
+    //! Native Mutex object
+    void* _pMutex;
+
+  };  // class XmlRpcMutex
+
+}  // namespace XmlRpc
+
+#endif	//  _XMLRPCMUTEX_H_
diff --git a/src/xmlrpcpp/XmlRpcServer.cpp b/src/xmlrpcpp/XmlRpcServer.cpp
new file mode 100644
index 0000000..bd5139a
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcServer.cpp
@@ -0,0 +1,526 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "XmlRpcServer.h"
+#include "XmlRpcServerConnection.h"
+#include "XmlRpcServerMethod.h"
+#include "XmlRpcSocket.h"
+#include "XmlRpcUtil.h"
+#include "XmlRpcException.h"
+#include "XmlRpc.h"
+#include "util.h"
+#include <stdio.h>
+
+using namespace XmlRpc;
+
+
+// Static data
+const char XmlRpcServer::METHODNAME_TAG[] = "methodName";
+const char XmlRpcServer::PARAMS_TAG[] = "params";
+const char XmlRpcServer::PARAM_TAG[] = "param";
+
+const std::string XmlRpcServer::METHODNAME = "methodName";
+const std::string XmlRpcServer::PARAMS = "params";
+
+const std::string XmlRpcServer::FAULTCODE = "faultCode";
+const std::string XmlRpcServer::FAULTSTRING = "faultString";
+
+
+
+XmlRpcServer::XmlRpcServer()
+{
+  _introspectionEnabled = false;
+  _listMethods = 0;
+  _methodHelp = 0;
+}
+
+
+XmlRpcServer::~XmlRpcServer()
+{
+  this->shutdown();
+  _methods.clear();
+  delete _listMethods;
+  delete _methodHelp;
+}
+
+
+// Add a command to the RPC server
+void
+XmlRpcServer::addMethod(XmlRpcServerMethod* method)
+{
+  _methods[method->name()] = method;
+}
+
+// Remove a command from the RPC server
+void
+XmlRpcServer::removeMethod(XmlRpcServerMethod* method)
+{
+  MethodMap::iterator i = _methods.find(method->name());
+  if (i != _methods.end())
+    _methods.erase(i);
+}
+
+// Remove a command from the RPC server by name
+void
+XmlRpcServer::removeMethod(const std::string& methodName)
+{
+  MethodMap::iterator i = _methods.find(methodName);
+  if (i != _methods.end())
+    _methods.erase(i);
+}
+
+
+// Look up a method by name
+XmlRpcServerMethod*
+XmlRpcServer::findMethod(const std::string& name) const
+{
+  MethodMap::const_iterator i = _methods.find(name);
+  if (i == _methods.end())
+    return 0;
+  return i->second;
+}
+
+
+// Create a socket, bind to the specified port, and
+// set it in listen mode to make it available for clients.
+bool
+XmlRpcServer::bindAndListen(int port, int backlog /*= 5*/)
+{
+  XmlRpcSocket::Socket fd = XmlRpcSocket::socket();
+  if (XmlRpcSocket::Invalid == fd)
+  {
+    XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not create socket (%s).", XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  this->setfd(fd);
+
+  // Don't block on reads/writes
+  if ( ! XmlRpcSocket::setNonBlocking(fd))
+  {
+    this->close();
+    XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not set socket to non-blocking input mode (%s).", XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  // Allow this port to be re-bound immediately so server re-starts are not delayed
+  if ( ! XmlRpcSocket::setReuseAddr(fd))
+  {
+    this->close();
+    XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not set SO_REUSEADDR socket option (%s).", XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  // Bind to the specified port on the default interface
+  if ( ! XmlRpcSocket::bind(fd, port))
+  {
+    this->close();
+    XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not bind to specified port (%s).", XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  // Set in listening mode
+  if ( ! XmlRpcSocket::listen(fd, backlog))
+  {
+    this->close();
+    XmlRpcUtil::error("XmlRpcServer::bindAndListen: Could not set socket in listening mode (%s).", XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  XmlRpcUtil::log(2, "XmlRpcServer::bindAndListen: server listening on port %d fd %d", port, fd);
+
+  // Notify the dispatcher to listen on this source when we are in work()
+  _disp.addSource(this, XmlRpcDispatch::ReadableEvent);
+
+  return true;
+}
+
+
+// Get port number that this server is listening on
+int
+XmlRpcServer::getPort(void) const
+{
+  return XmlRpcSocket::getPort(getfd());
+}
+
+
+
+// Process client requests for the specified time (in seconds)
+void
+XmlRpcServer::work(double timeSeconds)
+{
+  XmlRpcUtil::log(2, "XmlRpcServer::work: waiting for a connection");
+  _disp.work(timeSeconds);
+}
+
+
+
+// Handle input on the server socket by accepting the connection
+// and reading the rpc request.
+unsigned
+XmlRpcServer::handleEvent(unsigned mask)
+{
+  acceptConnection();
+  return XmlRpcDispatch::ReadableEvent;		// Continue to monitor this fd
+}
+
+
+// Accept a client connection request and create a connection to
+// handle method calls from the client.
+void
+XmlRpcServer::acceptConnection()
+{
+  XmlRpcSocket::Socket s = XmlRpcSocket::accept(this->getfd());
+  XmlRpcUtil::log(2, "XmlRpcServer::acceptConnection: socket %d", s);
+  if (XmlRpcSocket::Invalid == s)
+  {
+    //this->close();
+    XmlRpcUtil::error("XmlRpcServer::acceptConnection: Could not accept connection (%s).", XmlRpcSocket::getErrorMsg().c_str());
+  }
+  else if ( ! XmlRpcSocket::setNonBlocking(s))
+  {
+    XmlRpcSocket::close(s);
+    XmlRpcUtil::error("XmlRpcServer::acceptConnection: Could not set socket to non-blocking input mode (%s).", XmlRpcSocket::getErrorMsg().c_str());
+  }
+  else  // Notify the dispatcher to listen for input on this source when we are in work()
+  {
+    XmlRpcUtil::log(2, "XmlRpcServer::acceptConnection: creating a connection");
+    XmlRpcServerConnection* c = this->createConnection(s);
+    if (c) this->dispatchConnection(c);
+  }
+}
+
+
+// Create a new connection object for processing requests from a specific client.
+XmlRpcServerConnection*
+XmlRpcServer::createConnection(XmlRpcSocket::Socket s)
+{
+  // Specify that the connection object be deleted when it is closed
+  return new XmlRpcServerConnection(s, this, true);
+}
+
+
+// Hand off a new connection to a dispatcher
+void
+XmlRpcServer::dispatchConnection(XmlRpcServerConnection* sc)
+{
+  _disp.addSource(sc, XmlRpcDispatch::ReadableEvent);
+}
+
+
+// Remove a connection. Called by the connection when it closes down.
+void
+XmlRpcServer::removeConnection(XmlRpcServerConnection* sc)
+{
+  _disp.removeSource(sc);
+}
+
+
+// Stop processing client requests
+void
+XmlRpcServer::exit()
+{
+  _disp.exit();
+}
+
+
+// Close the server socket file descriptor and stop monitoring connections
+void
+XmlRpcServer::shutdown()
+{
+  // This closes and destroys all connections as well as closing this socket
+  _disp.clear();
+}
+
+
+// Introspection support
+static const std::string LIST_METHODS("system.listMethods");
+static const std::string METHOD_HELP("system.methodHelp");
+static const std::string MULTICALL("system.multicall");
+
+
+// List all methods available on a server
+class ListMethods : public XmlRpcServerMethod
+{
+public:
+  ListMethods(XmlRpcServer* s) : XmlRpcServerMethod(LIST_METHODS, s) {}
+
+  void execute(XmlRpcValue& params, XmlRpcValue& result)
+  {
+    _server->listMethods(result);
+  }
+
+  std::string help() { return std::string("List all methods available on a server as an array of strings"); }
+};
+
+
+// Retrieve the help string for a named method
+class MethodHelp : public XmlRpcServerMethod
+{
+public:
+  MethodHelp(XmlRpcServer* s) : XmlRpcServerMethod(METHOD_HELP, s) {}
+
+  void execute(XmlRpcValue& params, XmlRpcValue& result)
+  {
+    if (params[0].getType() != XmlRpcValue::TypeString)
+      throw XmlRpcException(METHOD_HELP + ": Invalid argument type");
+
+    XmlRpcServerMethod* m = _server->findMethod(params[0]);
+    if ( ! m)
+      throw XmlRpcException(METHOD_HELP + ": Unknown method name");
+
+    result = m->help();
+  }
+
+  std::string help() { return std::string("Retrieve the help string for a named method"); }
+};
+
+
+// Specify whether introspection is enabled or not. Default is enabled.
+void
+XmlRpcServer::enableIntrospection(bool enabled)
+{
+  if (_introspectionEnabled == enabled)
+    return;
+
+  _introspectionEnabled = enabled;
+
+  if (enabled)
+  {
+    if ( ! _listMethods)
+    {
+      _listMethods = new ListMethods(this);
+      _methodHelp = new MethodHelp(this);
+    } else {
+      addMethod(_listMethods);
+      addMethod(_methodHelp);
+    }
+  }
+  else
+  {
+    removeMethod(LIST_METHODS);
+    removeMethod(METHOD_HELP);
+  }
+}
+
+
+void
+XmlRpcServer::listMethods(XmlRpcValue& result)
+{
+  int i = 0;
+  result.setSize(int(_methods.size())+1);
+  for (MethodMap::iterator it=_methods.begin(); it != _methods.end(); ++it)
+    result[i++] = it->first;
+
+  // Multicall support is built into XmlRpcServer::executeRequest
+  result[i] = MULTICALL;
+}
+
+
+
+// Parse the request, run the method, generate a response string.
+std::string
+XmlRpcServer::executeRequest(std::string const& request)
+{
+  XmlRpcValue params, resultValue;
+  std::string methodName = parseRequest(request, params);
+  XmlRpcUtil::log(2, "XmlRpcServer::executeRequest: server calling method '%s'",
+                    methodName.c_str());
+
+  std::string response;
+  try {
+
+    if ( ! executeMethod(methodName, params, resultValue) &&
+         ! executeMulticall(methodName, params, resultValue))
+      response = generateFaultResponse(methodName + ": unknown method name");
+    else
+      response = generateResponse(resultValue.toXml());
+
+  } catch (const XmlRpcException& fault) {
+    XmlRpcUtil::log(2, "XmlRpcServer::executeRequest: fault %s.",
+                    fault.getMessage().c_str());
+    response = generateFaultResponse(fault.getMessage(), fault.getCode());
+  }
+
+  return response;
+}
+
+// Parse the method name and the argument values from the request.
+std::string
+XmlRpcServer::parseRequest(std::string const& request, XmlRpcValue& params)
+{
+  std::string methodName;
+  int offset = 0;   // Number of chars parsed from the request
+  bool emptyTag;
+
+  if (XmlRpcUtil::parseTag(METHODNAME_TAG, request, &offset, methodName) &&
+      XmlRpcUtil::findTag(PARAMS_TAG, request, &offset, &emptyTag) &&
+      ! emptyTag)
+  {
+    int nArgs = 0;
+    while (XmlRpcUtil::nextTagIs(PARAM_TAG, request, &offset, &emptyTag))
+    {
+      if (emptyTag)
+      {
+        params[nArgs++] = XmlRpcValue("");
+      }
+      else
+      {
+        params[nArgs++] = XmlRpcValue(request, &offset);
+        (void) XmlRpcUtil::nextTagIsEnd(PARAM_TAG, request, &offset);
+      }
+    }
+
+    (void) XmlRpcUtil::nextTagIsEnd(PARAMS_TAG, request, &offset);
+  }
+
+  return methodName;
+}
+
+// Execute a named method with the specified params.
+bool
+XmlRpcServer::executeMethod(const std::string& methodName,
+                            XmlRpcValue& params,
+                            XmlRpcValue& result)
+{
+  XmlRpcServerMethod* method = findMethod(methodName);
+
+  if ( ! method) return false;
+
+  method->execute(params, result);
+
+  // Ensure a valid result value
+  if ( ! result.valid())
+      result = std::string();
+
+  return true;
+}
+
+// Execute multiple calls and return the results in an array.
+bool
+XmlRpcServer::executeMulticall(const std::string& methodName,
+                               XmlRpcValue& params,
+                               XmlRpcValue& result)
+{
+  if (methodName != MULTICALL) return false;
+
+  // There ought to be 1 parameter, an array of structs
+  if (params.size() != 1 || params[0].getType() != XmlRpcValue::TypeArray)
+    throw XmlRpcException(MULTICALL + ": Invalid argument (expected an array)");
+
+  int nc = params[0].size();
+  result.setSize(nc);
+
+  for (int i=0; i<nc; ++i) {
+
+    if ( ! params[0][i].hasMember(METHODNAME) ||
+         ! params[0][i].hasMember(PARAMS)) {
+      result[i][FAULTCODE] = -1;
+      result[i][FAULTSTRING] = MULTICALL +
+              ": Invalid argument (expected a struct with members methodName and params)";
+      continue;
+    }
+
+    const std::string& methodName = params[0][i][METHODNAME];
+    XmlRpcValue& methodParams = params[0][i][PARAMS];
+
+    XmlRpcValue resultValue;
+    resultValue.setSize(1);
+    try {
+      if ( ! executeMethod(methodName, methodParams, resultValue[0]) &&
+           ! executeMulticall(methodName, params, resultValue[0]))
+      {
+        result[i][FAULTCODE] = -1;
+        result[i][FAULTSTRING] = methodName + ": unknown method name";
+      }
+      else
+        result[i] = resultValue;
+
+    } catch (const XmlRpcException& fault) {
+        result[i][FAULTCODE] = fault.getCode();
+        result[i][FAULTSTRING] = fault.getMessage();
+    }
+  }
+
+  return true;
+}
+
+
+// Create a response from results xml
+std::string
+XmlRpcServer::generateResponse(std::string const& resultXml)
+{
+  const char RESPONSE_1[] =
+    "<?xml version=\"1.0\"?>\r\n"
+    "<methodResponse><params><param>\r\n\t";
+  const char RESPONSE_2[] =
+    "\r\n</param></params></methodResponse>\r\n";
+
+  std::string body = RESPONSE_1 + resultXml + RESPONSE_2;
+  std::string header = generateHeader(body);
+  std::string response = header + body;
+
+  XmlRpcUtil::log(5, "XmlRpcServer::generateResponse:\n%s\n", response.c_str());
+  return response;
+}
+
+
+// Prepend http headers
+std::string
+XmlRpcServer::generateHeader(std::string const& body)
+{
+  std::string header =
+    "HTTP/1.1 200 OK\r\n"
+    "Server: ";
+  header += XMLRPC_VERSION;
+  header += "\r\n"
+    "Content-Type: text/xml\r\n"
+    "Content-length: ";
+
+  char buffLen[40];
+  sprintf(buffLen,"%"PRIuSZ"\r\n\r\n", body.size());
+
+  return header + buffLen;
+}
+
+
+std::string
+XmlRpcServer::generateFaultResponse(std::string const& errorMsg, int errorCode)
+{
+  const char RESPONSE_1[] =
+    "<?xml version=\"1.0\"?>\r\n"
+    "<methodResponse><fault>\r\n\t";
+  const char RESPONSE_2[] =
+    "\r\n</fault></methodResponse>\r\n";
+
+  XmlRpcValue faultStruct;
+  faultStruct[FAULTCODE] = errorCode;
+  faultStruct[FAULTSTRING] = errorMsg;
+  std::string body = RESPONSE_1 + faultStruct.toXml() + RESPONSE_2;
+  std::string header = generateHeader(body);
+
+  return header + body;
+}
+
diff --git a/src/xmlrpcpp/XmlRpcServer.h b/src/xmlrpcpp/XmlRpcServer.h
new file mode 100644
index 0000000..3f316a6
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcServer.h
@@ -0,0 +1,177 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCSERVER_H_
+#define _XMLRPCSERVER_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#include <map>
+#include <string>
+
+
+#include "XmlRpcDispatch.h"
+#include "XmlRpcSource.h"
+
+namespace XmlRpc {
+
+
+  // An abstract class supporting XML RPC methods
+  class XmlRpcServerMethod;
+
+  // Class representing connections to specific clients
+  class XmlRpcServerConnection;
+
+  // Class representing argument and result values
+  class XmlRpcValue;
+
+
+  //! A class to handle XML RPC requests
+  class XmlRpcServer : public XmlRpcSource {
+  public:
+    //! Create a server object.
+    XmlRpcServer();
+    //! Destructor.
+    virtual ~XmlRpcServer();
+
+    //! Specify whether introspection is enabled or not. Default is not enabled.
+    void enableIntrospection(bool enabled=true);
+
+    //! Add a command to the RPC server
+    void addMethod(XmlRpcServerMethod* method);
+
+    //! Remove a command from the RPC server
+    void removeMethod(XmlRpcServerMethod* method);
+
+    //! Remove a command from the RPC server by name
+    void removeMethod(const std::string& methodName);
+
+    //! Look up a method by name
+    XmlRpcServerMethod* findMethod(const std::string& name) const;
+
+    //! Create a socket, bind to the specified port, and
+    //! set it in listen mode to make it available for clients.
+    //! @param port The port to bind and listen on (zero to choose an arbitrary port)
+    bool bindAndListen(int port, int backlog = 5);
+
+    //! Get the port number this server is listening on.
+    int getPort(void) const;
+
+    //! Process client requests for the specified time (in seconds)
+    void work(double timeSeconds);
+
+    //! Temporarily stop processing client requests and exit the work() method.
+    void exit();
+
+    //! Close all connections with clients and the socket file descriptor
+    void shutdown();
+
+    //! Introspection support
+    void listMethods(XmlRpcValue& result);
+
+
+    //! Parses the request xml, runs the method, generates the response (header+xml).
+    //! Returns a fault response if an error occurs during method execution.
+    virtual std::string executeRequest(std::string const& request);
+
+
+    // XmlRpcSource interface implementation
+
+    //! Handle client connection requests
+    virtual unsigned handleEvent(unsigned eventType);
+
+    //! Remove a connection from the dispatcher
+    virtual void removeConnection(XmlRpcServerConnection*);
+
+  protected:
+
+    // Static data
+    static const char METHODNAME_TAG[];
+    static const char PARAMS_TAG[];
+    static const char PARAM_TAG[];
+
+    static const std::string SYSTEM_MULTICALL;
+    static const std::string METHODNAME;
+    static const std::string PARAMS;
+
+    static const std::string FAULTCODE;
+    static const std::string FAULTSTRING;
+
+
+    //! Accept a client connection request
+    virtual void acceptConnection();
+
+    //! Create a new connection object for processing requests from a specific client.
+    //! If the client is not authorized to connect, close the socket and return 0.
+    virtual XmlRpcServerConnection* createConnection(XmlRpcSocket::Socket socket);
+
+    //! Hand off a new connection object to a dispatcher.
+    virtual void dispatchConnection(XmlRpcServerConnection* sc);
+
+
+    //! Parse the methodName and parameters from the request.
+    //! @returns the methodName
+    std::string parseRequest(std::string const& request, XmlRpcValue& params);
+
+    //! Execute a named method with the specified params.
+    bool executeMethod(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result);
+
+    //! Execute multiple calls and return the results in an array.
+    //! System.multicall implementation
+    bool executeMulticall(const std::string& methodName, XmlRpcValue& params, XmlRpcValue& result);
+
+    //! Construct a response from the result XML.
+    std::string generateResponse(std::string const& resultXml);
+
+    //! Construct a fault response.
+    std::string generateFaultResponse(std::string const& msg, int errorCode = -1);
+
+    //! Return the appropriate headers for the response.
+    std::string generateHeader(std::string const& body);
+
+
+    
+    //! Whether the introspection API is supported by this server
+    bool _introspectionEnabled;
+
+    //! Event dispatcher
+    XmlRpcDispatch _disp;
+
+    //! Collection of methods. This could be a set keyed on method name if we wanted...
+    typedef std::map< std::string, XmlRpcServerMethod* > MethodMap;
+
+    //! Registered RPC methods.
+    MethodMap _methods;
+
+    //! List all registered RPC methods (only available if introspection is enabled)
+    XmlRpcServerMethod* _listMethods;
+
+    //! Return help string for a specified method (only available if introspection is enabled)
+    XmlRpcServerMethod* _methodHelp;
+
+  };
+} // namespace XmlRpc
+
+#endif //_XMLRPCSERVER_H_
diff --git a/src/xmlrpcpp/XmlRpcServerConnection.cpp b/src/xmlrpcpp/XmlRpcServerConnection.cpp
new file mode 100644
index 0000000..2bf75c8
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcServerConnection.cpp
@@ -0,0 +1,238 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "XmlRpcServerConnection.h"
+
+#include "XmlRpcDispatch.h"
+#include "XmlRpcServer.h"
+#include "XmlRpcSocket.h"
+#include "XmlRpcUtil.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+
+using namespace XmlRpc;
+
+
+
+// The server delegates handling client requests to a serverConnection object.
+XmlRpcServerConnection::XmlRpcServerConnection(XmlRpcSocket::Socket fd,
+                                               XmlRpcServer* server,
+                                               bool deleteOnClose /*= false*/) :
+  XmlRpcSource(fd, deleteOnClose)
+{
+  XmlRpcUtil::log(2,"XmlRpcServerConnection: new socket %d.", fd);
+  _server = server;
+  _connectionState = READ_HEADER;
+  _keepAlive = true;
+}
+
+
+XmlRpcServerConnection::~XmlRpcServerConnection()
+{
+  XmlRpcUtil::log(4,"XmlRpcServerConnection dtor.");
+  _server->removeConnection(this);
+}
+
+
+// Handle input on the server socket by accepting the connection
+// and reading the rpc request. Return true to continue to monitor
+// the socket for events, false to remove it from the dispatcher.
+unsigned
+XmlRpcServerConnection::handleEvent(unsigned /*eventType*/)
+{
+  if (_connectionState == READ_HEADER)
+    if ( ! readHeader()) return 0;
+
+  if (_connectionState == READ_REQUEST)
+    if ( ! readRequest()) return 0;
+
+  if (_connectionState == WRITE_RESPONSE)
+    if ( ! writeResponse()) return 0;
+
+  return (_connectionState == WRITE_RESPONSE) 
+        ? XmlRpcDispatch::WritableEvent : XmlRpcDispatch::ReadableEvent;
+}
+
+
+bool
+XmlRpcServerConnection::readHeader()
+{
+  // Read available data
+  bool eof;
+  if ( ! nbRead(_header, &eof))
+  {
+    // Its only an error if we already have read some data
+    if (_header.length() > 0)
+      XmlRpcUtil::error("XmlRpcServerConnection::readHeader: error while reading header (%s).",XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+
+  XmlRpcUtil::log(4, "XmlRpcServerConnection::readHeader: read %d bytes.", _header.length());
+  char *hp = (char*)_header.c_str();  // Start of header
+  char *ep = hp + _header.length();   // End of string
+  char *bp = 0;                       // Start of body
+  char *lp = 0;                       // Start of content-length value
+  char *kp = 0;                       // Start of connection value
+
+  for (char *cp = hp; (bp == 0) && (cp < ep); ++cp) {
+	if ((ep - cp > 16) && (strncasecmp(cp, "Content-length: ", 16) == 0))
+	  lp = cp + 16;
+	else if ((ep - cp > 12) && (strncasecmp(cp, "Connection: ", 12) == 0))
+	  kp = cp + 12;
+	else if ((ep - cp > 4) && (strncmp(cp, "\r\n\r\n", 4) == 0))
+	  bp = cp + 4;
+	else if ((ep - cp > 2) && (strncmp(cp, "\n\n", 2) == 0))
+	  bp = cp + 2;
+  }
+
+  // If we haven't gotten the entire header yet, return (keep reading)
+  if (bp == 0) {
+    // EOF in the middle of a request is an error, otherwise its ok
+    if (eof) {
+      XmlRpcUtil::log(4, "XmlRpcServerConnection::readHeader: EOF");
+      if (_header.length() > 0)
+        XmlRpcUtil::error("XmlRpcServerConnection::readHeader: EOF while reading header");
+      return false;   // Either way we close the connection
+    }
+    
+    return true;  // Keep reading
+  }
+
+  // Decode content length
+  if (lp == 0) {
+    XmlRpcUtil::error("XmlRpcServerConnection::readHeader: No Content-length specified");
+    return false;   // We could try to figure it out by parsing as we read, but for now...
+  }
+
+  _contentLength = atoi(lp);
+  if (_contentLength <= 0) {
+    XmlRpcUtil::error("XmlRpcServerConnection::readHeader: Invalid Content-length specified (%d).", _contentLength);
+    return false;
+  }
+  	
+  XmlRpcUtil::log(3, "XmlRpcServerConnection::readHeader: specified content length is %d.", _contentLength);
+
+  // Otherwise copy non-header data to request buffer and set state to read request.
+  _request = bp;
+
+  // Parse out any interesting bits from the header (HTTP version, connection)
+  _keepAlive = true;
+  if (_header.find("HTTP/1.0") != std::string::npos) {
+    if (kp == 0 || strncasecmp(kp, "keep-alive", 10) != 0)
+      _keepAlive = false;           // Default for HTTP 1.0 is to close the connection
+  } else {
+    if (kp != 0 && strncasecmp(kp, "close", 5) == 0)
+      _keepAlive = false;
+  }
+  XmlRpcUtil::log(3, "KeepAlive: %d", _keepAlive);
+
+
+  _header = ""; 
+  _connectionState = READ_REQUEST;
+  return true;    // Continue monitoring this source
+}
+
+
+
+bool
+XmlRpcServerConnection::readRequest()
+{
+  // If we dont have the entire request yet, read available data
+  if (int(_request.length()) < _contentLength)
+  {
+    bool eof;
+    if ( ! nbRead(_request, &eof))
+    {
+      XmlRpcUtil::error("XmlRpcServerConnection::readRequest: read error (%s).",XmlRpcSocket::getErrorMsg().c_str());
+      return false;
+    }
+
+    // If we haven't gotten the entire request yet, return (keep reading)
+    if (int(_request.length()) < _contentLength)
+    {
+      if (eof)
+      {
+        XmlRpcUtil::error("XmlRpcServerConnection::readRequest: EOF while reading request");
+        return false;   // Either way we close the connection
+      }
+      return true;
+    }
+  }
+
+  // Otherwise, parse and dispatch the request
+  XmlRpcUtil::log(3, "XmlRpcServerConnection::readRequest read %d bytes.", _request.length());
+  //XmlRpcUtil::log(5, "XmlRpcServerConnection::readRequest:\n%s\n", _request.c_str());
+
+  _connectionState = WRITE_RESPONSE;
+
+  return true;    // Continue monitoring this source
+}
+
+
+
+bool
+XmlRpcServerConnection::writeResponse()
+{
+  if (_response.length() == 0)
+  {
+    executeRequest();
+    _bytesWritten = 0;
+    if (_response.length() == 0)
+    {
+      XmlRpcUtil::error("XmlRpcServerConnection::writeResponse: empty response.");
+      return false;
+    }
+  }
+
+  // Try to write the response
+  if ( ! nbWrite(_response, &_bytesWritten))
+  {
+    XmlRpcUtil::error("XmlRpcServerConnection::writeResponse: write error (%s).",XmlRpcSocket::getErrorMsg().c_str());
+    return false;
+  }
+  XmlRpcUtil::log(3, "XmlRpcServerConnection::writeResponse: wrote %d of %d bytes.", _bytesWritten, _response.length());
+
+  // Prepare to read the next request
+  if (_bytesWritten == int(_response.length()))
+  {
+    _header = "";
+    _request = "";
+    _response = "";
+    _connectionState = READ_HEADER;
+  }
+
+  return _keepAlive;    // Continue monitoring this source if true
+}
+
+
+//! Helper method to execute the client request
+void XmlRpcServerConnection::executeRequest()
+{
+  _response = _server->executeRequest(_request);
+}
+
diff --git a/src/xmlrpcpp/XmlRpcServerConnection.h b/src/xmlrpcpp/XmlRpcServerConnection.h
new file mode 100644
index 0000000..a97ab14
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcServerConnection.h
@@ -0,0 +1,101 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCSERVERCONNECTION_H_
+#define _XMLRPCSERVERCONNECTION_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#include <string>
+
+#include "XmlRpcValue.h"
+#include "XmlRpcSource.h"
+
+namespace XmlRpc {
+
+
+  // The server waits for client connections and provides support for executing methods
+  class XmlRpcServer;
+  class XmlRpcServerMethod;
+
+  //! A class to handle XML RPC requests from a particular client
+  class XmlRpcServerConnection : public XmlRpcSource {
+  public:
+
+    //! Constructor
+    XmlRpcServerConnection(XmlRpcSocket::Socket fd, XmlRpcServer* server, bool deleteOnClose = false);
+    //! Destructor
+    virtual ~XmlRpcServerConnection();
+
+    // XmlRpcSource interface implementation
+    //! Handle IO on the client connection socket.
+    //!   @param eventType Type of IO event that occurred. @see XmlRpcDispatch::EventType.
+    virtual unsigned handleEvent(unsigned eventType);
+
+  protected:
+
+    //! Reads the http header
+    bool readHeader();
+
+    //! Reads the request (based on the content-length header value)
+    bool readRequest();
+
+    //! Executes the request and writes the resulting response
+    bool writeResponse();
+
+
+    //! Helper method to execute the client request
+    virtual void executeRequest();
+
+
+    //! The XmlRpc server that accepted this connection
+    XmlRpcServer* _server;
+
+    //! Possible IO states for the connection
+    enum ServerConnectionState { READ_HEADER, READ_REQUEST, WRITE_RESPONSE };
+    //! Current IO state for the connection
+    ServerConnectionState _connectionState;
+
+    //! Request headers
+    std::string _header;
+
+    //! Number of bytes expected in the request body (parsed from header)
+    int _contentLength;
+
+    //! Request body
+    std::string _request;
+
+    //! Response
+    std::string _response;
+
+    //! Number of bytes of the response written so far
+    int _bytesWritten;
+
+    //! Whether to keep the current client connection open for further requests
+    bool _keepAlive;
+  };
+} // namespace XmlRpc
+
+#endif // _XMLRPCSERVERCONNECTION_H_
diff --git a/src/xmlrpcpp/XmlRpcServerMethod.cpp b/src/xmlrpcpp/XmlRpcServerMethod.cpp
new file mode 100644
index 0000000..2704549
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcServerMethod.cpp
@@ -0,0 +1,45 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "XmlRpcServerMethod.h"
+#include "XmlRpcServer.h"
+
+namespace XmlRpc {
+
+
+  XmlRpcServerMethod::XmlRpcServerMethod(std::string const& name, XmlRpcServer* server)
+  {
+    _name = name;
+    _server = server;
+    if (_server) _server->addMethod(this);
+  }
+
+  XmlRpcServerMethod::~XmlRpcServerMethod()
+  {
+    if (_server) _server->removeMethod(this);
+  }
+
+
+} // namespace XmlRpc
diff --git a/src/xmlrpcpp/XmlRpcServerMethod.h b/src/xmlrpcpp/XmlRpcServerMethod.h
new file mode 100644
index 0000000..6e7c4a2
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcServerMethod.h
@@ -0,0 +1,65 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCSERVERMETHOD_H_
+#define _XMLRPCSERVERMETHOD_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#include <string>
+
+namespace XmlRpc {
+
+  // Representation of a parameter or result value
+  class XmlRpcValue;
+
+  // The XmlRpcServer processes client requests to call RPCs
+  class XmlRpcServer;
+
+  //! Abstract class representing a single RPC method
+  class XmlRpcServerMethod {
+  public:
+    //! Constructor
+    XmlRpcServerMethod(std::string const& name, XmlRpcServer* server = 0);
+    //! Destructor
+    virtual ~XmlRpcServerMethod();
+
+    //! Returns the name of the method
+    std::string& name() { return _name; }
+
+    //! Execute the method. Subclasses must provide a definition for this method.
+    virtual void execute(XmlRpcValue& params, XmlRpcValue& result) = 0;
+
+    //! Returns a help string for the method.
+    //! Subclasses should define this method if introspection is being used.
+    virtual std::string help() { return std::string(); }
+
+  protected:
+    std::string _name;
+    XmlRpcServer* _server;
+  };
+} // namespace XmlRpc
+
+#endif // _XMLRPCSERVERMETHOD_H_
diff --git a/src/xmlrpcpp/XmlRpcSocket.cpp b/src/xmlrpcpp/XmlRpcSocket.cpp
new file mode 100644
index 0000000..e8f4c52
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcSocket.cpp
@@ -0,0 +1,245 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "XmlRpcSocket.h"
+#include "XmlRpcUtil.h"
+
+
+#if defined(_WINDOWS)
+# include <stdio.h>
+# include <winsock2.h>
+//# pragma lib(WS2_32.lib)
+
+# define EINPROGRESS	WSAEINPROGRESS
+# define EWOULDBLOCK	WSAEWOULDBLOCK
+# define ETIMEDOUT	    WSAETIMEDOUT
+
+typedef int socklen_t;
+
+#else
+extern "C" {
+# include <unistd.h>
+# include <stdio.h>
+# include <string.h>
+# include <sys/types.h>
+# include <sys/socket.h>
+# include <netinet/in.h>
+# include <netdb.h>
+# include <errno.h>
+# include <fcntl.h>
+# include <signal.h>
+}
+#endif  // _WINDOWS
+
+
+using namespace XmlRpc;
+
+
+// One-time initializations
+static bool initialized = false;
+  
+
+static void initialize()
+{
+    initialized = true;
+
+#if defined(_WINDOWS)
+    {
+        WORD wVersionRequested = MAKEWORD( 2, 0 );
+        WSADATA wsaData;
+        WSAStartup(wVersionRequested, &wsaData);
+    }
+#else
+    {
+        // Ignore SIGPIPE
+        (void) signal(SIGPIPE, SIG_IGN);
+    }
+#endif // _WINDOWS
+}
+
+
+
+// These errors are not considered fatal for an IO operation; the operation will be re-tried.
+bool
+XmlRpcSocket::nonFatalError()
+{
+  int err = XmlRpcSocket::getError();
+  return (err == EINPROGRESS ||
+#if defined(EAGAIN)
+          err == EAGAIN ||
+#endif
+#if defined(EINTR)
+          err == EINTR ||
+#endif
+          err == EWOULDBLOCK);
+}
+
+
+XmlRpcSocket::Socket
+XmlRpcSocket::socket()
+{
+  if ( ! initialized) initialize();
+  return ::socket(AF_INET, SOCK_STREAM, 0);
+}
+
+
+void
+XmlRpcSocket::close(XmlRpcSocket::Socket fd)
+{
+  XmlRpcUtil::log(4, "XmlRpcSocket::close: fd %d.", fd);
+#if defined(_WINDOWS)
+  closesocket(fd);
+#else
+  ::close(fd);
+#endif // _WINDOWS
+}
+
+
+
+
+bool
+XmlRpcSocket::setNonBlocking(XmlRpcSocket::Socket fd)
+{
+#if defined(_WINDOWS)
+  unsigned long flag = 1;
+  return (ioctlsocket(fd, FIONBIO, &flag) == 0);
+#else
+  return (fcntl(fd, F_SETFL, O_NONBLOCK) == 0);
+#endif // _WINDOWS
+}
+
+
+bool
+XmlRpcSocket::setReuseAddr(XmlRpcSocket::Socket fd)
+{
+  // Allow this port to be re-bound immediately so server re-starts are not delayed
+  int sflag = 1;
+  return (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&sflag, sizeof(sflag)) == 0);
+}
+
+
+// Bind to a specified port
+bool 
+XmlRpcSocket::bind(XmlRpcSocket::Socket fd, int port)
+{
+  struct sockaddr_in saddr;
+  memset(&saddr, 0, sizeof(saddr));
+  saddr.sin_family = AF_INET;
+  saddr.sin_addr.s_addr = htonl(INADDR_ANY);
+  saddr.sin_port = htons((u_short) port);
+  return (::bind(fd, (struct sockaddr *)&saddr, sizeof(saddr)) == 0);
+}
+
+
+// Set socket in listen mode
+bool 
+XmlRpcSocket::listen(XmlRpcSocket::Socket fd, int backlog)
+{
+  return (::listen(fd, backlog) == 0);
+}
+
+
+XmlRpcSocket::Socket
+XmlRpcSocket::accept(XmlRpcSocket::Socket fd)
+{
+  struct sockaddr_in addr;
+  socklen_t addrlen = sizeof(addr);
+
+  return ::accept(fd, (struct sockaddr*)&addr, &addrlen);
+}
+
+
+    
+// Connect a socket to a server (from a client)
+bool
+XmlRpcSocket::connect(XmlRpcSocket::Socket fd, std::string& host, int port)
+{
+  struct sockaddr_in saddr;
+  memset(&saddr, 0, sizeof(saddr));
+  saddr.sin_family = AF_INET;
+
+  struct hostent *hp = gethostbyname(host.c_str());
+  if (hp == 0) return false;
+
+  saddr.sin_family = hp->h_addrtype;
+  memcpy(&saddr.sin_addr, hp->h_addr, hp->h_length);
+  saddr.sin_port = htons((u_short) port);
+
+  // For asynch operation, this will return EWOULDBLOCK (windows) or
+  // EINPROGRESS (linux) and we just need to wait for the socket to be writable...
+  int result = ::connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));
+  return result == 0 || nonFatalError();
+}
+
+
+
+// Get the port of a bound socket
+int
+XmlRpcSocket::getPort(XmlRpcSocket::Socket socket)
+{
+  struct sockaddr_in saddr;
+  socklen_t saddr_len = sizeof(saddr);
+  int port;
+
+  int result = ::getsockname(socket, (sockaddr*) &saddr, &saddr_len);
+
+  if (result != 0) {
+    port = -1;
+  } else {
+    port = ntohs(saddr.sin_port);
+  }
+  return port;
+}
+
+
+// Returns last errno
+int 
+XmlRpcSocket::getError()
+{
+#if defined(_WINDOWS)
+  return WSAGetLastError();
+#else
+  return errno;
+#endif
+}
+
+
+// Returns message corresponding to last errno
+std::string 
+XmlRpcSocket::getErrorMsg()
+{
+  return getErrorMsg(getError());
+}
+
+// Returns message corresponding to errno... well, it should anyway
+std::string 
+XmlRpcSocket::getErrorMsg(int error)
+{
+  char err[60];
+  snprintf(err,sizeof(err),"error %d", error);
+  return std::string(err);
+}
+
+
diff --git a/src/xmlrpcpp/XmlRpcSocket.h b/src/xmlrpcpp/XmlRpcSocket.h
new file mode 100644
index 0000000..ed26cc6
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcSocket.h
@@ -0,0 +1,102 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCSOCKET_H_
+#define _XMLRPCSOCKET_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#include <string>
+
+
+namespace XmlRpc {
+
+  //! A platform-independent socket API.
+  class XmlRpcSocket {
+  public:
+
+    // On windows, a socket is an unsigned int large enough to hold a ptr
+    // This should match the definition of SOCKET in winsock2.h
+#if defined(_WINDOWS)
+# if defined(_WIN64)
+    typedef unsigned __int64 Socket;
+# else
+    typedef unsigned int Socket;
+# endif
+#else
+    typedef int Socket;
+#endif
+
+    //! An invalid socket constant.
+    static const Socket Invalid = (Socket) -1;
+
+    //! Creates a stream (TCP) socket. Returns XmlRpcSocket::Invalid on failure.
+    static Socket socket();
+
+    //! Closes a socket.
+    static void close(Socket socket);
+
+
+    //! Sets a stream (TCP) socket to perform non-blocking IO. Returns false on failure.
+    static bool setNonBlocking(Socket socket);
+
+
+    // The next four methods are appropriate for servers.
+
+    //! Allow the port the specified socket is bound to to be re-bound immediately so 
+    //! server re-starts are not delayed. Returns false on failure.
+    static bool setReuseAddr(Socket socket);
+
+    //! Bind to a specified port
+    static bool bind(Socket socket, int port);
+
+    //! Set socket in listen mode
+    static bool listen(Socket socket, int backlog);
+
+    //! Accept a client connection request
+    static Socket accept(Socket socket);
+
+    //! Connect a socket to a server (from a client)
+    static bool connect(Socket socket, std::string& host, int port);
+
+    //! Get the port of a bound socket
+    static int getPort(Socket socket);
+
+    //! Returns true if the last error was not a fatal one (eg, EWOULDBLOCK)
+    static bool nonFatalError();
+
+    //! Returns last errno
+    static int getError();
+
+    //! Returns message corresponding to last error
+    static std::string getErrorMsg();
+
+    //! Returns message corresponding to error
+    static std::string getErrorMsg(int error);
+  };
+
+} // namespace XmlRpc
+
+#endif
diff --git a/src/xmlrpcpp/XmlRpcSource.cpp b/src/xmlrpcpp/XmlRpcSource.cpp
new file mode 100644
index 0000000..7be77e1
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcSource.cpp
@@ -0,0 +1,225 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "XmlRpcSource.h"
+#include "XmlRpcUtil.h"
+
+#if defined(_WINDOWS)
+# include <stdio.h>
+# include <winsock2.h>
+#else
+extern "C" {
+# include <unistd.h>
+# include <stdio.h>
+}
+#endif
+
+#if USE_OPENSSL
+# include <openssl/crypto.h>
+# include <openssl/x509.h>
+# include <openssl/pem.h>
+# include <openssl/ssl.h>
+# include <openssl/err.h>
+#endif
+
+namespace XmlRpc {
+
+  struct SslProxy
+  {
+#if USE_OPENSSL
+    SSL_CTX* _ssl_ctx;
+    SSL_METHOD* _ssl_meth;
+    SSL* _ssl_ssl;
+#endif
+  };
+
+
+  XmlRpcSource::XmlRpcSource(XmlRpcSocket::Socket fd /*= -1*/, bool deleteOnClose /*= false*/) 
+    : _fd(fd)
+    , _deleteOnClose(deleteOnClose)
+    , _keepOpen(false)
+    , _sslEnabled(false)
+    , _ssl(0)
+  {
+  }
+
+  XmlRpcSource::~XmlRpcSource()
+  {
+    delete _ssl;
+  }
+
+
+  void
+  XmlRpcSource::setSslEnabled(bool b /*=true*/)
+  {
+#if USE_OPENSSL
+    _sslEnabled = b;
+#endif
+  }
+
+
+  bool
+  XmlRpcSource::doConnect()
+  {
+#if USE_OPENSSL
+    // Perform SSL if needed
+    if (_sslEnabled)
+    {
+      _ssl = new SslProxy;
+
+      SSLeay_add_ssl_algorithms();
+      _ssl->_ssl_meth = SSLv23_client_method();
+      SSL_load_error_strings();
+      _ssl->_ssl_ctx = SSL_CTX_new(_ssl->_ssl_meth);
+      _ssl->_ssl_ssl = SSL_new(_ssl->_ssl_ctx);
+      SSL_set_fd(_ssl->_ssl_ssl, _fd);
+
+      return SSL_connect(_ssl->_ssl_ssl) == 1;
+    }
+#endif
+    return true;
+  }
+
+  // Read available text from the specified socket. Returns false on error.
+  bool 
+  XmlRpcSource::nbRead(std::string& s, bool *eof)
+  {
+    const int READ_SIZE = 4096;   // Number of bytes to attempt to read at a time
+    char readBuf[READ_SIZE];
+
+    bool wouldBlock = false;
+    *eof = false;
+
+    while ( ! wouldBlock && ! *eof)
+    {
+      int n;
+
+#if USE_OPENSSL
+      // Perform SSL if needed
+      if (_ssl && _ssl->_ssl_ssl)
+      {
+        n = SSL_read(_ssl->_ssl_ssl, readBuf, READ_SIZE-1);
+      }
+      else
+#endif
+#if defined(_WINDOWS)
+      n = recv(_fd, readBuf, READ_SIZE-1, 0);
+#else
+      n = read(_fd, readBuf, READ_SIZE-1);
+#endif
+      XmlRpcUtil::log(5, "XmlRpcSocket::nbRead: read/recv returned %d.", n);
+
+      if (n > 0) {
+        readBuf[n] = 0;
+        s.append(readBuf, n);
+      } else if (n == 0) {
+        *eof = true;
+      } else if (XmlRpcSocket::nonFatalError()) {
+        wouldBlock = true;
+      } else {
+        return false;   // Error
+      }
+    }
+    return true;
+  }
+
+
+  // Write text to the socket. Returns false on error.
+  bool 
+  XmlRpcSource::nbWrite(std::string const& s, int *bytesSoFar)
+  {
+    int nToWrite = int(s.length()) - *bytesSoFar;
+    const char *sp = s.c_str() + *bytesSoFar;
+    bool wouldBlock = false;
+
+    while ( nToWrite > 0 && ! wouldBlock )
+    {
+      int n;
+#if USE_OPENSSL
+      // Perform SSL if needed
+      if (_ssl && _ssl->_ssl_ssl)
+      {
+        n = SSL_write(_ssl->_ssl_ssl, sp, nToWrite);
+      }
+      else
+#endif
+#if defined(_WINDOWS)
+      n = send(_fd, sp, nToWrite, 0);
+#else
+      n = write(_fd, sp, nToWrite);
+#endif
+
+      XmlRpcUtil::log(5, "XmlRpcSocket::nbWrite: send/write returned %d.", n);
+
+      if (n > 0)
+      {
+        sp += n;
+        *bytesSoFar += n;
+        nToWrite -= n;
+      }
+      else if (XmlRpcSocket::nonFatalError())
+      {
+        wouldBlock = true;
+      }
+      else
+      {
+        return false;   // Error
+      }
+    }
+    return true;
+  }
+
+  void
+  XmlRpcSource::close()
+  {
+#if USE_OPENSSL
+    if (_ssl && _ssl->_ssl_ssl)
+    {
+      SSL_shutdown(_ssl->_ssl_ssl);
+
+      // Should close be called here ? ...
+
+      SSL_free(_ssl->_ssl_ssl);
+      SSL_CTX_free(_ssl->_ssl_ctx);
+
+      delete _ssl;
+      _ssl = 0;
+    }
+#endif
+    if ( (int)_fd != -1)
+    {
+      XmlRpcUtil::log(2,"XmlRpcSource::close: closing socket %d.", _fd);
+      XmlRpcSocket::close(_fd);
+      _fd = -1;
+    }
+    if (_deleteOnClose)
+    {
+      XmlRpcUtil::log(2,"XmlRpcSource::close: deleting this");
+      _deleteOnClose = false;
+      delete this;
+    }
+  }
+
+} // namespace XmlRpc
diff --git a/src/xmlrpcpp/XmlRpcSource.h b/src/xmlrpcpp/XmlRpcSource.h
new file mode 100644
index 0000000..2d78c33
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcSource.h
@@ -0,0 +1,104 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCSOURCE_H_
+#define _XMLRPCSOURCE_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#include "XmlRpcSocket.h"
+
+
+namespace XmlRpc {
+
+  //! Proxy for Ssl data to avoid including headers here.
+  struct SslProxy;
+
+  //! An RPC source represents a file descriptor to monitor
+  class XmlRpcSource {
+  public:
+    //! Constructor
+    //!  @param fd The socket file descriptor to monitor.
+    //!  @param deleteOnClose If true, the object deletes itself when close is called.
+    XmlRpcSource(XmlRpcSocket::Socket fd = XmlRpcSocket::Invalid, bool deleteOnClose = false);
+
+    //! Destructor
+    virtual ~XmlRpcSource();
+
+    //! Return the file descriptor being monitored.
+    XmlRpcSocket::Socket getfd() const { return _fd; }
+    //! Specify the file descriptor to monitor.
+    void setfd(XmlRpcSocket::Socket fd) { _fd = fd; }
+
+    //! Return whether the file descriptor should be kept open if it is no longer monitored.
+    bool getKeepOpen() const { return _keepOpen; }
+    //! Specify whether the file descriptor should be kept open if it is no longer monitored.
+    void setKeepOpen(bool b=true) { _keepOpen = b; }
+
+    //! Return whether ssl is enabled.
+    bool getSslEnabled() const { return _sslEnabled; }
+    //! Specify whether to enable ssl. Use getSslEnabled() to verify that Ssl is available.
+    void setSslEnabled(bool b=true);
+
+    //! Close the owned fd. If deleteOnClose was specified at construction, the object is deleted.
+    virtual void close();
+
+    //! Return true to continue monitoring this source
+    virtual unsigned handleEvent(unsigned eventType) = 0;
+
+  protected:
+
+    // Execution processing helpers
+    virtual bool doConnect();
+
+    //! Read text from the source. Returns false on error.
+    bool nbRead(std::string& s, bool *eof);
+
+    //! Write text to the source. Returns false on error.
+    bool nbWrite(std::string const& s, int *bytesSoFar);
+
+  private:
+
+    // Socket. This is an int for linux/unix, and unsigned on win32, and unsigned __int64 on win64.
+    // Casting to int/long/unsigned on win64 is a bad idea.
+    XmlRpcSocket::Socket _fd;
+
+    // In the server, a new source (XmlRpcServerConnection) is created
+    // for each connected client. When each connection is closed, the
+    // corresponding source object is deleted.
+    bool _deleteOnClose;
+
+    // In the client, keep connections open if you intend to make multiple calls.
+    bool _keepOpen;
+
+    // Enable use of SSL
+    bool _sslEnabled;
+
+    // SSL data
+    SslProxy *_ssl;
+  };
+} // namespace XmlRpc
+
+#endif //_XMLRPCSOURCE_H_
diff --git a/src/xmlrpcpp/XmlRpcThread.cpp b/src/xmlrpcpp/XmlRpcThread.cpp
new file mode 100644
index 0000000..9cd73a9
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcThread.cpp
@@ -0,0 +1,99 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#if defined(XMLRPC_THREADS)
+
+#include <config.h>
+
+#include "XmlRpcThread.h"
+
+#if defined(_WINDOWS)
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# include <process.h>
+#else
+# include <pthread.h>
+#endif
+
+
+using namespace XmlRpc;
+
+
+//! Destructor. Does not perform a join() (ie, the thread may continue to run).
+XmlRpcThread::~XmlRpcThread()
+{
+  if (_pThread)
+  {
+#if defined(_WINDOWS)
+    ::CloseHandle((HANDLE)_pThread);
+#else
+    ::pthread_detach((pthread_t)_pThread);
+#endif
+    _pThread = 0;
+  }
+}
+
+//! Execute the run method of the runnable object in a separate thread.
+//! Returns immediately in the calling thread.
+void
+XmlRpcThread::start()
+{
+  if ( ! _pThread)
+  {
+#if defined(_WINDOWS)
+    unsigned threadID;
+    _pThread = (HANDLE)_beginthreadex(NULL, 0, &runInThread, this, 0, &threadID);
+#else
+    ::pthread_create((pthread_t*) &_pThread, NULL, &runInThread, this);
+#endif
+  }
+}
+
+//! Waits until the thread exits.
+void
+XmlRpcThread::join()
+{
+  if (_pThread)
+  {
+#if defined(_WINDOWS)
+    ::WaitForSingleObject(_pThread, INFINITE);
+    ::CloseHandle(_pThread);
+#else
+    ::pthread_join((pthread_t)_pThread, 0);
+#endif
+    _pThread = 0;
+  }
+}
+
+//! Start the runnable going in a thread
+unsigned int
+XmlRpcThread::runInThread(void* pThread)
+{
+  XmlRpcThread* t = (XmlRpcThread*)pThread;
+  t->getRunnable()->run();
+  return 0;
+}
+
+#endif // XMLRPC_THREADS
+
+
diff --git a/src/xmlrpcpp/XmlRpcThread.h b/src/xmlrpcpp/XmlRpcThread.h
new file mode 100644
index 0000000..2df0c0b
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcThread.h
@@ -0,0 +1,81 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCTHREAD_H_
+#define _XMLRPCTHREAD_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+namespace XmlRpc {
+
+  //! An abstract class providing an interface for objects that can run in a separate thread.
+  class XmlRpcRunnable {
+  public:
+      //! Code to be executed.
+      virtual void run() = 0;
+  };  // class XmlRpcRunnable
+
+
+  //! A simple platform-independent thread API implemented for posix and windows.
+  class XmlRpcThread {
+  public:
+    //! Construct a thread object. Not usable until setRunnable() has been called.
+    XmlRpcThread() : _runner(0), _pThread(0) {}
+
+    //! Construct a thread object.
+    XmlRpcThread(XmlRpcRunnable* runnable) : _runner(runnable), _pThread(0) {}
+
+    //! Destructor. Does not perform a join() (ie, the thread may continue to run).
+    ~XmlRpcThread();
+
+    //! Execute the run method of the runnable object in a separate thread.
+    //! Returns immediately in the calling thread.
+    void start();
+
+    //! Waits until the thread exits.
+    void join();
+
+    //! Access the runnable
+    XmlRpcRunnable* getRunnable() const { return _runner; }
+
+    //! Set the runnable
+    void setRunnable(XmlRpcRunnable* r) { _runner = r; }
+
+  private:
+
+    //! Start the runnable going in a thread
+    static unsigned int __stdcall runInThread(void* pThread);
+
+    //! Code to be executed
+    XmlRpcRunnable* _runner;
+
+    //! Native thread object
+    void* _pThread;
+
+  };  // class XmlRpcThread
+
+}  // namespace XmlRpc
+
+#endif	//  _XMLRPCTHREAD_H_
diff --git a/src/xmlrpcpp/XmlRpcThreadedServer.cpp b/src/xmlrpcpp/XmlRpcThreadedServer.cpp
new file mode 100644
index 0000000..302f9f4
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcThreadedServer.cpp
@@ -0,0 +1,51 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#if defined(XMLRPC_THREADS)
+
+#include "XmlRpcThreadedServer.h"
+//#include "XmlRpcServerConnection.h"
+
+#include <config.h>
+
+using namespace XmlRpc;
+
+// executeRequestThreaded:
+//  remove the serverConnection from the dispatcher (but don't close the socket)
+//  push the request onto the request queue 
+//   (acquire the mutex, push_back request, release mutex, incr semaphore)
+//  
+
+// worker::run
+//  while ! stopped
+//    pop a request off the request queue (block on semaphore/decr, acquire mutex, get request, rel)
+//    executeRequest (parse, run, generate response)
+//    notify the serverConnection that the response is available
+//    (the serverConnection needs to add itself back to the dispatcher safely - mutex)
+
+// How do I interrupt the dispatcher if it is waiting in a select call? 
+//  i) Replace select with WaitForMultipleObjects, using WSAEventSelect to associate
+//     each socket with an event object, and adding an additional "signal" event.
+//
+
+#endif // XMLRPC_THREADS
diff --git a/src/xmlrpcpp/XmlRpcThreadedServer.h b/src/xmlrpcpp/XmlRpcThreadedServer.h
new file mode 100644
index 0000000..6fc5b4d
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcThreadedServer.h
@@ -0,0 +1,87 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCTHREADEDSERVER_H_
+#define _XMLRPCTHREADEDSERVER_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#ifndef MAKEDEPEND
+# include <map>
+# include <vector>
+#endif
+
+
+#include "XmlRpcMutex.h"
+#include "XmlRpcServer.h"
+#include "XmlRpcThread.h"
+
+
+namespace XmlRpc {
+
+  //! A class to handle multiple simultaneous XML RPC requests
+  class XmlRpcThreadedServer : public XmlRpcServer {
+  public:
+
+    //! Create a server object with a specified number of worker threads.
+    XmlRpcThreadedServer(int nWorkers = 6) : _workers(nWorkers) {}
+
+
+    //! Execute a request
+
+  protected:
+
+    //! Each client request is assigned to one worker to handle.
+    //! Workers are executed on separate threads, and one worker may be
+    //! responsible for dispatching events to multiple client connections.
+    class Worker : XmlRpcRunnable {
+    public:
+      //! Constructor. Executes the run method in a separate thread.
+      Worker() { _thread.setRunnable(this); _thread.start(); }
+
+      //! Implement the Runnable interface
+      void run();
+
+    protected:
+
+      //! The thread this worker is running in.
+      XmlRpcThread _thread;
+
+    };
+
+
+    //! The worker pool
+    std::vector<Worker> _workers;
+
+
+    //! Serialize dispatcher access
+    XmlRpcMutex _mutex;
+
+
+  };  // class XmlRpcThreadedServer
+
+}
+
+#endif  // _XMLRPCTHREADEDSERVER_H_
diff --git a/src/xmlrpcpp/XmlRpcUtil.cpp b/src/xmlrpcpp/XmlRpcUtil.cpp
new file mode 100644
index 0000000..a2ae608
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcUtil.cpp
@@ -0,0 +1,338 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "XmlRpcUtil.h"
+
+#include <ctype.h>
+#include <iostream>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "XmlRpc.h"
+
+using namespace XmlRpc;
+
+
+//#define USE_WINDOWS_DEBUG // To make the error and log messages go to VC++ debug output
+#ifdef USE_WINDOWS_DEBUG
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#endif
+
+// Version id
+const char XmlRpc::XMLRPC_VERSION[] = "XMLRPC++ 0.8";
+
+// Default log verbosity: 0 for no messages through 5 (writes everything)
+int XmlRpcLogHandler::_verbosity = 0;
+
+// Default log handler
+static class DefaultLogHandler : public XmlRpcLogHandler {
+public:
+
+  void log(int level, const char* msg) { 
+#ifdef USE_WINDOWS_DEBUG
+    if (level <= _verbosity) { OutputDebugString(msg); OutputDebugString("\n"); }
+#else
+    if (level <= _verbosity) std::cout << msg << std::endl; 
+#endif  
+  }
+
+} defaultLogHandler;
+
+// Message log singleton
+XmlRpcLogHandler* XmlRpcLogHandler::_logHandler = &defaultLogHandler;
+
+
+// Default error handler
+static class DefaultErrorHandler : public XmlRpcErrorHandler {
+public:
+
+  void error(const char* msg) {
+#ifdef USE_WINDOWS_DEBUG
+    OutputDebugString(msg); OutputDebugString("\n");
+#else
+    std::cerr << msg << std::endl; 
+#endif  
+  }
+} defaultErrorHandler;
+
+
+// Error handler singleton
+XmlRpcErrorHandler* XmlRpcErrorHandler::_errorHandler = &defaultErrorHandler;
+
+
+// Easy API for log verbosity
+int XmlRpc::getVerbosity() { return XmlRpcLogHandler::getVerbosity(); }
+void XmlRpc::setVerbosity(int level) { XmlRpcLogHandler::setVerbosity(level); }
+
+ 
+
+void XmlRpcUtil::log(int level, const char* fmt, ...)
+{
+  if (level <= XmlRpcLogHandler::getVerbosity())
+  {
+    va_list va;
+    char buf[1024];
+    va_start( va, fmt);
+    vsnprintf(buf,sizeof(buf)-1,fmt,va);
+    buf[sizeof(buf)-1] = 0;
+    XmlRpcLogHandler::getLogHandler()->log(level, buf);
+  }
+}
+
+
+void XmlRpcUtil::error(const char* fmt, ...)
+{
+  va_list va;
+  va_start(va, fmt);
+  char buf[1024];
+  vsnprintf(buf,sizeof(buf)-1,fmt,va);
+  buf[sizeof(buf)-1] = 0;
+  XmlRpcErrorHandler::getErrorHandler()->error(buf);
+}
+
+// Returns true if the tag is parsed. No attributes are parsed.
+// Sets val to the contents between <tag> and </tag>, or an empty string if <tag/> is found.
+// Updates offset to char after </tag>
+bool 
+XmlRpcUtil::parseTag(const char* tag, std::string const& xml, int* offset, std::string &val)
+{
+  size_t nxml = xml.length();
+  if (*offset >= int(nxml)) return false;
+
+  // Find <tag (skips over anything preceeding...)
+  std::string stag = "<";
+  stag += tag;
+  size_t istart = xml.find(stag, *offset);
+  if (istart == std::string::npos) return false;
+
+  istart += stag.length();
+
+  // Advance istart past > or />
+  bool lastSlash = false;
+  while (istart < nxml && xml[istart] != '>')
+  {
+    lastSlash = (xml[istart] == '/');
+    ++ istart;
+  }
+
+  if (istart == nxml) return false;
+
+  val.clear();
+  if (lastSlash)  // <tag/>
+  {
+    *offset = int(istart+1);  // 1 after >
+  }
+  else            // Find </tag>
+  {
+    std::string etag = "</";
+    etag += tag;
+    etag += ">";
+    size_t iend = xml.find(etag, istart);
+
+    if (iend == std::string::npos) return false;
+
+    *offset = int(iend + etag.length());
+    ++ istart;
+    val = xml.substr(istart, iend-istart);
+  }
+
+  return true;
+}
+
+
+// Returns true if the tag is found and updates offset to the char after the tag
+bool 
+XmlRpcUtil::findTag(const char* tag, std::string const& xml, int* offset, bool* emptyTag)
+{
+  size_t nxml = xml.length();
+  if (*offset >= int(nxml)) return false;
+  std::string stag = "<";
+  stag += tag;
+  size_t istart = xml.find(stag, *offset);
+  if (istart == std::string::npos)
+    return false;
+
+  istart += stag.length();
+
+  // Advance istart past > or />, skips attribs
+  bool lastSlash = false;
+  while (istart < nxml && xml[istart] != '>')
+  {
+    lastSlash = (xml[istart] == '/');
+    ++ istart;
+  }
+
+  if (istart == nxml)
+    return false;
+
+  *emptyTag = lastSlash;
+  *offset = int(istart+1);  // char after >
+  return true;
+}
+
+
+// Returns true if the <tag> or <tag/> is found at the specified offset (modulo any whitespace)
+// and updates offset to the char after the tag. *emptyTag is set to true if <tag/> is found, false otherwise
+bool 
+XmlRpcUtil::nextTagIs(const char* tag, std::string const& xml, int* offset, bool *emptyTag)
+{
+  if (*offset >= int(xml.length()))
+    return false;
+
+  const char* cp = xml.c_str() + *offset;
+  int nc = 0;
+  while (*cp && isspace(*cp))
+  {
+    ++cp;
+    ++nc;
+  }
+
+  int len = int(strlen(tag));
+  if  (*cp == '<' && (strncmp(cp+1, tag, len) == 0))
+  {
+    cp += len + 1;
+    if (*cp == '>') // <tag>
+    {
+      *offset += nc + len + 2;
+      *emptyTag = false;
+      return true;
+    }
+
+    while (*cp && isspace(*cp)) { ++cp; ++nc; }
+
+    if (*cp == '/' && *(cp + 1) == '>') // <tag />
+    {
+      *offset += nc + len + 3;
+      *emptyTag = true;
+      return true;
+    }
+  }
+  return false;
+}
+
+
+// Returns true if the next tag found at the specified offset is </tag>
+// and updates offset to the char after the tag.
+bool 
+XmlRpcUtil::nextTagIsEnd(const char* tag, std::string const& xml, int* offset)
+{
+  if (*offset >= int(xml.length()))
+    return false;
+
+  const char* cp = xml.c_str() + *offset;
+  int nc = 0;
+  while (*cp && *cp != '<')
+  {
+    ++cp;
+    ++nc;
+  }
+
+  int len = int(strlen(tag));
+  if  (*cp == '<' && *(cp+1) == '/' && (strncmp(cp+2, tag, len) == 0) && *(cp + len + 2) == '>')
+  {
+    *offset += nc + len + 3;
+    return true;
+  }
+
+  return false;
+}
+
+
+// xml encodings (xml-encoded entities are preceded with '&')
+static const char  AMP = '&';
+static const char  rawEntity[] = { '<',   '>',   '&',    '\'',    '\"',    0 };
+static const char* xmlEntity[] = { "lt;", "gt;", "amp;", "apos;", "quot;", 0 };
+static const int   xmlEntLen[] = { 3,     3,     4,      5,       5 };
+
+
+// Replace xml-encoded entities with the raw text equivalents.
+
+std::string 
+XmlRpcUtil::xmlDecode(const std::string& encoded)
+{
+  std::string::size_type iAmp = encoded.find(AMP);
+  if (iAmp == std::string::npos)
+    return encoded;
+
+  std::string decoded(encoded, 0, iAmp);
+  std::string::size_type iSize = encoded.size();
+  decoded.reserve(iSize);
+
+  const char* ens = encoded.c_str();
+  while (iAmp != iSize) {
+    if (encoded[iAmp] == AMP && iAmp+1 < iSize) {
+      int iEntity;
+      for (iEntity=0; xmlEntity[iEntity] != 0; ++iEntity)
+	//if (encoded.compare(iAmp+1, xmlEntLen[iEntity], xmlEntity[iEntity]) == 0)
+	if (strncmp(ens+iAmp+1, xmlEntity[iEntity], xmlEntLen[iEntity]) == 0)
+        {
+          decoded += rawEntity[iEntity];
+          iAmp += xmlEntLen[iEntity]+1;
+          break;
+        }
+      if (xmlEntity[iEntity] == 0)    // unrecognized sequence
+        decoded += encoded[iAmp++];
+
+    } else {
+      decoded += encoded[iAmp++];
+    }
+  }
+    
+  return decoded;
+}
+
+
+// Replace raw text with xml-encoded entities.
+
+std::string 
+XmlRpcUtil::xmlEncode(const std::string& raw)
+{
+  std::string::size_type iRep = raw.find_first_of(rawEntity);
+  if (iRep == std::string::npos)
+    return raw;
+
+  std::string encoded(raw, 0, iRep);
+  std::string::size_type iSize = raw.size();
+
+  while (iRep != iSize) {
+    int iEntity;
+    for (iEntity=0; rawEntity[iEntity] != 0; ++iEntity)
+      if (raw[iRep] == rawEntity[iEntity])
+      {
+        encoded += AMP;
+        encoded += xmlEntity[iEntity];
+        break;
+      }
+    if (rawEntity[iEntity] == 0)
+      encoded += raw[iRep];
+    ++iRep;
+  }
+  return encoded;
+}
+
+
+
diff --git a/src/xmlrpcpp/XmlRpcUtil.h b/src/xmlrpcpp/XmlRpcUtil.h
new file mode 100644
index 0000000..e42a000
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcUtil.h
@@ -0,0 +1,85 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCUTIL_H_
+#define _XMLRPCUTIL_H_
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#include <string>
+
+#if defined(_MSC_VER)
+# define snprintf	    _snprintf
+# define vsnprintf    _vsnprintf
+# define strcasecmp	  _stricmp
+# define strncasecmp	_strnicmp
+#elif defined(__BORLANDC__)
+# define strcasecmp stricmp
+# define strncasecmp strnicmp
+#endif
+
+namespace XmlRpc {
+
+  //! Utilities for XML parsing, encoding, and decoding and message handlers.
+  class XmlRpcUtil {
+  public:
+
+    //! Parses the specified tag. No attributes are parsed, no validation is done.
+    //! Sets val to the contents between <tag> and </tag>, or an empty string if <tag/> is found.
+    //! Returns true if the tag is parsed. Updates offset to char after </tag>
+    static bool parseTag(const char* tag, std::string const& xml, int* offset, std::string &val);
+
+    //! Returns true if the tag is found and updates offset to the char after the tag.
+    //! If the tag is of the form <tag/>, emptyTag is set to true.
+    static bool findTag(const char* tag, std::string const& xml, int* offset, bool* emptyTag);
+
+    //! Returns true if the tag is found at the specified offset (modulo any whitespace)
+    //! and updates offset to the char after the tag. If an empty tag is found (eg,
+    //! <tag/>), true is returned, offset is updated to be after the close of the tag, and
+    //! emptyTag is set to true.
+    static bool nextTagIs(const char* tag, std::string const& xml, int* offset, bool* emptyTag);
+
+    //! Passes over the next tag found at the specified offset is </tag>, 
+    //! offset is updated to be after the close of the tag.
+    //! Will skip over all characters until < is seen.
+    static bool nextTagIsEnd(const char* tag, std::string const& xml, int* offset);
+
+
+    //! Convert raw text to encoded xml.
+    static std::string xmlEncode(const std::string& raw);
+
+    //! Convert encoded xml to raw text
+    static std::string xmlDecode(const std::string& encoded);
+
+
+    //! Dump messages somewhere
+    static void log(int level, const char* fmt, ...);
+
+    //! Dump error messages somewhere
+    static void error(const char* fmt, ...);
+
+  };
+} // namespace XmlRpc
+
+#endif // _XMLRPCUTIL_H_
diff --git a/src/xmlrpcpp/XmlRpcValue.cpp b/src/xmlrpcpp/XmlRpcValue.cpp
new file mode 100644
index 0000000..84f753a
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcValue.cpp
@@ -0,0 +1,703 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#include <config.h>
+
+#include "XmlRpcValue.h"
+#include "XmlRpcException.h"
+#include "XmlRpcUtil.h"
+#include "base64.h"
+
+#include <iostream>
+#include <ostream>
+#include <stdlib.h>
+#include <stdio.h>
+
+
+namespace XmlRpc {
+
+
+  static const char VALUE_TAG[]     = "value";
+  static const char NIL_TAG[]       = "nil";
+  static const char BOOLEAN_TAG[]   = "boolean";
+  static const char DOUBLE_TAG[]    = "double";
+  static const char INT_TAG[]       = "int";
+  static const char I4_TAG[]        = "i4";
+  static const char STRING_TAG[]    = "string";
+  static const char DATETIME_TAG[]  = "dateTime.iso8601";
+  static const char BASE64_TAG[]    = "base64";
+
+  static const char ARRAY_TAG[]     = "array";
+  static const char DATA_TAG[]      = "data";
+
+  static const char STRUCT_TAG[]    = "struct";
+  static const char MEMBER_TAG[]    = "member";
+  static const char NAME_TAG[]      = "name";
+
+      
+  // Format strings
+  std::string XmlRpcValue::_doubleFormat("%f");
+
+
+
+  // Clean up
+  void XmlRpcValue::invalidate()
+  {
+    switch (_type) {
+      case TypeString:    delete _value.asString; break;
+      case TypeDateTime:  delete _value.asTime;   break;
+      case TypeBase64:    delete _value.asBinary; break;
+      case TypeArray:     delete _value.asArray;  break;
+      case TypeStruct:    delete _value.asStruct; break;
+      default: break;
+    }
+    _type = TypeInvalid;
+    _value.asBinary = 0;
+  }
+
+  
+  // Type checking
+  void XmlRpcValue::assertType(Type t) const
+  {
+    if (_type != t)
+    {
+      throw XmlRpcException("type error");
+    }
+  }
+
+  void XmlRpcValue::assertType(Type t)
+  {
+    if (_type == TypeInvalid)
+    {
+      _type = t;
+      switch (_type) {    // Ensure there is a valid value for the type
+        case TypeString:   _value.asString = new std::string(); break;
+        case TypeDateTime: _value.asTime = new struct tm();     break;
+        case TypeBase64:   _value.asBinary = new BinaryData();  break;
+        case TypeArray:    _value.asArray = new ValueArray();   break;
+        case TypeStruct:   _value.asStruct = new ValueStruct(); break;
+        default:           _value.asBinary = 0; break;
+      }
+    }
+    else if (_type != t)
+    {
+      throw XmlRpcException("type error");
+    }
+  }
+
+  void XmlRpcValue::assertArray(int size) const
+  {
+    if (_type != TypeArray)
+      throw XmlRpcException("type error: expected an array");
+    else if (int(_value.asArray->size()) < size)
+      throw XmlRpcException("range error: array index too large");
+  }
+
+
+  void XmlRpcValue::assertArray(int size)
+  {
+    if (_type == TypeInvalid) {
+      _type = TypeArray;
+      _value.asArray = new ValueArray(size);
+    } else if (_type == TypeArray) {
+      if (int(_value.asArray->size()) < size)
+        _value.asArray->resize(size);
+    } else
+      throw XmlRpcException("type error: expected an array");
+  }
+
+  void XmlRpcValue::assertStruct()
+  {
+    if (_type == TypeInvalid) {
+      _type = TypeStruct;
+      _value.asStruct = new ValueStruct();
+    } else if (_type != TypeStruct)
+      throw XmlRpcException("type error: expected a struct");
+  }
+
+
+  // Operators
+  XmlRpcValue& XmlRpcValue::operator=(XmlRpcValue const& rhs)
+  {
+    if (this != &rhs)
+    {
+      invalidate();
+      _type = rhs._type;
+      switch (_type) {
+        case TypeBoolean:  _value.asBool = rhs._value.asBool; break;
+        case TypeInt:      _value.asInt = rhs._value.asInt; break;
+        case TypeDouble:   _value.asDouble = rhs._value.asDouble; break;
+        case TypeDateTime: _value.asTime = new struct tm(*rhs._value.asTime); break;
+        case TypeString:   _value.asString = new std::string(*rhs._value.asString); break;
+        case TypeBase64:   _value.asBinary = new BinaryData(*rhs._value.asBinary); break;
+        case TypeArray:    _value.asArray = new ValueArray(*rhs._value.asArray); break;
+        case TypeStruct:   _value.asStruct = new ValueStruct(*rhs._value.asStruct); break;
+        default:           _value.asBinary = 0; break;
+      }
+    }
+    return *this;
+  }
+
+
+  // Predicate for tm equality
+  static bool tmEq(struct tm const& t1, struct tm const& t2) {
+    return t1.tm_sec == t2.tm_sec && t1.tm_min == t2.tm_min &&
+            t1.tm_hour == t2.tm_hour && t1.tm_mday == t1.tm_mday &&
+            t1.tm_mon == t2.tm_mon && t1.tm_year == t2.tm_year;
+  }
+
+  bool XmlRpcValue::operator==(XmlRpcValue const& other) const
+  {
+    if (_type != other._type)
+      return false;
+
+    switch (_type) {
+      case TypeBoolean:  return ( !_value.asBool && !other._value.asBool) ||
+                                ( _value.asBool && other._value.asBool);
+      case TypeInt:      return _value.asInt == other._value.asInt;
+      case TypeDouble:   return _value.asDouble == other._value.asDouble;
+      case TypeDateTime: return tmEq(*_value.asTime, *other._value.asTime);
+      case TypeString:   return *_value.asString == *other._value.asString;
+      case TypeBase64:   return *_value.asBinary == *other._value.asBinary;
+      case TypeArray:    return *_value.asArray == *other._value.asArray;
+
+      // The map<>::operator== requires the definition of value< for kcc
+      case TypeStruct:   //return *_value.asStruct == *other._value.asStruct;
+        {
+          if (_value.asStruct->size() != other._value.asStruct->size())
+            return false;
+          
+          ValueStruct::const_iterator it1=_value.asStruct->begin();
+          ValueStruct::const_iterator it2=other._value.asStruct->begin();
+          while (it1 != _value.asStruct->end()) {
+            const XmlRpcValue& v1 = it1->second;
+            const XmlRpcValue& v2 = it2->second;
+            if ( ! (v1 == v2))
+              return false;
+            it1++;
+            it2++;
+          }
+          return true;
+        }
+      default: break;
+    }
+    return true;    // Both invalid values ...
+  }
+
+  bool XmlRpcValue::operator!=(XmlRpcValue const& other) const
+  {
+    return !(*this == other);
+  }
+
+
+  // Works for strings, binary data, arrays, and structs.
+  int XmlRpcValue::size() const
+  {
+    switch (_type) {
+      case TypeString: return int(_value.asString->size());
+      case TypeBase64: return int(_value.asBinary->size());
+      case TypeArray:  return int(_value.asArray->size());
+      case TypeStruct: return int(_value.asStruct->size());
+      default: break;
+    }
+
+    throw XmlRpcException("type error");
+  }
+
+  // Checks for existence of struct member
+  bool XmlRpcValue::hasMember(const std::string& name) const
+  {
+    return _type == TypeStruct && _value.asStruct->find(name) != _value.asStruct->end();
+  }
+
+
+  // Set the value from xml. The chars at *offset into valueXml 
+  // should be the start of a <value> tag. Destroys any existing value.
+  bool XmlRpcValue::fromXml(std::string const& valueXml, int* offset)
+  {
+    int savedOffset = *offset;
+
+    invalidate();
+    bool emptyTag;
+    if ( ! XmlRpcUtil::nextTagIs(VALUE_TAG, valueXml, offset, &emptyTag))
+      return false;       // Not a value, offset not updated
+
+    // No value? Pretend its an empty string...
+    if (emptyTag)
+    {
+      *this = "";
+      return true;
+    }
+
+    // No type tag? Assume string
+//    bool result = true;
+    bool result = false;
+
+    int valueOffset = *offset;
+
+    if (XmlRpcUtil::nextTagIsEnd(VALUE_TAG, valueXml, offset))
+    {
+      result = true;
+      return stringFromXml(valueXml, &valueOffset);
+    }
+    else if (XmlRpcUtil::nextTagIs(NIL_TAG, valueXml, offset, &emptyTag))
+    {
+      _type = TypeNil;
+      result = true;
+    }
+    else if (XmlRpcUtil::nextTagIs(BOOLEAN_TAG, valueXml, offset, &emptyTag))
+    {
+      if (emptyTag) {
+        *this = false;
+        result = true;
+      } else
+        result = boolFromXml(valueXml, offset) && 
+                 XmlRpcUtil::nextTagIsEnd(BOOLEAN_TAG, valueXml, offset);
+    }
+    else if (XmlRpcUtil::nextTagIs(I4_TAG, valueXml, offset, &emptyTag))
+    {
+      if (emptyTag) {
+        *this = 0;
+        result = true;
+      } else
+        result = intFromXml(valueXml, offset) && 
+                 XmlRpcUtil::nextTagIsEnd(I4_TAG, valueXml, offset);
+    }
+    else if (XmlRpcUtil::nextTagIs(INT_TAG, valueXml, offset, &emptyTag))
+    {
+      if (emptyTag) {
+        *this = 0;
+        result = true;
+      } else
+        result = intFromXml(valueXml, offset) && 
+                 XmlRpcUtil::nextTagIsEnd(INT_TAG, valueXml, offset);
+    }
+    else if (XmlRpcUtil::nextTagIs(DOUBLE_TAG, valueXml, offset, &emptyTag))
+    {
+      if (emptyTag) {
+        *this = 0.0;
+        result = true;
+      } else
+        result = doubleFromXml(valueXml, offset) && 
+                 XmlRpcUtil::nextTagIsEnd(DOUBLE_TAG, valueXml, offset);
+    }
+    else if (XmlRpcUtil::nextTagIs(STRING_TAG, valueXml, offset, &emptyTag))
+    {
+      if (emptyTag) {
+        *this = "";
+        result = true;
+      } else
+        result = stringFromXml(valueXml, offset) && 
+                 XmlRpcUtil::nextTagIsEnd(STRING_TAG, valueXml, offset);
+    }
+    else if (XmlRpcUtil::nextTagIs(DATETIME_TAG, valueXml, offset, &emptyTag))
+    {
+      if (emptyTag)
+        result = false;
+      else
+        result = timeFromXml(valueXml, offset) && 
+                 XmlRpcUtil::nextTagIsEnd(DATETIME_TAG, valueXml, offset);
+    }
+    else if (XmlRpcUtil::nextTagIs(BASE64_TAG, valueXml, offset, &emptyTag))
+    {
+      if (emptyTag)
+        result = binaryFromXml("", 0);
+      else
+        result = binaryFromXml(valueXml, offset) && 
+                 XmlRpcUtil::nextTagIsEnd(BASE64_TAG, valueXml, offset);
+    }
+    else if (XmlRpcUtil::nextTagIs(ARRAY_TAG, valueXml, offset, &emptyTag))
+    {
+      if (emptyTag)
+        result = false;
+      else
+        result = arrayFromXml(valueXml, offset) && 
+                 XmlRpcUtil::nextTagIsEnd(ARRAY_TAG, valueXml, offset);
+    }
+    else if (XmlRpcUtil::nextTagIs(STRUCT_TAG, valueXml, offset, &emptyTag))
+    {
+      if (emptyTag)
+        result = false;
+      else
+        result = structFromXml(valueXml, offset) && 
+                 XmlRpcUtil::nextTagIsEnd(STRUCT_TAG, valueXml, offset);
+    }
+
+    // Unrecognized tag after <value> or no </value>
+    if ( ! result || ! XmlRpcUtil::nextTagIsEnd(VALUE_TAG, valueXml, offset))
+    {
+      *offset = savedOffset;
+      return false;
+    }
+
+    return true;
+  }
+
+  // Encode the Value in xml
+  std::string XmlRpcValue::toXml() const
+  {
+    switch (_type) {
+      case TypeNil:      return nilToXml();
+      case TypeBoolean:  return boolToXml();
+      case TypeInt:      return intToXml();
+      case TypeDouble:   return doubleToXml();
+      case TypeString:   return stringToXml();
+      case TypeDateTime: return timeToXml();
+      case TypeBase64:   return binaryToXml();
+      case TypeArray:    return arrayToXml();
+      case TypeStruct:   return structToXml();
+      default: break;
+    }
+    return std::string();   // Invalid value
+  }
+
+
+  // Boolean
+  bool XmlRpcValue::boolFromXml(std::string const& valueXml, int* offset)
+  {
+    const char* valueStart = valueXml.c_str() + *offset;
+    char* valueEnd;
+    long ivalue = strtol(valueStart, &valueEnd, 10);
+    if (valueEnd == valueStart || (ivalue != 0 && ivalue != 1))
+      return false;
+
+    _type = TypeBoolean;
+    _value.asBool = (ivalue == 1);
+    *offset += int(valueEnd - valueStart);
+    return true;
+  }
+
+  std::string XmlRpcValue::nilToXml() const
+  {
+    return "<value><nil/></value>";
+  }
+
+  std::string XmlRpcValue::boolToXml() const
+  {
+    static std::string booleanTrueXml("<value><boolean>1</boolean></value>");
+    static std::string booleanFalseXml("<value><boolean>0</boolean></value>");
+    return _value.asBool ? booleanTrueXml : booleanFalseXml;
+  }
+
+  // Int
+  bool XmlRpcValue::intFromXml(std::string const& valueXml, int* offset)
+  {
+    const char* valueStart = valueXml.c_str() + *offset;
+    char* valueEnd;
+    long ivalue = strtol(valueStart, &valueEnd, 10);
+    if (valueEnd == valueStart)
+      return false;
+
+    _type = TypeInt;
+    _value.asInt = int(ivalue);
+    *offset += int(valueEnd - valueStart);
+    return true;
+  }
+
+  std::string XmlRpcValue::intToXml() const
+  {
+    char buf[256];
+    snprintf(buf, sizeof(buf)-1, "<value><i4>%d</i4></value>", _value.asInt);
+    buf[sizeof(buf)-1] = 0;
+
+    return std::string(buf);
+  }
+
+  // Double
+  bool XmlRpcValue::doubleFromXml(std::string const& valueXml, int* offset)
+  {
+    const char* valueStart = valueXml.c_str() + *offset;
+    char* valueEnd;
+    double dvalue = strtod(valueStart, &valueEnd);
+    if (valueEnd == valueStart)
+      return false;
+
+    _type = TypeDouble;
+    _value.asDouble = dvalue;
+    *offset += int(valueEnd - valueStart);
+    return true;
+  }
+
+  std::string XmlRpcValue::doubleToXml() const
+  {
+    char fmtbuf[256], buf[256];
+    snprintf(fmtbuf, sizeof(fmtbuf)-1, "<value><double>%s</double></value>", getDoubleFormat().c_str());
+    fmtbuf[sizeof(fmtbuf)-1] = 0;
+    snprintf(buf, sizeof(buf)-1, fmtbuf, _value.asDouble);
+    buf[sizeof(buf)-1] = 0;
+
+    return std::string(buf);
+  }
+
+  // String
+  bool XmlRpcValue::stringFromXml(std::string const& valueXml, int* offset)
+  {
+    size_t valueEnd = valueXml.find('<', *offset);
+    if (valueEnd == std::string::npos)
+      return false;     // No end tag;
+
+    _type = TypeString;
+    _value.asString = new std::string(XmlRpcUtil::xmlDecode(valueXml.substr(*offset, valueEnd-*offset)));
+    *offset += int(_value.asString->length());
+    return true;
+  }
+
+  std::string XmlRpcValue::stringToXml() const
+  {
+    return std::string("<value>") + XmlRpcUtil::xmlEncode(*_value.asString) + std::string("</value>");
+  }
+
+  // DateTime (stored as a struct tm)
+  bool XmlRpcValue::timeFromXml(std::string const& valueXml, int* offset)
+  {
+    size_t valueEnd = valueXml.find('<', *offset);
+    if (valueEnd == std::string::npos)
+      return false;     // No end tag;
+
+    std::string stime = valueXml.substr(*offset, valueEnd-*offset);
+
+    struct tm t;
+    if (sscanf(stime.c_str(),"%4d%2d%2dT%2d:%2d:%2d",&t.tm_year,&t.tm_mon,&t.tm_mday,&t.tm_hour,&t.tm_min,&t.tm_sec) != 6)
+      return false;
+
+    t.tm_year -= 1900;    // 	years since 1900
+    t.tm_mon -= 1;        // 	months 0..11
+    t.tm_isdst = -1;
+    _type = TypeDateTime;
+    _value.asTime = new struct tm(t);
+    *offset += int(stime.length());
+    return true;
+  }
+
+  std::string XmlRpcValue::timeToXml() const
+  {
+    struct tm* t = _value.asTime;
+    char buf[20];
+    snprintf(buf, sizeof(buf)-1, "%04d%02d%02dT%02d:%02d:%02d", 
+      1900+t->tm_year,1+t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
+    buf[sizeof(buf)-1] = 0;
+
+    return std::string("<value><dateTime.iso8601>") + buf + std::string("</dateTime.iso8601></value>");
+  }
+
+
+  // Base64
+  bool XmlRpcValue::binaryFromXml(std::string const& valueXml, int* offset)
+  {
+    size_t valueEnd = valueXml.find('<', *offset);
+    if (valueEnd == std::string::npos)
+      return false;     // No end tag;
+
+    _type = TypeBase64;
+    std::string asString = valueXml.substr(*offset, valueEnd-*offset);
+    _value.asBinary = new BinaryData();
+    // check whether base64 encodings can contain chars xml encodes...
+
+    // convert from base64 to binary
+    int iostatus = 0;
+	  base64<char> decoder;
+    std::back_insert_iterator<BinaryData> ins = std::back_inserter(*(_value.asBinary));
+		decoder.get(asString.begin(), asString.end(), ins, iostatus);
+
+    *offset += int(asString.length());
+    return true;
+  }
+
+
+  std::string XmlRpcValue::binaryToXml() const
+  {
+    // convert to base64
+    std::vector<char> base64data;
+    int iostatus = 0;
+    base64<char> encoder;
+    std::back_insert_iterator<std::vector<char> > ins = std::back_inserter(base64data);
+    encoder.put(_value.asBinary->begin(), _value.asBinary->end(), ins, iostatus, base64<>::crlf());
+
+    // Wrap with xml
+    std::string xml = "<value><base64>";
+    xml.append(base64data.begin(), base64data.end());
+    xml += "</base64></value>";
+    return xml;
+  }
+
+
+  // Array
+  bool XmlRpcValue::arrayFromXml(std::string const& valueXml, int* offset)
+  {
+    bool emptyTag;
+    if ( ! XmlRpcUtil::nextTagIs(DATA_TAG, valueXml, offset, &emptyTag))
+      return false;
+
+    _type = TypeArray;
+    _value.asArray = new ValueArray;
+
+    if ( ! emptyTag)
+    {
+      XmlRpcValue v;
+      while (v.fromXml(valueXml, offset))
+        _value.asArray->push_back(v);       // copy...
+
+      // Skip the trailing </data>
+      (void) XmlRpcUtil::nextTagIsEnd(DATA_TAG, valueXml, offset);
+    }
+    return true;
+  }
+
+
+  // In general, its preferable to generate the xml of each element of the
+  // array as it is needed rather than glomming up one big string.
+  std::string XmlRpcValue::arrayToXml() const
+  {
+    std::string xml = "<value><array><data>";
+
+    int s = int(_value.asArray->size());
+    for (int i=0; i<s; ++i)
+       xml += _value.asArray->at(i).toXml();
+
+    xml += "</data></array></value>";
+    return xml;
+  }
+
+
+  // Struct
+  bool XmlRpcValue::structFromXml(std::string const& valueXml, int* offset)
+  {
+    _type = TypeStruct;
+    _value.asStruct = new ValueStruct;
+
+    std::string name;
+    bool emptyTag;
+    while (XmlRpcUtil::nextTagIs(MEMBER_TAG, valueXml, offset, &emptyTag))
+    {
+      if ( ! emptyTag)
+      {
+        if (XmlRpcUtil::parseTag(NAME_TAG, valueXml, offset, name))
+        {
+          // value
+          XmlRpcValue val(valueXml, offset);
+          if ( ! val.valid()) {
+            invalidate();
+            return false;
+          }
+          const std::pair<const std::string, XmlRpcValue> p(name, val);
+          _value.asStruct->insert(p);
+
+          (void) XmlRpcUtil::nextTagIsEnd(MEMBER_TAG, valueXml, offset);
+        }
+      }
+    }
+
+    return true;
+  }
+
+
+  // In general, its preferable to generate the xml of each element
+  // as it is needed rather than glomming up one big string.
+  std::string XmlRpcValue::structToXml() const
+  {
+    std::string xml = "<value><struct>";
+
+    ValueStruct::const_iterator it;
+    for (it=_value.asStruct->begin(); it!=_value.asStruct->end(); ++it)
+    {
+      xml += "<member><name>";
+      xml += XmlRpcUtil::xmlEncode(it->first);
+      xml += "</name>";
+      xml += it->second.toXml();
+      xml += "</member>";
+    }
+
+    xml += "</struct></value>";
+    return xml;
+  }
+
+
+
+  // Write the value without xml encoding it
+  std::ostream& XmlRpcValue::write(std::ostream& os) const {
+    switch (_type) {
+      default:           break;
+      case TypeBoolean:  os << _value.asBool; break;
+      case TypeInt:      os << _value.asInt; break;
+      case TypeDouble:   os << _value.asDouble; break;
+      case TypeString:   os << *_value.asString; break;
+      case TypeDateTime:
+        {
+          struct tm* t = _value.asTime;
+          char buf[20];
+          snprintf(buf, sizeof(buf)-1, "%4d%02d%02dT%02d:%02d:%02d", 
+            t->tm_year,t->tm_mon,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
+          buf[sizeof(buf)-1] = 0;
+          os << buf;
+          break;
+        }
+      case TypeBase64:
+        {
+          int iostatus = 0;
+          std::ostreambuf_iterator<char> out(os);
+          base64<char> encoder;
+          encoder.put(_value.asBinary->begin(), _value.asBinary->end(), out, iostatus, base64<>::crlf());
+          break;
+        }
+      case TypeArray:
+        {
+          int s = int(_value.asArray->size());
+          os << '{';
+          for (int i=0; i<s; ++i)
+          {
+            if (i > 0) os << ',';
+            _value.asArray->at(i).write(os);
+          }
+          os << '}';
+          break;
+        }
+      case TypeStruct:
+        {
+          os << '[';
+          ValueStruct::const_iterator it;
+          for (it=_value.asStruct->begin(); it!=_value.asStruct->end(); ++it)
+          {
+            if (it!=_value.asStruct->begin()) os << ',';
+            os << it->first << ':';
+            it->second.write(os);
+          }
+          os << ']';
+          break;
+        }
+      
+    }
+    
+    return os;
+  }
+
+} // namespace XmlRpc
+
+
+// ostream
+std::ostream& operator<<(std::ostream& os, XmlRpc::XmlRpcValue& v) 
+{ 
+  // If you want to output in xml format:
+  //return os << v.toXml(); 
+  return v.write(os);
+}
+
diff --git a/src/xmlrpcpp/XmlRpcValue.h b/src/xmlrpcpp/XmlRpcValue.h
new file mode 100644
index 0000000..2a6c213
--- /dev/null
+++ b/src/xmlrpcpp/XmlRpcValue.h
@@ -0,0 +1,321 @@
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+#ifndef _XMLRPCVALUE_H_
+#define _XMLRPCVALUE_H_
+
+#if defined(_MSC_VER)
+# pragma warning(disable:4786)    // identifier was truncated in debug info
+#endif
+
+#include <map>
+#include <string>
+#include <vector>
+#include <time.h>
+
+namespace XmlRpc {
+
+  enum xmlrpc_nil_t { nil };
+
+  //! A class to represent RPC arguments and results.
+  //! Each XmlRpcValue object contains a typed value,
+  //! where the type is determined by the initial value
+  //! assigned to the object.
+  //   should probably refcount them...
+  class XmlRpcValue {
+  public:
+
+    //! XmlRpcValue types
+    enum Type {
+      TypeInvalid,
+      TypeNil,
+      TypeBoolean,
+      TypeInt,
+      TypeUnsigned,
+      TypeLongLong,
+      TypeDouble,
+      TypeString,
+      TypeDateTime,
+      TypeBase64,
+      TypeArray,
+      TypeStruct
+    };
+
+    // Non-primitive types
+    typedef std::vector<unsigned char> BinaryData;
+    typedef std::vector<XmlRpcValue> ValueArray;
+    typedef std::map<std::string, XmlRpcValue> ValueStruct;
+
+
+    // Constructors
+    //! Construct an empty XmlRpcValue
+    XmlRpcValue() : _type(TypeInvalid) { _value.asBinary = 0; }
+
+    //! Construct an XmlRpcValue with a nil value
+    XmlRpcValue(xmlrpc_nil_t value) : _type(TypeNil) { }
+
+    //! Construct an XmlRpcValue with a bool value
+    XmlRpcValue(bool value) : _type(TypeBoolean) { _value.asBool = value; }
+
+    //! Construct an XmlRpcValue with an int value
+    XmlRpcValue(int value)  : _type(TypeInt) { _value.asInt = value; }
+
+    XmlRpcValue(unsigned int value)  : _type(TypeUnsigned) { _value.asUnsigned = value; }
+
+    XmlRpcValue(long long value)  : _type(TypeLongLong) { _value.asLongLong = value; }
+ 
+    //! Construct an XmlRpcValue with a double value
+    XmlRpcValue(double value)  : _type(TypeDouble) { _value.asDouble = value; }
+
+    //! Construct an XmlRpcValue with a string value
+    XmlRpcValue(std::string const& value) : _type(TypeString) 
+    { _value.asString = new std::string(value); }
+
+    //! Construct an XmlRpcValue with a string value.
+    //! @param value A null-terminated (C) string.
+    XmlRpcValue(const char* value)  : _type(TypeString)
+    { _value.asString = new std::string(value); }
+
+    XmlRpcValue(BinaryData const& value) : _type(TypeBase64) 
+    { _value.asBinary = new BinaryData(value); }
+
+    XmlRpcValue(ValueStruct const& value) : _type(TypeStruct) 
+    { _value.asStruct = new ValueStruct(value); }
+
+    XmlRpcValue(ValueArray const& value) : _type(TypeArray) 
+    { _value.asArray = new ValueArray(value); }
+
+    //! Construct an XmlRpcValue with a date/time value.
+    //! @param value A pointer to a struct tm (see localtime)
+    XmlRpcValue(struct tm* value)  : _type(TypeDateTime) 
+    { _value.asTime = new struct tm(*value); }
+
+    //! Construct an XmlRpcValue with a binary data value
+    //! @param value A pointer to data
+    //! @param nBytes The length of the data pointed to, in bytes
+    XmlRpcValue(void* value, int nBytes)  : _type(TypeBase64)
+    {
+      _value.asBinary = new BinaryData((char*)value, ((char*)value)+nBytes);
+    }
+
+    //! Construct from xml, beginning at *offset chars into the string, updates offset
+    XmlRpcValue(std::string const& xml, int* offset) : _type(TypeInvalid)
+    { if ( ! fromXml(xml,offset)) _type = TypeInvalid; }
+
+    //! Copy constructor
+    XmlRpcValue(XmlRpcValue const& rhs) : _type(TypeInvalid) { *this = rhs; }
+
+    //! Destructor (make virtual if you want to subclass)
+    /*virtual*/ ~XmlRpcValue() { invalidate(); }
+
+    //! Erase the current value
+    void clear() { invalidate(); }
+
+    // Operators
+    //! Assignment from one XmlRpcValue to this one.
+    //! @param rhs The value in rhs is copied to this value.
+    XmlRpcValue& operator=(XmlRpcValue const& rhs);
+
+    //! Assign nil to this XmlRpcValue.
+    XmlRpcValue& operator=(xmlrpc_nil_t const& rhs) { return operator=(XmlRpcValue(rhs)); }
+
+    //! Assign a bool to this XmlRpcValue.
+    XmlRpcValue& operator=(bool const& rhs) { return operator=(XmlRpcValue(rhs)); }
+
+    //! Assign an int to this XmlRpcValue.
+    XmlRpcValue& operator=(int const& rhs) { return operator=(XmlRpcValue(rhs)); }
+
+    //! Assign a double to this XmlRpcValue.
+    XmlRpcValue& operator=(double const& rhs) { return operator=(XmlRpcValue(rhs)); }
+
+    //! Assign a string to this XmlRpcValue.
+    XmlRpcValue& operator=(const char* rhs) { return operator=(XmlRpcValue(std::string(rhs))); }
+
+    //! Tests two XmlRpcValues for equality
+    bool operator==(XmlRpcValue const& other) const;
+
+    //! Tests two XmlRpcValues for inequality
+    bool operator!=(XmlRpcValue const& other) const;
+
+    //! Treat an XmlRpcValue as a bool.
+    //! Throws XmlRpcException if the value is initialized to 
+    //! a type that is not TypeBoolean.
+    operator bool&()          { assertType(TypeBoolean); return _value.asBool; }
+    operator bool() const     { assertType(TypeBoolean); return _value.asBool; }
+
+    //! Treat an XmlRpcValue as an int.
+    //! Throws XmlRpcException if the value is initialized to 
+    //! a type that is not TypeInt.
+    operator int&()           { assertType(TypeInt); return _value.asInt; }
+    operator int() const      { assertType(TypeInt); return _value.asInt; }
+
+    operator unsigned int&()           { assertType(TypeUnsigned); return _value.asUnsigned; }
+    operator unsigned int() const      { assertType(TypeUnsigned); return _value.asUnsigned; }
+
+    operator long long&()           { assertType(TypeLongLong); return _value.asLongLong; }
+    operator long long() const      { assertType(TypeLongLong); return _value.asLongLong; }
+
+    //! Treat an XmlRpcValue as a double.
+    //! Throws XmlRpcException if the value is initialized to 
+    //! a type that is not TypeDouble.
+    operator double&()        { assertType(TypeDouble); return _value.asDouble; }
+    operator double() const   { assertType(TypeDouble); return _value.asDouble; }
+
+    //! Treat an XmlRpcValue as a string.
+    //! Throws XmlRpcException if the value is initialized to 
+    //! a type that is not TypeString.
+    operator std::string&()             { assertType(TypeString); return *_value.asString; }
+    operator std::string const&() const { assertType(TypeString); return *_value.asString; }
+
+    //! Access the BinaryData value.
+    //! Throws XmlRpcException if the value is initialized to 
+    //! a type that is not TypeBase64.
+    operator BinaryData&()              { assertType(TypeBase64); return *_value.asBinary; }
+    operator BinaryData const&() const  { assertType(TypeBase64); return *_value.asBinary; }
+
+    //! Access the DateTime value.
+    //! Throws XmlRpcException if the value is initialized to 
+    //! a type that is not TypeDateTime.
+    operator struct tm&()               { assertType(TypeDateTime); return *_value.asTime; }
+    operator struct tm const&() const   { assertType(TypeDateTime); return *_value.asTime; }
+
+
+    //! Const array value accessor.
+    //! Access the ith value of the array.
+    //! Throws XmlRpcException if the value is not an array or if the index i is
+    //! not a valid index for the array.
+    XmlRpcValue const& operator[](int i) const { assertArray(i+1); return _value.asArray->at(i); }
+
+    //! Array value accessor.
+    //! Access the ith value of the array, growing the array if necessary.
+    //! Throws XmlRpcException if the value is not an array.
+    XmlRpcValue& operator[](int i)             { assertArray(i+1); return _value.asArray->at(i); }
+
+    //! Struct entry accessor.
+    //! Returns the value associated with the given entry, creating one if necessary.
+    XmlRpcValue& operator[](std::string const& k) { assertStruct(); return (*_value.asStruct)[k]; }
+
+    //! Struct entry accessor.
+    //! Returns the value associated with the given entry, creating one if necessary.
+    XmlRpcValue& operator[](const char* k) { assertStruct(); std::string s(k); return (*_value.asStruct)[s]; }
+
+    //! Access the struct value map.
+    //! Can be used to iterate over the entries in the map to find all defined entries.
+    operator ValueStruct const&() { assertStruct(); return *_value.asStruct; } 
+
+    operator ValueArray const&() const { assertType(TypeArray); return *_value.asArray; } 
+
+    // Accessors
+    //! Return true if the value has been set to something.
+    bool valid() const { return _type != TypeInvalid; }
+
+    //! Return the type of the value stored. \see Type.
+    Type const &getType() const { return _type; }
+
+    //! Return the size for string, base64, array, and struct values.
+    int size() const;
+
+    //! Specify the size for array values. Array values will grow beyond this size if needed.
+    void setSize(int size)    { assertArray(size); }
+
+    //! Check for the existence of a struct member by name.
+    bool hasMember(const std::string& name) const;
+
+    //! Decode xml. Destroys any existing value.
+    bool fromXml(std::string const& valueXml, int* offset);
+
+    //! Encode the Value in xml
+    std::string toXml() const;
+
+    //! Write the value (no xml encoding)
+    std::ostream& write(std::ostream& os) const;
+
+    // Formatting
+    //! Return the format used to write double values.
+    static std::string const& getDoubleFormat() { return _doubleFormat; }
+
+    //! Specify the format used to write double values.
+    static void setDoubleFormat(const char* f) { _doubleFormat = f; }
+
+
+  protected:
+    // Clean up
+    void invalidate();
+
+    // Type checking. Non-const versions coerce to the desired type if currently un-typed.
+    void assertType(Type t) const;
+    void assertType(Type t);
+    void assertArray(int size) const;
+    void assertArray(int size);
+    void assertStruct();
+
+    // XML decoding
+    bool boolFromXml(std::string const& valueXml, int* offset);
+    bool intFromXml(std::string const& valueXml, int* offset);
+    bool doubleFromXml(std::string const& valueXml, int* offset);
+    bool stringFromXml(std::string const& valueXml, int* offset);
+    bool timeFromXml(std::string const& valueXml, int* offset);
+    bool binaryFromXml(std::string const& valueXml, int* offset);
+    bool arrayFromXml(std::string const& valueXml, int* offset);
+    bool structFromXml(std::string const& valueXml, int* offset);
+
+    // XML encoding
+    std::string nilToXml() const;
+    std::string boolToXml() const;
+    std::string intToXml() const;
+    std::string doubleToXml() const;
+    std::string stringToXml() const;
+    std::string timeToXml() const;
+    std::string binaryToXml() const;
+    std::string arrayToXml() const;
+    std::string structToXml() const;
+
+    // Format strings
+    static std::string _doubleFormat;
+
+    // Type tag and values
+    Type _type;
+
+    // At some point I will split off Arrays and Structs into
+    // separate ref-counted objects for more efficient copying.
+    union {
+      bool          asBool;
+      int           asInt;
+      unsigned int  asUnsigned;
+      long long     asLongLong;
+      double        asDouble;
+      struct tm*    asTime;
+      std::string*  asString;
+      BinaryData*   asBinary;
+      ValueArray*   asArray;
+      ValueStruct*  asStruct;
+    } _value;
+    
+  };
+} // namespace XmlRpc
+
+
+std::ostream& operator<<(std::ostream& os, XmlRpc::XmlRpcValue& v);
+
+
+#endif // _XMLRPCVALUE_H_
diff --git a/src/xmlrpcpp/base64.h b/src/xmlrpcpp/base64.h
new file mode 100644
index 0000000..36b202f
--- /dev/null
+++ b/src/xmlrpcpp/base64.h
@@ -0,0 +1,396 @@
+//  base64.hpp 
+//  Autor Konstantin Pilipchuk
+//  mailto:lostd at ukr.net
+// ----------------------------------------------------------------------------
+//
+// XmlRpc++ Copyright (c) 2002-2008 by Chris Morley
+//
+// Copyright (C) 2014
+//              David Freese, W1HKJ
+//
+// This file is part of fldigi
+//
+// fldigi 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 3 of the License, or
+// (at your option) any later version.
+//
+// fldigi 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, see <http://www.gnu.org/licenses/>.
+// ----------------------------------------------------------------------------
+
+
+#if !defined(__BASE64_H_INCLUDED__)
+#define __BASE64_H_INCLUDED__ 1
+
+#include <iterator>
+
+static
+int _base64Chars[]= {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
+				     'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
+			         '0','1','2','3','4','5','6','7','8','9',
+			         '+','/' };
+
+
+#define _0000_0011 0x03
+#define _1111_1100 0xFC
+#define _1111_0000 0xF0
+#define _0011_0000 0x30
+#define _0011_1100 0x3C
+#define _0000_1111 0x0F
+#define _1100_0000 0xC0
+#define _0011_1111 0x3F
+
+#define _EQUAL_CHAR   (-1)
+#define _UNKNOWN_CHAR (-2)
+
+#define _IOS_FAILBIT   std::ios_base::failbit
+#define _IOS_EOFBIT    std::ios_base::eofbit
+#define _IOS_BADBIT    std::ios_base::badbit
+#define _IOS_GOODBIT   std::ios_base::goodbit
+
+// TEMPLATE CLASS base64_put
+template<class _E = char, class _Tr = std::char_traits<_E> >
+class base64
+{
+public:
+
+	typedef unsigned char byte_t;
+	typedef _E            char_type;
+	typedef _Tr           traits_type; 
+
+	// base64 requires max line length <= 72 characters
+	// you can fill end of line
+	// it may be crlf, crlfsp, noline or other class like it
+
+
+	struct crlf
+	{
+		template<class _OI>
+			_OI operator()(_OI _To) const{
+			*_To = _Tr::to_char_type('\r'); ++_To;
+			*_To = _Tr::to_char_type('\n'); ++_To;
+
+			return (_To);
+		}
+	};
+
+
+	struct crlfsp
+	{
+		template<class _OI>
+			_OI operator()(_OI _To) const{
+			*_To = _Tr::to_char_type('\r'); ++_To;
+			*_To = _Tr::to_char_type('\n'); ++_To;
+			*_To = _Tr::to_char_type(' '); ++_To;
+
+			return (_To);
+		}
+	};
+
+	struct noline
+	{
+		template<class _OI>
+			_OI operator()(_OI _To) const{
+			return (_To);
+		}
+	};
+
+	struct three2four
+	{
+		void zero()
+		{
+			_data[0] = 0;
+			_data[1] = 0;
+			_data[2] = 0;
+		}
+
+		byte_t get_0()	const
+		{
+			return _data[0];
+		}
+		byte_t get_1()	const
+		{
+			return _data[1];
+		}
+		byte_t get_2()	const
+		{
+			return _data[2];
+		}
+
+		void set_0(byte_t _ch)
+		{
+			_data[0] = _ch;
+		}
+
+		void set_1(byte_t _ch)
+		{
+			_data[1] = _ch;
+		}
+
+		void set_2(byte_t _ch)
+		{
+			_data[2] = _ch;
+		}
+
+		// 0000 0000  1111 1111  2222 2222
+		// xxxx xxxx  xxxx xxxx  xxxx xxxx
+		// 0000 0011  1111 2222  2233 3333
+
+		int b64_0()	const	{return (_data[0] & _1111_1100) >> 2;}
+		int b64_1()	const	{return ((_data[0] & _0000_0011) << 4) + ((_data[1] & _1111_0000)>>4);}
+		int b64_2()	const	{return ((_data[1] & _0000_1111) << 2) + ((_data[2] & _1100_0000)>>6);}
+		int b64_3()	const	{return (_data[2] & _0011_1111);}
+
+		void b64_0(int _ch)	{_data[0] = ((_ch & _0011_1111) << 2) | (_0000_0011 & _data[0]);}
+
+		void b64_1(int _ch)	{
+			_data[0] = ((_ch & _0011_0000) >> 4) | (_1111_1100 & _data[0]);
+			_data[1] = ((_ch & _0000_1111) << 4) | (_0000_1111 & _data[1]);	}
+
+		void b64_2(int _ch)	{
+			_data[1] = ((_ch & _0011_1100) >> 2) | (_1111_0000 & _data[1]);
+			_data[2] = ((_ch & _0000_0011) << 6) | (_0011_1111 & _data[2]);	}
+
+		void b64_3(int _ch){
+			_data[2] = (_ch & _0011_1111) | (_1100_0000 & _data[2]);}
+
+	private:
+		byte_t _data[3];
+
+	};
+
+
+
+
+	template<class _II, class _OI, class _State, class _Endline>
+		_II put(_II _First, _II _Last, _OI _To, _State& _St, _Endline _Endl)  const
+	{
+		three2four _3to4;
+		int line_octets = 0;
+
+		while(_First != _Last)
+		{
+			_3to4.zero();
+
+			// ���� �� 3 �������
+			_3to4.set_0(*_First);
+			_First++;
+
+			if(_First == _Last)
+			{
+				*_To = _Tr::to_char_type(_base64Chars[_3to4.b64_0()]); ++_To;
+				*_To = _Tr::to_char_type(_base64Chars[_3to4.b64_1()]); ++_To;
+				*_To = _Tr::to_char_type('='); ++_To;
+				*_To = _Tr::to_char_type('='); ++_To;
+				goto __end;
+			}
+
+			_3to4.set_1(*_First);
+			_First++;
+
+			if(_First == _Last)
+			{
+				*_To = _Tr::to_char_type(_base64Chars[_3to4.b64_0()]); ++_To;
+				*_To = _Tr::to_char_type(_base64Chars[_3to4.b64_1()]); ++_To;
+				*_To = _Tr::to_char_type(_base64Chars[_3to4.b64_2()]); ++_To;
+				*_To = _Tr::to_char_type('='); ++_To;
+				goto __end;
+			}
+
+			_3to4.set_2(*_First);
+			_First++;
+
+			*_To = _Tr::to_char_type(_base64Chars[_3to4.b64_0()]); ++_To;
+			*_To = _Tr::to_char_type(_base64Chars[_3to4.b64_1()]); ++_To;
+			*_To = _Tr::to_char_type(_base64Chars[_3to4.b64_2()]); ++_To;
+			*_To = _Tr::to_char_type(_base64Chars[_3to4.b64_3()]); ++_To;
+
+			if(line_octets == 17) // base64 ��������� ����� ������ �� ����� 72 ��������
+			{
+				//_To = _Endl(_To);
+        *_To = '\n'; ++_To;
+				line_octets = 0;
+			}
+			else
+				++line_octets;
+		}
+
+		__end: ;
+
+		return (_First);
+
+	}
+
+
+	template<class _II, class _OI, class _State>
+		_II get(_II _First, _II _Last, _OI _To, _State& _St) const
+	{
+		three2four _3to4;
+		int _Char;
+
+		while(_First != _Last)
+		{
+
+			// Take octet
+			_3to4.zero();
+
+			// -- 0 --
+			// Search next valid char... 
+			while((_Char =  _getCharType(*_First)) < 0 && _Char == _UNKNOWN_CHAR)
+			{
+				if(++_First == _Last)
+				{
+					_St |= _IOS_FAILBIT|_IOS_EOFBIT; return _First; // unexpected EOF
+				}
+			}
+
+			if(_Char == _EQUAL_CHAR){
+				// Error! First character in octet can't be '='
+				_St |= _IOS_FAILBIT; 
+				return _First; 
+			}
+			else
+				_3to4.b64_0(_Char);
+
+
+			// -- 1 --
+			// Search next valid char... 
+			while(++_First != _Last)
+				if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR)
+					break;
+
+			if(_First == _Last)	{
+				_St |= _IOS_FAILBIT|_IOS_EOFBIT; // unexpected EOF 
+				return _First;
+			}
+
+			if(_Char == _EQUAL_CHAR){
+				// Error! Second character in octet can't be '='
+				_St |= _IOS_FAILBIT; 
+				return _First; 
+			}
+			else
+				_3to4.b64_1(_Char);
+
+
+			// -- 2 --
+			// Search next valid char... 
+			while(++_First != _Last)
+				if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR)
+					break;
+
+			if(_First == _Last)	{
+				// Error! Unexpected EOF. Must be '=' or base64 character
+				_St |= _IOS_FAILBIT|_IOS_EOFBIT; 
+				return _First; 
+			}
+
+			if(_Char == _EQUAL_CHAR){
+				// OK!
+				_3to4.b64_2(0); 
+				_3to4.b64_3(0); 
+
+				// chek for EOF
+				if(++_First == _Last)
+				{
+					// Error! Unexpected EOF. Must be '='. Ignore it.
+					//_St |= _IOS_BADBIT|_IOS_EOFBIT;
+					_St |= _IOS_EOFBIT;
+				}
+				else 
+					if(_getCharType(*_First) != _EQUAL_CHAR)
+					{
+						// Error! Must be '='. Ignore it.
+						//_St |= _IOS_BADBIT;
+					}
+				else
+					++_First; // Skip '='
+
+				// write 1 byte to output
+				*_To = (byte_t) _3to4.get_0();
+				return _First;
+			}
+			else
+				_3to4.b64_2(_Char);
+
+
+			// -- 3 --
+			// Search next valid char... 
+			while(++_First != _Last)
+				if((_Char = _getCharType(*_First)) != _UNKNOWN_CHAR)
+					break;
+
+			if(_First == _Last)	{
+				// Unexpected EOF. It's error. But ignore it.
+				//_St |= _IOS_FAILBIT|_IOS_EOFBIT; 
+					_St |= _IOS_EOFBIT; 
+				
+				return _First; 
+			}
+
+			if(_Char == _EQUAL_CHAR)
+			{
+				// OK!
+				_3to4.b64_3(0); 
+
+				// write to output 2 bytes
+				*_To = (byte_t) _3to4.get_0();
+				*_To = (byte_t) _3to4.get_1();
+
+				++_First; // set position to next character
+
+				return _First;
+			}
+			else
+				_3to4.b64_3(_Char);
+
+
+			// write to output 3 bytes
+			*_To = (byte_t) _3to4.get_0();
+			*_To = (byte_t) _3to4.get_1();
+			*_To = (byte_t) _3to4.get_2();
+
+			++_First;
+			
+
+		} // while(_First != _Last)
+
+		return (_First);
+	}
+
+protected:
+	
+	int _getCharType(int _Ch) const
+	{
+		if(_base64Chars[62] == _Ch)
+			return 62;
+
+		if(_base64Chars[63] == _Ch)
+			return 63;
+
+		if((_base64Chars[0] <= _Ch) && (_base64Chars[25] >= _Ch))
+			return _Ch - _base64Chars[0];
+
+		if((_base64Chars[26] <= _Ch) && (_base64Chars[51] >= _Ch))
+			return _Ch - _base64Chars[26] + 26;
+
+		if((_base64Chars[52] <= _Ch) && (_base64Chars[61] >= _Ch))
+			return _Ch - _base64Chars[52] + 52;
+
+		if(_Ch == _Tr::to_int_type('='))
+			return _EQUAL_CHAR;
+
+		return _UNKNOWN_CHAR;
+	}
+
+
+};
+
+
+#endif

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/flnet.git



More information about the pkg-hamradio-commits mailing list