Import Upstream version 0.6.5 upstream/0.6.5
authorSteve McIntyre <steve@einval.com>
Thu, 24 Oct 2019 10:34:57 +0000 (11:34 +0100)
committerSteve McIntyre <steve@einval.com>
Thu, 24 Oct 2019 10:34:57 +0000 (11:34 +0100)
137 files changed:
.cvsignore [new file with mode: 0644]
COPYING [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
README [new file with mode: 0644]
VERSION [new file with mode: 0644]
changelog [new file with mode: 0644]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
deb/.cvsignore [new file with mode: 0644]
deb/control [new file with mode: 0644]
deb/copyright [new file with mode: 0644]
deb/jigdo-file.docs [new file with mode: 0644]
deb/jigdo.docs [new file with mode: 0644]
deb/jigdo.undocumented [new file with mode: 0644]
deb/rules [new file with mode: 0755]
doc/.cvsignore [new file with mode: 0644]
doc/Makefile.in [new file with mode: 0644]
doc/TechDetails.txt [new file with mode: 0644]
doc/jigdo-file.1 [new file with mode: 0644]
doc/jigdo-file.html [new file with mode: 0644]
doc/jigdo-file.sgml [new file with mode: 0644]
doc/jigdo-lite.1 [new file with mode: 0644]
doc/jigdo-lite.html [new file with mode: 0644]
doc/jigdo-lite.sgml [new file with mode: 0644]
doc/libwww-mingw.diff [new file with mode: 0644]
gfx/.cvsignore [new file with mode: 0644]
gfx/abutton.xcf.bz2 [new file with mode: 0644]
gfx/button-cross.xpm [new file with mode: 0644]
gfx/button-pause.xpm [new file with mode: 0644]
gfx/button-play.xpm [new file with mode: 0644]
gfx/buttons.xcf.bz2 [new file with mode: 0644]
gfx/icon-cd.xcf.bz2 [new file with mode: 0644]
gfx/jigdo-icon.png [new file with mode: 0644]
gfx/jigdo-logo.xcf.bz2 [new file with mode: 0644]
gfx/jigdo-logo.xpm [new file with mode: 0644]
gfx/job-deb.xpm [new file with mode: 0644]
gfx/job-file.xpm [new file with mode: 0644]
gfx/job-iso.xpm [new file with mode: 0644]
gfx/job-jigdo.xpm [new file with mode: 0644]
gfx/new.xpm [new file with mode: 0644]
gfx/preferences.xpm [new file with mode: 0644]
gfx/progress051.xpm [new file with mode: 0644]
gfx/quit.xpm [new file with mode: 0644]
install-sh [new file with mode: 0755]
jigdo.glade [new file with mode: 0644]
jigdo.spec [new file with mode: 0644]
po/.cvsignore [new file with mode: 0644]
po/Makefile.in [new file with mode: 0644]
po/de.gmo [new file with mode: 0644]
po/de.po [new file with mode: 0644]
scripts/.cvsignore [new file with mode: 0644]
scripts/check-mirrors [new file with mode: 0755]
scripts/convert-mirrors.awk [new file with mode: 0644]
scripts/debian-mirrors.jigdo [new file with mode: 0644]
scripts/depend.awk [new file with mode: 0644]
scripts/glade-filter.awk [new file with mode: 0644]
scripts/html-beautify.awk [new file with mode: 0644]
scripts/jigdo-lite [new file with mode: 0644]
scripts/jigdo-mirror [new file with mode: 0644]
scripts/longrun [new file with mode: 0755]
scripts/make-templates [new file with mode: 0755]
src/.cvsignore [new file with mode: 0644]
src/Makedeps [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/Makefile.mingw [new file with mode: 0644]
src/autoptr.hh [new file with mode: 0644]
src/bstream.hh [new file with mode: 0644]
src/cachefile.cc [new file with mode: 0644]
src/cachefile.hh [new file with mode: 0644]
src/compat.cc [new file with mode: 0644]
src/compat.hh [new file with mode: 0644]
src/config.h.in [new file with mode: 0644]
src/config.h.mingw [new file with mode: 0644]
src/configfile-test.cc [new file with mode: 0644]
src/configfile.cc [new file with mode: 0644]
src/configfile.hh [new file with mode: 0644]
src/debug.cc [new file with mode: 0644]
src/debug.hh [new file with mode: 0644]
src/dirent.hh [new file with mode: 0644]
src/download.cc [new file with mode: 0644]
src/download.hh [new file with mode: 0644]
src/glibc-getopt.c [new file with mode: 0644]
src/glibc-getopt.h [new file with mode: 0644]
src/glibc-getopt1.c [new file with mode: 0644]
src/glibc-md5.cc [new file with mode: 0644]
src/glibc-md5.hh [new file with mode: 0644]
src/glibwww-callbacks.cc [new file with mode: 0644]
src/glibwww-init.cc [new file with mode: 0644]
src/glibwww-trans.cc [new file with mode: 0644]
src/glibwww.hh [new file with mode: 0644]
src/gtk-error.cc [new file with mode: 0644]
src/gtk-error.hh [new file with mode: 0644]
src/gtk-gui.cc [new file with mode: 0644]
src/gtk-gui.hh [new file with mode: 0644]
src/gtk-interface.cc.tmp [new file with mode: 0644]
src/gtk-support.cc [new file with mode: 0644]
src/gtk-support.hh [new file with mode: 0644]
src/jigdo-file-cmd.cc [new file with mode: 0644]
src/jigdo-file-cmd.hh [new file with mode: 0644]
src/jigdo-file.cc [new file with mode: 0644]
src/jigdo.cc [new file with mode: 0644]
src/jigdoconfig-test.cc [new file with mode: 0644]
src/jigdoconfig.cc [new file with mode: 0644]
src/jigdoconfig.hh [new file with mode: 0644]
src/job-download.cc [new file with mode: 0644]
src/job-download.hh [new file with mode: 0644]
src/joblist.cc [new file with mode: 0644]
src/joblist.hh [new file with mode: 0644]
src/libwww.hh [new file with mode: 0644]
src/md5sum-test.cc [new file with mode: 0644]
src/md5sum.cc [new file with mode: 0644]
src/md5sum.hh [new file with mode: 0644]
src/md5sum.ih [new file with mode: 0644]
src/mimestream-test.cc [new file with mode: 0644]
src/mimestream.hh [new file with mode: 0644]
src/mkimage.cc [new file with mode: 0644]
src/mkimage.hh [new file with mode: 0644]
src/mktemplate.cc [new file with mode: 0644]
src/mktemplate.hh [new file with mode: 0644]
src/recursedir-test.cc [new file with mode: 0644]
src/recursedir.cc [new file with mode: 0644]
src/recursedir.fh [new file with mode: 0644]
src/recursedir.hh [new file with mode: 0644]
src/rsyncsum-test.cc [new file with mode: 0644]
src/rsyncsum.cc [new file with mode: 0644]
src/rsyncsum.hh [new file with mode: 0644]
src/rsyncsum.ih [new file with mode: 0644]
src/scan.cc [new file with mode: 0644]
src/scan.fh [new file with mode: 0644]
src/scan.hh [new file with mode: 0644]
src/serialize.hh [new file with mode: 0644]
src/string.cc [new file with mode: 0644]
src/string.hh [new file with mode: 0644]
src/torture.cc [new file with mode: 0644]
src/zstream.cc [new file with mode: 0644]
src/zstream.fh [new file with mode: 0644]
src/zstream.hh [new file with mode: 0644]

diff --git a/.cvsignore b/.cvsignore
new file mode 100644 (file)
index 0000000..dcdd328
--- /dev/null
@@ -0,0 +1,20 @@
+Makefile
+config.cache
+config.log
+config.status
+configure
+cvs
+copying
+readme
+version
+jigdo-*.tar.bz2
+jigdo-*.tar.gz
+jigdo_*.dsc
+jigdo_*.deb
+jigdo_*.changes
+debian
+debian.lnk
+debug
+gcc3
+jigdo
+tmp
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..eb36f1c
--- /dev/null
@@ -0,0 +1,220 @@
+# Project: Jigdo (Jigsaw download)
+#  __   _
+#  |_) /|  Copyright (C) 2001 Richard Atterer
+#  | \/¯|  <richard@atterer.net>
+#  ¯ '` ¯
+# this Makefile mostly forwards make commands to the other directories
+srcdir =       @srcdir@
+VPATH =                @srcdir@
+
+prefix =       @prefix@
+exec_prefix =  @exec_prefix@
+bindir =       @bindir@
+mandir =       @mandir@
+datadir =      @datadir@
+
+PACKAGE =      jigdo
+INSTALL =      @INSTALL@
+INSTALL_EXE =  @INSTALL@ -s
+INSTALL_DATA = @INSTALL@ -m 644
+AWK =          @AWK@
+
+# echo `sed -n 's/^.*>\(.*\.xpm\)<.*$/\1/p' jigdo.glade|sort|uniq`
+icons =                button-cross.xpm button-pause.xpm button-play.xpm \
+               jigdo-logo.xpm new.xpm preferences.xpm quit.xpm
+catalogs =     @CATALOGS@
+
+.PHONY:                all all_msg clean distclean mostlyclean maintainer-clean \
+               dep depend doc cvsdist check install test loc deb debrpm \
+               install-jigdo-file install-jigdo-lite install-jigdo \
+               install-po
+# "gfx" symlink is needed so that the pixmaps are found
+all doc mostlyclean dep depend check: Makefile
+               -test -e gfx || ln -s "$(srcdir)/gfx" gfx
+               cd src && $(MAKE) $@
+               cd doc && $(MAKE) $@
+               cd po  && $(MAKE) $@
+test:
+               @echo "You mean \`make check'. Try again... ;-)"
+clean:         Makefile
+               cd src && $(MAKE) $@
+               cd doc && $(MAKE) $@
+               cd po  && $(MAKE) $@
+               rm -f mirrors.jigdo mirrors.list mirrors.txt
+distclean:     Makefile
+               cd src && $(MAKE) $@
+               cd doc && $(MAKE) $@
+               cd po  && $(MAKE) $@
+               rm -f mirrors.jigdo mirrors.list mirrors.txt
+               rm -f jigdo-*.tar.gz jigdo-*.tar.bz2
+               rm -f *~ \#*\# *.bak
+               rm -f Makefile config.h config.cache config.log config.status
+               rm -f deb/*~ deb/\#*\# deb/*.bak deb/changelog
+               rm -f scripts/*~ scripts/\#*\# scripts/*.bak
+#              -rm -f debian
+maintainer-clean: Makefile
+               @echo 'This command is intended for maintainers to use; it'
+               @echo 'deletes files that may need special tools to rebuild.'
+               cd src && $(MAKE) $@
+               cd doc && $(MAKE) $@
+               cd po  && $(MAKE) $@
+               rm -f mirrors.jigdo mirrors.list mirrors.txt
+               rm -f jigdo-*.tar.gz jigdo-*.tar.bz2
+               rm -f *~ \#*\# *.bak
+               rm -f Makefile config.h config.cache config.log config.status
+               rm -f configure
+               cd $(srcdir) && autoconf
+
+install:       install-po @INSTALL_TARGETS@
+install-jigdo-file:
+               $(INSTALL) -d $(DESTDIR)$(bindir)
+               $(INSTALL_EXE) src/jigdo-file $(DESTDIR)$(bindir)
+               $(INSTALL) -d $(DESTDIR)$(mandir)/man1
+               x="doc/jigdo-file.1"; \
+               test -f "$$x" || x="$(srcdir)/$$x"; \
+               $(INSTALL) "$$x" $(DESTDIR)$(mandir)/man1
+install-jigdo-lite:
+               $(INSTALL) -d "$(DESTDIR)$(bindir)"
+               $(INSTALL) -d "$(DESTDIR)$(datadir)/jigdo"
+               $(INSTALL) "$(srcdir)/scripts/jigdo-lite" \
+                   "$(DESTDIR)$(bindir)"
+               sed -e 's%"\(mirrors.jigdo"\)%"$(datadir)/jigdo/debian-\1%' \
+                   <"$(srcdir)/scripts/jigdo-lite" \
+                   >"$(DESTDIR)$(bindir)/jigdo-lite"
+               chmod 755 "$(DESTDIR)$(bindir)/jigdo-lite"
+               $(INSTALL_DATA) "$(srcdir)/scripts/debian-mirrors.jigdo" \
+                   "$(DESTDIR)$(datadir)/jigdo"
+               $(INSTALL) -d $(DESTDIR)$(mandir)/man1
+               x="doc/jigdo-lite.1"; \
+               test -f "$$x" || x="$(srcdir)/$$x"; \
+               $(INSTALL) "$$x" $(DESTDIR)$(mandir)/man1
+install-jigdo:
+               $(INSTALL) -d "$(DESTDIR)$(bindir)"
+               $(INSTALL_EXE) src/jigdo "$(DESTDIR)$(bindir)"
+               $(INSTALL) -d "$(DESTDIR)$(datadir)/jigdo/pixmaps"
+               @for x in $(icons); do \
+                   echo "$(INSTALL_DATA) \"$(srcdir)/gfx/$$x\"" \
+                       "\"$(DESTDIR)$(datadir)/jigdo/pixmaps\""; \
+                   $(INSTALL_DATA) "$(srcdir)/gfx/$$x" \
+                       "$(DESTDIR)$(datadir)/jigdo/pixmaps" || exit 1; \
+               done
+               $(INSTALL_DATA) "$(srcdir)/COPYING" \
+                   "$(DESTDIR)$(datadir)/jigdo/COPYING"
+install-po:
+               @test "$(catalogs)" \
+                && for file in $(catalogs); do \
+                   lang=`echo $$file | sed -e 's/\.gmo$$//'`; \
+                   dir="$(DESTDIR)$(datadir)/locale/$$lang/LC_MESSAGES"; \
+                   echo "$(INSTALL) -d \"$$dir\""; \
+                   $(INSTALL) -d "$$dir"; \
+                   s="$(srcdir)/po/$$file"; \
+                   if test -f "po/$$file"; then s="po/$$file"; fi; \
+                   echo "$(INSTALL_DATA) $$s \"$$dir/$(PACKAGE).mo\""; \
+                   $(INSTALL_DATA) "$$s" "$$dir/$(PACKAGE).mo" \
+                       || exit 1; \
+               done
+
+Makefile:      Makefile.in configure VERSION
+               sh config.status # update Makefile from Makefile.in
+
+configure:     configure.in
+               cd $(srcdir) && autoconf
+
+# allow "make CXXFLAGS=-O0" while staying compatible with non-GNU-make
+.EXPORT_ALL_VARIABLES: ;
+#______________________________________________________________________
+
+# Nonstandard targets
+
+# Vanity meter :-)
+loc:
+               @f=`find $(srcdir)/src -name '*.cc' -o -name '*.[hif]h'` \
+                   && printf '%d files, %d lines of code\n' \
+                      `echo $$f|wc -w` `cat $$f|wc -l`
+
+# Compile and package unofficial Debian package
+deb:
+               @if test "`pwd`" != "`cd '$(srcdir)' && pwd`"; then \
+                echo "   * Building .deb package only possible if you are";\
+                echo "   * building in the source dir, i.e. invoked the"; \
+                echo "   * configure script as \`./configure'"; \
+                exit 1; fi
+               test -e debian || ln -s deb debian
+               dpkg-buildpackage -rfakeroot -us -uc -b
+
+# Convert Debian package into RPM format
+debrpm:                deb
+               for deb in ../jigdo*.deb; do \
+                   fakeroot alien -r "$$deb"; \
+               done
+
+# Compile and create a tar.gz containing the tools and documentation
+bindist:       Makefile
+               @if test -f jigdo-bin-`cat $(srcdir)/VERSION`; then \
+                echo "Object \`jigdo*' already exists - delete it first";\
+                exit 1; \
+               fi
+               rm -f src/jigdo-file
+               cd src && $(MAKE) LD='c++ -static' all-msg jigdo-file strip
+               cd doc && $(MAKE) all
+               jdir=jigdo-bin-`cat $(srcdir)/VERSION`; \
+                   mkdir "$$jdir"; \
+                   $(INSTALL) $(srcdir)/scripts/jigdo-lite "$$jdir"; \
+                   $(INSTALL) src/jigdo-file "$$jdir"; \
+                   $(INSTALL_DATA) $(srcdir)/doc/jigdo-file.html "$$jdir"; \
+                   $(INSTALL_DATA) $(srcdir)/doc/jigdo-file.1    "$$jdir"; \
+                   $(INSTALL_DATA) $(srcdir)/doc/jigdo-lite.html "$$jdir"; \
+                   $(INSTALL_DATA) $(srcdir)/doc/jigdo-lite.1    "$$jdir"; \
+                   $(INSTALL_DATA) $(srcdir)/scripts/debian-mirrors.jigdo \
+                       "$$jdir/mirrors.jigdo"; \
+                   cp src/jigdo-file "$$jdir"; \
+                   tar -cf "$$jdir.tar" "$$jdir"; \
+                   bzip2 -f -k -9 "$$jdir.tar"; \
+                   gzip -f -9 "$$jdir.tar"; \
+                   rm -rf "$$jdir" src/jigdo-file
+
+# .jigdo file for Debian FTP mirrors - actively checks whether
+mirrors.jigdo: mirrors.list
+               $(srcdir)/scripts/check-mirrors "$<" "$@"
+mirrors.list:  mirrors.txt
+               $(AWK) -f $(srcdir)/scripts/convert-mirrors.awk "$<" "$@"
+mirrors.txt:
+               wget -O - ftp://ftp.debian.org/debian/README.mirrors.txt \
+                   ftp://ftp.debian.org/debian/README.non-US | cat >"$@"
+
+# Create source tarballs from CVS
+cvsdist:       Makefile
+               @if test -f jigdo -o -f jigdo-`cat VERSION`; then \
+                   echo "Object jigdo* already exists - delete it first"; \
+                   exit 1; \
+               fi
+               @read d v version <"jigdo.spec"; \
+               if test "$$version" != "`cat VERSION`"; then \
+                   echo "Different version in VERSION and jigdo.spec"; \
+                   exit 1; \
+               fi
+               cvs -Q checkout jigdo
+               cd jigdo && autoconf
+               @f=`find jigdo -name '*.cc' -o -name '*.[hif]h'` \
+                   && printf 'version %s, %d files, %d lines of code\n' \
+                      `cat jigdo/VERSION` `echo $$f|wc -w` `cat $$f|wc -l`
+               @cvstag="rel-`sed -e 's/[^0-9a-zA-Z_-]\+/-/g' jigdo/VERSION`"; \
+                   printf "Tag this as \`$$cvstag' in CVS? [y/N/force] "; \
+                   read; \
+                   if test "$$REPLY" = y; then \
+                       echo "cd jigdo && cvs tag $$cvstag ."; \
+                       cd jigdo && cvs tag $$cvstag .; \
+                   elif test "$$REPLY" = force; then \
+                       echo "cd jigdo && cvs tag -F $$cvstag ."; \
+                       cd jigdo && cvs tag -F $$cvstag .; \
+                   fi
+               cd jigdo/doc && $(MAKE) -f ../../doc/Makefile
+               cd src && $(MAKE) depend mingw
+               cp src/{Makedeps,gtk-interface.cc.tmp,*.mingw} jigdo/src
+               cd jigdo/po && $(MAKE) -f ../../po/Makefile update-gmo
+               jdir=jigdo-`cat jigdo/VERSION`; \
+                   mv jigdo "$$jdir"; \
+                   tar --exclude=CVS -cf "$$jdir.tar" "$$jdir"; \
+                   bzip2 -f -k -9 "$$jdir.tar"; \
+                   gzip -f -9 "$$jdir.tar"; \
+                   rm -rf "$$jdir"
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..3c7a230
--- /dev/null
+++ b/README
@@ -0,0 +1,76 @@
+Jigsaw Download (jigdo)
+~~~~~~~~~~~~~~~~~~~~~~~
+
+See doc/jigdo-file.html for documentation.
+
+jigdo web site: <http://atterer.net/jigdo/>
+Debian CD images via jigdo: <http://www.debian.org/CD/jigdo-cd/>
+
+----------------------------------------------------------------------
+
+To build the programs, execute:
+    ./configure && make
+
+After a successful build, you can install the program (by default into
+/usr/local) with
+
+   make install
+
+To build Debian packages (.deb) from the sources, execute:
+    deb/rules
+
+To compile jigdo-file on the old Debian "potato" release, use:
+    ./configure --without-libdb --without-gui && make
+
+To build an RPM package (.rpm) from the sources, execute:
+    rpm -ba jigdo.spec
+
+To build a .tar.gz with binaries and documentation, execute:
+    ./configure && make bindist
+
+Apart from the usual options (see "./configure --help"), the configure
+script also recognizes the following options:
+  --with-libdb        Use libdb3 (necessary for jigdo-file's cache) [yes]
+  --with-gui          Build the jigdo GUI application [yes]
+  --with-uint64=TYPE  Specify unsigned type of at least 64 bits [auto]
+                      (Replace spaces with underscores in TYPE)
+  --enable-nls        Use Native Language Support [yes]
+  --enable-debug      Compile in lots of additional debugging code [no]
+  --enable-ccmalloc   Use the ccmalloc memory leak detector [no]
+
+----------------------------------------------------------------------
+
+Authors:
+
+Richard Atterer <richard@atterer.net> is the main jigdo author.
+jigdo uses some code written by other people:
+
+- Free Software Foundation, Inc.:
+  Library routines. [Files: glibc-*]
+- James Henstdridge <james@daa.com.au>:
+  Code for integration of glib and libwww. [Files: glibwww-*]
+- Damon Chaplin <damon@helixcode.com> and
+  Martijn van Beers <martijn@earthling.net>:
+  Support code for the GUI, generated by Glade. [File: gtk-support.cc]
+- Anne Bezemer <J.A.Bezemer@opensourcepartners.nl>:
+  Some code snippets in the jigdo-lite script
+
+----------------------------------------------------------------------
+
+Copyright (C) 2001-2002 Richard Atterer <richard@atterer.net>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License, version 2, as
+  published by the Free Software Foundation.
+
+  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.
+
+Please note: The copyright notice in the file COPYING only applies to
+the text of the GNU General Public License; the copyright of the
+individual source files is as specified at the top of each file and
+above. Also note that the code is licensed under GPL _version_2_ and
+no other version. Special licensing for my (RA's) code is available on
+request.
diff --git a/VERSION b/VERSION
new file mode 100644 (file)
index 0000000..ef5e445
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.6.5
diff --git a/changelog b/changelog
new file mode 100644 (file)
index 0000000..b1a1fe2
--- /dev/null
+++ b/changelog
@@ -0,0 +1,122 @@
+                                                            -*- Text -*-
+
+jigdo 0.6.5 -- Richard Atterer, 
+
+  - jigdo-lite: Better fallback handling, now also works for files
+    that changed (rather than disappeared) on the server.
+  - jigdo-lite: If ~/.jigdo-lite not present, try to fetch mirror info
+    from /etc/apt/sources.list
+  - portability fixes (Mattias Wadenstein)
+  - jigdo GUI: Some more work done, but it's still not usable
+
+jigdo 0.6.4 -- Richard Atterer, 02 Mar 2002
+
+  - Fixed a make-template bug introduced in 0.6.3, which caused
+    jigdo-file to crash if there are more than 32 files with identical
+    content (Attila Nagy)
+  - jigdo-lite: Allow customization of flags passed to jigdo-file and
+    wget, by making it save and restore variables in ~/.jigdo-lite.
+    For example, add "--uri Debian=http://myserver.lan/" to the
+    definition of jigdoOpts to define an additional mirror (turns the
+    selected mirrors into fallback mirrors).
+  - jigdo-lite: Made script work with ash
+  - Added configure check for _snprintf (needed for Windows)
+
+jigdo 0.6.3 -- Richard Atterer, 24 Feb 2002
+
+  - jigdo-file make-template: Some loop unrolling, some other
+    optimizations, resulting in a speed increase of at least 30%!
+  - FORMAT CHANGE of template files: Template data now includes
+    RsyncSums - this will be useful in the future for aborting
+    downloads early and when upgrading images to newer versions. This
+    version still reads the old template format, but support for that
+    will be dropped before 1.0.0.
+  - jigdo-lite: Can now supply >1 image sections in .jigdo files
+  - jigdo-lite: Support for gzipped .jigdo files
+  - jigdo-lite: Added a small manpage
+  - jigdo-lite: Use "wget --dot-style=mega --passive-ftp"
+  - Really fixed <sstream> issues this time - by not using sstream at
+    all. (It is not possible to implement an sstream class for the
+    iostream supplied with Debian Potato's GCC 2.95)
+  - Can now build a .deb just by executing "deb/rules"
+  - configure: Can now use --without-gui to prevent jigdo GUI from
+    getting built and installed (does not work with "deb/rules")
+  - Added jigdo.spec for building of RPMs (Alexander Skwar)
+  - Slightly changed the way that missing --image/--jigdo/--template
+    arguments are deduced from other parameters. (Thomas Arnold)
+  - Fixes to make jigdo-file build on 64-bit architectures
+  - Changed abbreviation of "md5sum" command from "md" to "md5". That
+    breaks compatibility, but I keep typing "md5"... :)
+  - Small hack to make "jigdo-file md5 /some/path" include the leading
+    "/" in its output.
+  - jigdo-lite: Fix for obscure problem with "sed /foo/!p" on BSD and
+    some Linux versions - use "egrep -v foo" instead (Attila Nagy)
+
+jigdo 0.6.2 -- Richard Atterer, 26 Jan 2002
+
+  - Added this changelog file to the distribution! :-)
+  - gettext support (but no translations are present yet)
+  - Portability fixes to jigdo-lite (Anne Bezemer)
+  - Portability fixes to the jigdo-file code (for RedHat/Mandrake
+    systems, systems without <sstream> such as Debian Potato)
+  - Support for fallback servers in jigdo-lite
+  - Support for fallback servers in jigdo-file, in the form of a new
+    "print-missing-all" command
+  - First upload of jigdo packages to the Debian archive
+
+jigdo 0.6.1 -- Richard Atterer, 17 Dec 2001
+
+  - Changelog lost
+
+jigdo 0.6.0 -- Richard Atterer, 15 Nov 2001
+
+  - Because the "proper jigdo" (the GTK+ download manager type app) is
+    not going to be finished anytime soon, I've written a small shell
+    script called "jigdo-lite" which does an equivalent job. It
+    downloads files with wget and assembles them using jigdo-file.
+    jigdo-lite can "upgrade" old images to a newer version.
+  - Very first, ***pre-alpha*** version of the GTK+ jigdo application.
+    There is no download capability or other functionality present at
+    all yet.
+  - As of a few days ago, the first beta site offering downloads of
+    Debian 2.2r4 via jigdo is available on cdimage. Thanks for the
+    account to Phil Hands!
+
+jigdo 0.5.3 -- Richard Atterer, 13 Sep 2001
+
+  - *** jigdo-file is finished! ***
+    With the introduction of a cache for file checksums, it is finally
+    possible in practice to let it loose on a Debian archive mirror.
+  - Update and large extension of the documentation.
+  - Now compiles with GCC 3.
+  - Now compiles under Windows! You do not even need Cygwin; plain
+    mingw is sufficient.
+  - Numerous small fixes and changes. Source code now exceeds 10000
+    lines of code.
+
+jigdo 0.5.2 -- Richard Atterer, 2 Sep 2001
+
+  - Would you believe it, documentation!!! (in the form of a manpage)
+  - "print-missing" sub-command for jigdo-file allows for mirror
+    selection etc - more than the old PIK's functionality is now
+    present
+  - Major internal extensions (nearly 2000 lines of code) which don't
+    show now, but which will eventually come in handy for the GUI tool
+
+jigdo 0.5.1 -- Richard Atterer, 22 Jul 2001
+
+  - Can now merge files into a half-finished image with >1 jigdo-file
+    invocations. This will be useful e.g. to "upgrade Debian CD
+    images", i.e. you can take some .debs from the old CD, so they
+    needn't be downloaded again.
+  - Can assign labels to input file locations, e.g. "--label
+    /opt/mirrors/debian=Debian"
+  - Cleanup & extension of .jigdo file format
+
+jigdo 0.5.0 -- Richard Atterer, about 20 Jun 2001
+
+  - Initial release, not very usable.
+
+jigdo 0.0.0 -- Richard Atterer, December 2000
+
+  - Discussion on debian-cd, jigdo enters vapourware stage.
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..0ab25dc
--- /dev/null
+++ b/configure
@@ -0,0 +1,2705 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+  --with-libdb            Use libdb3 (necessary for jigdo-file's cache) [yes]"
+ac_help="$ac_help
+  --with-gui              Build the jigdo GUI application [yes]"
+ac_help="$ac_help
+  --with-uint64=TYPE      Specify unsigned type of at least 64 bits [auto]
+                          (Replace spaces with underscores in TYPE)"
+ac_help="$ac_help
+  --enable-nls            Use Native Language Support [yes]"
+ac_help="$ac_help
+  --enable-debug          Compile in lots of additional debugging code [no]"
+ac_help="$ac_help
+  --enable-ccmalloc       Use the ccmalloc memory leak detector [no]"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.13"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=src/jigdo-file.cc
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+read JIGDO_VERSION < "$srcdir/VERSION"
+cat >> confdefs.h <<EOF
+#define JIGDO_VERSION "$JIGDO_VERSION"
+EOF
+
+
+
+if test -f "/etc/debian_version"; then
+    installDevel() {
+    echo "$ac_t""   * (Your system appears to be Debian-based; try" 1>&6
+    echo "$ac_t""   * installing the \`$1-dev' package.)" 1>&6
+    }
+elif test -x "/usr/bin/rpm" -o -x "/usr/local/bin/rpm"; then
+    installDevel() {
+    echo "$ac_t""   * (Your system appears to be RPM-based; try" 1>&6
+    echo "$ac_t""   * installing the package named \`$2-devel' or" 1>&6
+    echo "$ac_t""   * similar.)" 1>&6
+    }
+else
+    installDevel() {
+    echo "$ac_t""   * (If the software on your system is managed by a" 1>&6
+    echo "$ac_t""   * package manager like RPM, try installing the" 1>&6
+    echo "$ac_t""   * package named \`$2-devel' or similar.)" 1>&6
+    }
+fi
+
+for ac_prog in mawk gawk 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
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:571: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_AWK="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+AWK="$ac_cv_prog_AWK"
+if test -n "$AWK"; then
+  echo "$ac_t""$AWK" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+test -n "$AWK" && break
+done
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:610: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:640: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_prog_rejected=no
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_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 $# -gt 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
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  if test -z "$CC"; then
+    case "`uname -s`" in
+    *win32* | *WIN32*)
+      # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:691: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="cl"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+    esac
+  fi
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:723: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 734 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cc_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:765: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:770: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:779: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:798: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&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
+
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+
+for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:841: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CXX="$ac_prog"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CXX="$ac_cv_prog_CXX"
+if test -n "$CXX"; then
+  echo "$ac_t""$CXX" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+test -n "$CXX" && break
+done
+test -n "$CXX" || CXX="gcc"
+
+
+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:873: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 884 "configure"
+#include "confdefs.h"
+
+int main(){return(0);}
+EOF
+if { (eval echo configure:889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cxx_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cxx_cross=no
+  else
+    ac_cv_prog_cxx_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cxx_works=no
+fi
+rm -fr conftest*
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+
+echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
+if test $ac_cv_prog_cxx_works = no; then
+  { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:915: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
+cross_compiling=$ac_cv_prog_cxx_cross
+
+echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
+echo "configure:920: checking whether we are using GNU C++" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.C <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:929: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gxx=yes
+else
+  ac_cv_prog_gxx=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gxx" 1>&6
+
+if test $ac_cv_prog_gxx = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+
+ac_test_CXXFLAGS="${CXXFLAGS+set}"
+ac_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS=
+echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
+echo "configure:948: checking whether ${CXX-g++} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.cc
+if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
+  ac_cv_prog_cxx_g=yes
+else
+  ac_cv_prog_cxx_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cxx_g" 1>&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
+
+if test "$GXX" = "yes"; then
+    CFLAGS="$CFLAGS -Wall -W"
+    CXXFLAGS="$CXXFLAGS -Wall -W -Wpointer-arith -Wconversion -Wmissing-prototypes -Woverloaded-virtual"
+fi
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:1014: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+echo $ac_n "checking whether the C++ compiler is recent enough""... $ac_c" 1>&6
+echo "configure:1068: checking whether the C++ compiler is recent enough" >&5
+if eval "test \"`echo '$''{'jigdo_cv_prog_cxx_recent'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1073 "configure"
+#include "confdefs.h"
+#include <vector>
+    namespace A {
+      namespace B {
+        template<typename T = double> struct X {
+          template<class U> void function(T* t, U* u);
+        };
+      }
+      template<> void B::X<void>::function(void* t, int* u);
+    }
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  jigdo_cv_prog_cxx_recent="yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  jigdo_cv_prog_cxx_recent="no"
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$jigdo_cv_prog_cxx_recent" 1>&6
+if test "$jigdo_cv_prog_cxx_recent" = "no"; then
+    echo "$ac_t""   * Your compiler failed to recognize some advanced C++" 1>&6
+    echo "$ac_t""   * constructs - it might be too old to compile jigdo." 1>&6
+    echo "$ac_t""   * In case compilation fails, try upgrading to a newer" 1>&6
+    echo "$ac_t""   * compiler, e.g. GCC 2.95 or later." 1>&6
+fi
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+
+echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
+echo "configure:1157: checking how to run the C++ preprocessor" >&5
+if test -z "$CXXCPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+  CXXCPP="${CXX-g++} -E"
+  cat > conftest.$ac_ext <<EOF
+#line 1170 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1175: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CXXCPP=/lib/cpp
+fi
+rm -f conftest*
+  ac_cv_prog_CXXCPP="$CXXCPP"
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+fi
+fi
+CXXCPP="$ac_cv_prog_CXXCPP"
+echo "$ac_t""$CXXCPP" 1>&6
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:1200: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1205 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  ac_cv_header_stdc=yes
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1230 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "memchr" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1248 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "free" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+  :
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1269 "configure"
+#include "confdefs.h"
+#ifdef __cplusplus
+extern "C" void exit(int);
+#endif
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#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)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:1283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+  cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+for ac_hdr in stddef.h getopt.h unistd.h limits.h string.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1310: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1315 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking for zlibVersion in -lz""... $ac_c" 1>&6
+echo "configure:1348: checking for zlibVersion in -lz" >&5
+ac_lib_var=`echo z'_'zlibVersion | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lz  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1356 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char zlibVersion();
+
+int main() {
+zlibVersion()
+; return 0; }
+EOF
+if { (eval echo configure:1370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  have_zlib="yes"
+else
+  echo "$ac_t""no" 1>&6
+have_zlib="no"
+fi
+
+ac_safe=`echo "zlib.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for zlib.h""... $ac_c" 1>&6
+echo "configure:1393: checking for zlib.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1398 "configure"
+#include "confdefs.h"
+#include <zlib.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1403: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  have_zlib_h="yes"
+else
+  echo "$ac_t""no" 1>&6
+have_zlib_h="no"
+fi
+
+if test "$have_zlib" = "no" -o "$have_zlib_h" = "no"; then
+    echo "$ac_t""   * Please install zlib, it is needed by all of the" 1>&6
+    echo "$ac_t""   * programs." 1>&6
+    installDevel "zlib1g" "zlib"
+fi
+LIBS="-lz $LIBS"
+
+
+echo $ac_n "checking for value of --with-libdb""... $ac_c" 1>&6
+echo "configure:1434: checking for value of --with-libdb" >&5
+# Check whether --with-libdb or --without-libdb was given.
+if test "${with_libdb+set}" = set; then
+  withval="$with_libdb"
+  #'
+    jigdo_libdb="$withval"
+else
+  jigdo_libdb="yes"
+fi
+
+echo "$ac_t""\"$jigdo_libdb\"" 1>&6
+if test "$jigdo_libdb" = "yes"; then
+                    for db in "db" "db3" "db-3" "db-3.1" "db-3.2" "db-3.3"; do
+        echo $ac_n "checking for db_create in -l$db""... $ac_c" 1>&6
+echo "configure:1448: checking for db_create in -l$db" >&5
+ac_lib_var=`echo $db'_'db_create | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-l$db  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1456 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char db_create();
+
+int main() {
+db_create()
+; return 0; }
+EOF
+if { (eval echo configure:1470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  have_libdb="$db"
+else
+  echo "$ac_t""no" 1>&6
+have_libdb="no"
+fi
+
+        if test "$have_libdb" != "no"; then break; fi
+    done
+    ac_safe=`echo "db.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for db.h""... $ac_c" 1>&6
+echo "configure:1495: checking for db.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1500 "configure"
+#include "confdefs.h"
+#include <db.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1505: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  have_db_h="yes"
+else
+  echo "$ac_t""no" 1>&6
+have_db_h="no"
+fi
+
+    if test "$have_libdb" = "no" -o "$have_db_h" = "no"; then
+        echo "$ac_t""   * libdb3 not found - either install it, or use" 1>&6
+        echo "$ac_t""   * \`configure --without-libdb' to disable the db3" 1>&6
+        echo "$ac_t""   * file cache of jigdo-file. If this check should not" 1>&6
+        echo "$ac_t""   * have failed, force e.g. -ldb to be used with" 1>&6
+        echo "$ac_t""   * \`configure --with-libdb=-ldb'" 1>&6
+        installDevel "libdb3" "libdb3.3"
+        { echo "configure: error: libdb3 not found." 1>&2; exit 1; }
+    else
+        LIBS="-l$have_libdb $LIBS"
+    fi
+    cat >> confdefs.h <<\EOF
+#define HAVE_LIBDB 1
+EOF
+ elif test "$jigdo_libdb" != "no" -a "$jigdo_libdb" != "NO"; then
+        LIBS="$jigdo_libdb $LIBS"
+    cat >> confdefs.h <<\EOF
+#define HAVE_LIBDB 1
+EOF
+
+else
+    cat >> confdefs.h <<\EOF
+#define HAVE_LIBDB 0
+EOF
+
+fi
+
+echo $ac_n "checking for value of --with-gui""... $ac_c" 1>&6
+echo "configure:1555: checking for value of --with-gui" >&5
+# Check whether --with-gui or --without-gui was given.
+if test "${with_gui+set}" = set; then
+  withval="$with_gui"
+  jigdo_gui="$withval"
+else
+  jigdo_gui="yes"
+fi
+
+echo "$ac_t""\"$jigdo_gui\"" 1>&6
+
+echo $ac_n "checking for GTK+ version""... $ac_c" 1>&6
+echo "configure:1567: checking for GTK+ version" >&5
+jigdo_gtkver="`gtk-config --version 2>&1`"
+echo "$ac_t""$jigdo_gtkver" 1>&6
+case "$jigdo_gtkver" in
+    1.2.*|1.3.*) ;;
+    *)
+    if test "$jigdo_gui" = "yes"; then
+    echo "$ac_t""   * GTK+ not installed, or the installed version is not" 1>&6
+    echo "$ac_t""   * 1.2.x, or gtk-config is not in \$PATH. Please" 1>&6
+    echo "$ac_t""   * install GTK+ 1.2, it is needed by \`jigdo'." 1>&6
+    installDevel "libgtk1.2" "libgtk1.2"
+    fi
+esac
+noConfig="# gtk-config not found - add compiler switches here"
+GTKCFLAGS="`gtk-config --cflags 2>/dev/null || echo $noConfig`"
+GTKLIBS="`gtk-config --libs 2>/dev/null || echo $noConfig`"
+
+
+
+echo $ac_n "checking for libwww version""... $ac_c" 1>&6
+echo "configure:1587: checking for libwww version" >&5
+jigdo_libwwwver="`libwww-config --version 2>&1`"
+echo "$ac_t""$jigdo_libwwwver" 1>&6
+LIBWWWCFLAGS="# libwww-config not found - add compiler switches here"
+LIBWWWLIBS="$LIBWWWCFLAGS"
+case "$jigdo_libwwwver" in
+        [6-9]*|5.[4-9]*|5.[1-9][0-9]*|5.3.[2-9]*|5.3.[1-9][0-9]*)
+        LIBWWWCFLAGS="`libwww-config --cflags 2>/dev/null`"
+        LIBWWWLIBS="`libwww-config --libs 2>/dev/null`"
+                        LIBWWWCFLAGS=`echo " $LIBWWWCFLAGS " | sed -e 's% -I/usr/include/* % %'`
+        ;;
+    *)
+    if test "$jigdo_gui" = "yes"; then
+    echo "$ac_t""   * libwww not installed, or the installed version is" 1>&6
+    echo "$ac_t""   * too old, or libwww-config is not in \$PATH. Please" 1>&6
+    echo "$ac_t""   * install libwww 5.3.2 or later, it is needed by the" 1>&6
+    echo "$ac_t""   * \`jigdo' program." 1>&6
+    installDevel "libwww" "w3c-libwww-devel/libopenssl0"
+    fi
+esac
+
+
+
+echo $ac_n "checking for size_t""... $ac_c" 1>&6
+echo "configure:1611: checking for size_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1616 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_size_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_size_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_size_t" 1>&6
+if test $ac_cv_type_size_t = no; then
+  cat >> confdefs.h <<\EOF
+#define size_t unsigned
+EOF
+
+fi
+
+echo $ac_n "checking whether we are compiling for Windows""... $ac_c" 1>&6
+echo "configure:1644: checking whether we are compiling for Windows" >&5
+cat > conftest.$ac_ext <<EOF
+#line 1646 "configure"
+#include "confdefs.h"
+
+#if defined WINNT || defined __WINNT || defined __WINNT__ || defined WIN32 \
+    || defined _WIN32 || defined __WIN32 || defined __WIN32__
+  poorsoul
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "poorsoul" >/dev/null 2>&1; then
+  rm -rf conftest*
+  is_windows=yes
+else
+  rm -rf conftest*
+  is_windows=no
+fi
+rm -f conftest*
+
+echo "$ac_t""$is_windows" 1>&6
+if test "$is_windows" = yes; then
+    cat >> confdefs.h <<\EOF
+#define WINDOWS 1
+EOF
+
+    exe=".exe"
+else
+    cat >> confdefs.h <<\EOF
+#define UNIX 1
+EOF
+
+    exe=""
+fi
+
+
+dirent_hack="no"
+if test "$is_windows" = yes; then
+    CPPFLAGS_orig="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $GTKCFLAGS"
+    echo $ac_n "checking for conflicting 'struct dirent' in dirent.h and glib.h""... $ac_c" 1>&6
+echo "configure:1685: checking for conflicting 'struct dirent' in dirent.h and glib.h" >&5
+    cat > conftest.$ac_ext <<EOF
+#line 1687 "configure"
+#include "confdefs.h"
+#include <dirent.h>
+                    #include <glib.h>
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1695: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  dirent_hack="no"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  dirent_hack="yes"
+fi
+rm -f conftest*
+    if test "$dirent_hack" = "yes"; then
+        cat > conftest.$ac_ext <<EOF
+#line 1707 "configure"
+#include "confdefs.h"
+#include <dirent.h>
+                        #define dirent other_dirent
+                        #define DIR other_DIR
+                        #include <glib.h>
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1717: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  dirent_hack="no"
+fi
+rm -f conftest*
+    fi
+    echo "$ac_t""$dirent_hack" 1>&6
+    CPPFLAGS="$CPPFLAGS_orig"
+fi
+if test "$dirent_hack" = "yes"; then
+    cat >> confdefs.h <<\EOF
+#define DIRENT_HACK 1
+EOF
+
+else
+    cat >> confdefs.h <<\EOF
+#define DIRENT_HACK 0
+EOF
+
+fi
+
+echo $ac_n "checking for value of --with-uint64""... $ac_c" 1>&6
+echo "configure:1743: checking for value of --with-uint64" >&5
+# Check whether --with-uint64 or --without-uint64 was given.
+if test "${with_uint64+set}" = set; then
+  withval="$with_uint64"
+  jigdo_uint64="yes"
+else
+  jigdo_uint64="auto"
+fi
+
+echo "$ac_t""\"$jigdo_uint64\"" 1>&6
+
+echo $ac_n "checking for unsigned long long""... $ac_c" 1>&6
+echo "configure:1755: checking for unsigned long long" >&5
+if eval "test \"`echo '$''{'jigdo_cv_have_ulonglong'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1760 "configure"
+#include "confdefs.h"
+
+int main() {
+unsigned long long x = 0
+; return 0; }
+EOF
+if { (eval echo configure:1767: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  jigdo_cv_have_ulonglong=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  jigdo_cv_have_ulonglong=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$jigdo_cv_have_ulonglong" 1>&6
+if test "$jigdo_cv_have_ulonglong" = "yes"; then
+    cat >> confdefs.h <<\EOF
+#define HAVE_UNSIGNED_LONG_LONG 1
+EOF
+
+else
+    cat >> confdefs.h <<\EOF
+#define HAVE_UNSIGNED_LONG_LONG 0
+EOF
+
+fi
+
+if test "$jigdo_uint64" = auto; then
+    echo $ac_n "checking size of unsigned long""... $ac_c" 1>&6
+echo "configure:1794: checking size of unsigned long" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_long'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_sizeof_unsigned_long=0
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1802 "configure"
+#include "confdefs.h"
+#ifdef __cplusplus
+extern "C" void exit(int);
+#endif
+#include <stdio.h>
+#include <sys/types.h>
+main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  fprintf(f, "%d\n", sizeof(unsigned long));
+  exit(0);
+}
+EOF
+if { (eval echo configure:1817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_unsigned_long=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_unsigned_long=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_unsigned_long" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
+EOF
+
+
+    echo $ac_n "checking size of unsigned long long""... $ac_c" 1>&6
+echo "configure:1837: checking size of unsigned long long" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_unsigned_long_long'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_sizeof_unsigned_long_long=0
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1845 "configure"
+#include "confdefs.h"
+#ifdef __cplusplus
+extern "C" void exit(int);
+#endif
+#include <stdio.h>
+#include <sys/types.h>
+main()
+{
+  FILE *f=fopen("conftestval", "w");
+  if (!f) exit(1);
+  fprintf(f, "%d\n", sizeof(unsigned long long));
+  exit(0);
+}
+EOF
+if { (eval echo configure:1860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_sizeof_unsigned_long_long=`cat conftestval`
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_sizeof_unsigned_long_long=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_unsigned_long_long" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
+EOF
+
+
+    if test "$ac_cv_sizeof_unsigned_long" -ge 8; then
+        jigdo_uint64='unsigned long'
+    elif test "$ac_cv_sizeof_unsigned_long_long" -ge 8; then
+        jigdo_uint64='unsigned long long'
+    else
+        if test "$jigdo_cv_have_ulonglong" = "yes"; then
+            jigdo_uint64='unsigned long long'
+        else
+            jigdo_uint64='unsigned long'
+        fi
+        echo "$ac_t""   * Could not find an unsigned type with at least 64" 1>&6
+        echo "$ac_t""   * bits (or maybe char has >8 bits?) - defaulting to" 1>&6
+        echo "$ac_t""   * \`$jigdo_uint64'. You may want to override" 1>&6
+        echo "$ac_t""   * this using --with-uint64=TYPE" 1>&6
+    fi
+elif test "$jigdo_uint64" = yes -o "$jigdo_uint64" = no; then
+    { echo "configure: error: Invalid argument to --with-uint64 option" 1>&2; exit 1; }
+else
+    jigdo_uint64=`echo $jigdo_uint64 | sed -e 's/_/ /g'`
+fi
+echo $ac_n "checking for 64 bit unsigned integer type""... $ac_c" 1>&6
+echo "configure:1900: checking for 64 bit unsigned integer type" >&5
+echo "$ac_t""$jigdo_uint64" 1>&6
+cat >> confdefs.h <<EOF
+#define TYPE_UINT64 $jigdo_uint64
+EOF
+
+
+echo $ac_n "checking whether operator <<(uint64) works""... $ac_c" 1>&6
+echo "configure:1908: checking whether operator <<(uint64) works" >&5
+if eval "test \"`echo '$''{'jigdo_cv_prog_cxx_outuint64'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1913 "configure"
+#include "confdefs.h"
+ #include <iostream>
+      namespace std { }
+      using namespace std; 
+int main() {
+ $jigdo_uint64 x;
+      cout << x << endl; 
+; return 0; }
+EOF
+if { (eval echo configure:1923: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  jigdo_cv_prog_cxx_outuint64="yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  jigdo_cv_prog_cxx_outuint64="no"
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$jigdo_cv_prog_cxx_outuint64" 1>&6
+if test "$jigdo_cv_prog_cxx_outuint64" = "yes"; then
+    cat >> confdefs.h <<\EOF
+#define HAVE_OUTUINT64 1
+EOF
+
+else
+    cat >> confdefs.h <<\EOF
+#define HAVE_OUTUINT64 0
+EOF
+
+fi
+
+for ac_func in lstat truncate ftruncate mmap fileno snprintf _snprintf
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:1952: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1957 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1983: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking for TIOCGWINSZ ioctl""... $ac_c" 1>&6
+echo "configure:2009: checking for TIOCGWINSZ ioctl" >&5
+cat > conftest.$ac_ext <<EOF
+#line 2011 "configure"
+#include "confdefs.h"
+ #include <stdio.h>
+      #include <sys/ioctl.h>
+int main() {
+ struct winsize w; int i;
+      ioctl(fileno(stdout), TIOCGWINSZ, &w);
+      i = w.ws_col; 
+; return 0; }
+EOF
+if { (eval echo configure:2021: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  jigdo_have_ioctl_winsz="yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  jigdo_have_ioctl_winsz="no"
+fi
+rm -f conftest*
+echo "$ac_t""$jigdo_have_ioctl_winsz" 1>&6
+if test "$jigdo_have_ioctl_winsz" = "yes"; then
+    cat >> confdefs.h <<\EOF
+#define HAVE_IOCTL_WINSZ 1
+EOF
+
+elif test "$is_windows" = no; then
+    echo "$ac_t""   * jigdo-file progress reports will not be formatted" 1>&6
+    echo "$ac_t""   * nicely, because no way has been found to determine" 1>&6
+    echo "$ac_t""   * the screen width in characters." 1>&6
+    cat >> confdefs.h <<\EOF
+#define HAVE_IOCTL_WINSZ 0
+EOF
+
+else
+    cat >> confdefs.h <<\EOF
+#define HAVE_IOCTL_WINSZ 0
+EOF
+
+fi
+
+if test "$ac_cv_func_snprintf" = "no" -a "$ac_cv_func__snprintf" = "yes"; then
+    cat >> confdefs.h <<\EOF
+#define snprintf _snprintf
+EOF
+
+fi
+
+echo $ac_n "checking for value of --enable-nls""... $ac_c" 1>&6
+echo "configure:2060: checking for value of --enable-nls" >&5
+# Check whether --enable-nls or --disable-nls was given.
+if test "${enable_nls+set}" = set; then
+  enableval="$enable_nls"
+  USE_NLS=$enableval
+else
+  USE_NLS=yes
+fi
+
+echo "$ac_t""\"$USE_NLS\"" 1>&6
+
+CATALOGS=""
+if test "$USE_NLS" = "yes"; then
+    cat >> confdefs.h <<\EOF
+#define ENABLE_NLS 1
+EOF
+
+
+    echo $ac_n "checking for dgettext in -lintl""... $ac_c" 1>&6
+echo "configure:2079: checking for dgettext in -lintl" >&5
+ac_lib_var=`echo intl'_'dgettext | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lintl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2087 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char dgettext();
+
+int main() {
+dgettext()
+; return 0; }
+EOF
+if { (eval echo configure:2101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  x="yes"
+else
+  echo "$ac_t""no" 1>&6
+x="no"
+fi
+
+    if test "$x" = "yes"; then
+        LIBS="$LIBS -lintl";
+        echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
+echo "configure:2125: checking for iconv in -liconv" >&5
+ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-liconv  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2133 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char iconv();
+
+int main() {
+iconv()
+; return 0; }
+EOF
+if { (eval echo configure:2147: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  LIBS="$LIBS -liconv"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+    fi
+    ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
+echo "configure:2170: checking for libintl.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2175 "configure"
+#include "confdefs.h"
+#include <libintl.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  x="yes"
+else
+  echo "$ac_t""no" 1>&6
+x="no"
+fi
+
+    if test "$x" = "no"; then
+        echo "$ac_t""   * Make sure gettext is installed, or use" 1>&6
+        echo "$ac_t""   * --disable-nls to switch off gettext support." 1>&6
+        { echo "configure: error: libintl.h not found." 1>&2; exit 1; }
+    fi
+    echo $ac_n "checking whether dgettext works""... $ac_c" 1>&6
+echo "configure:2208: checking whether dgettext works" >&5
+    cat > conftest.$ac_ext <<EOF
+#line 2210 "configure"
+#include "confdefs.h"
+#include <libintl.h>
+int main() {
+dgettext("", "")
+; return 0; }
+EOF
+if { (eval echo configure:2217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  x="yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  x="no"
+fi
+rm -f conftest*
+    echo "$ac_t"""$x"" 1>&6
+    if test "$x" = "no"; then
+        echo "$ac_t""   * Make sure gettext is installed, or use" 1>&6
+        echo "$ac_t""   * --disable-nls to switch off gettext support." 1>&6
+        { echo "configure: error: dgettext() call could not be linked." 1>&2; exit 1; }
+    fi
+    
+    echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
+echo "configure:2235: checking for catalogs to be installed" >&5
+    ALL_LINGUAS=`(cd "$srcdir/po" && echo *.po *.pox "") \
+        | sed -e "s/\**\.pox* / /g"`
+    if test "$LINGUAS"; then
+        NEW_LINGUAS=""
+        for provided in $ALL_LINGUAS; do
+            x=""
+            for wanted in $LINGUAS; do
+                case "$provided" in "$wanted"*) x=" $provided";; esac
+                case "$wanted" in "$provided"*) x=" $provided";; esac
+            done
+            NEW_LINGUAS="$NEW_LINGUAS$x"
+        done
+        LINGUAS="$NEW_LINGUAS"
+        echo "$ac_t""LINGUAS:$LINGUAS" 1>&6
+    else
+        LINGUAS="$ALL_LINGUAS"
+        echo "$ac_t""$LINGUAS" 1>&6
+    fi
+    for x in $LINGUAS; do CATALOGS="$CATALOGS $x.gmo"; done
+else
+    cat >> confdefs.h <<\EOF
+#define ENABLE_NLS 0
+EOF
+
+fi
+
+
+echo $ac_n "checking for value of --enable-debug""... $ac_c" 1>&6
+echo "configure:2264: checking for value of --enable-debug" >&5
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval="$enable_debug"
+  jigdo_debug=$enableval
+else
+  jigdo_debug=no
+fi
+
+echo "$ac_t""\"$jigdo_debug\"" 1>&6
+DEBUG_PROGRAMS=""
+if test "$jigdo_debug" = yes; then
+    cat >> confdefs.h <<\EOF
+#define DEBUG 1
+EOF
+
+    DEBUG_PROGRAMS='$(debug-programs)'
+elif test "$jigdo_debug" != no; then
+    { echo "configure: error: Invalid argument to --enable-debug option" 1>&2; exit 1; }
+else
+    cat >> confdefs.h <<\EOF
+#define DEBUG 0
+EOF
+
+fi
+
+
+echo $ac_n "checking for value of --enable-ccmalloc""... $ac_c" 1>&6
+echo "configure:2292: checking for value of --enable-ccmalloc" >&5
+# Check whether --enable-ccmalloc or --disable-ccmalloc was given.
+if test "${enable_ccmalloc+set}" = set; then
+  enableval="$enable_ccmalloc"
+  jigdo_ccmalloc=$enableval
+else
+  jigdo_ccmalloc=no
+fi
+
+echo "$ac_t""\"$jigdo_ccmalloc\"" 1>&6
+CCMALLOC=""
+if test "$jigdo_ccmalloc" = yes; then
+    cat >> confdefs.h <<\EOF
+#define CCMALLOC 1
+EOF
+
+    CCMALLOC='$(CCMALLOC)'
+elif test "$jigdo_ccmalloc" != no; then
+    { echo "configure: error: Invalid argument to --enable-ccmalloc option" 1>&2; exit 1; }
+else
+    cat >> confdefs.h <<\EOF
+#define CCMALLOC 0
+EOF
+
+fi
+
+
+touch "$srcdir/src/TAGS"
+
+if test "$jigdo_gui" = "yes"; then
+    BUILD_TARGETS="jigdo-file$exe jigdo$exe #"
+    INSTALL_TARGETS="install-jigdo-file install-jigdo-lite install-jigdo #"
+else
+    BUILD_TARGETS="jigdo-file$exe # jigdo$exe"
+    INSTALL_TARGETS="install-jigdo-file install-jigdo-lite # install-jigdo"
+fi
+
+
+
+SRC_MAKEDEPS="$srcdir/src/Makedeps"
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile doc/Makefile src/Makefile po/Makefile src/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@JIGDO_VERSION@%$JIGDO_VERSION%g
+s%@AWK@%$AWK%g
+s%@CC@%$CC%g
+s%@CXX@%$CXX%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@CXXCPP@%$CXXCPP%g
+s%@GTKCFLAGS@%$GTKCFLAGS%g
+s%@GTKLIBS@%$GTKLIBS%g
+s%@LIBWWWCFLAGS@%$LIBWWWCFLAGS%g
+s%@LIBWWWLIBS@%$LIBWWWLIBS%g
+s%@exe@%$exe%g
+s%@USE_NLS@%$USE_NLS%g
+s%@CATALOGS@%$CATALOGS%g
+s%@DEBUG_PROGRAMS@%$DEBUG_PROGRAMS%g
+s%@CCMALLOC@%$CCMALLOC%g
+s%@BUILD_TARGETS@%$BUILD_TARGETS%g
+s%@INSTALL_TARGETS@%$INSTALL_TARGETS%g
+/@SRC_MAKEDEPS@/r $SRC_MAKEDEPS
+s%@SRC_MAKEDEPS@%%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile doc/Makefile src/Makefile po/Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([  ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='\([     ][      ]*\)[^  ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='\([     ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+  CONFIG_HEADERS="src/config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  echo creating $ac_file
+
+  rm -f conftest.frag conftest.in conftest.out
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h.  And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #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.
+cat >> conftest.vals <<\EOF
+s%^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+  ac_lines=`grep -c . conftest.vals`
+  # grep -c gives empty output for an empty file on some AIX systems.
+  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+  # Write a limited-size here document to conftest.frag.
+  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+  echo 'CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+  rm -f conftest.vals
+  mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+  rm -f conftest.frag conftest.h
+  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
+  cat conftest.in >> conftest.h
+  rm -f conftest.in
+  if cmp -s $ac_file conftest.h 2>/dev/null; then
+    echo "$ac_file is unchanged"
+    rm -f conftest.h
+  else
+    # Remove last slash and all that follows it.  Not all systems have dirname.
+      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+      # The file is in a subdirectory.
+      test ! -d "$ac_dir" && mkdir "$ac_dir"
+    fi
+    rm -f $ac_file
+    mv conftest.h $ac_file
+  fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..98b7c53
--- /dev/null
@@ -0,0 +1,426 @@
+dnl Process this file with autoconf to produce a configure script.
+dnl $Id: configure.in,v 1.63 2002/04/10 20:07:40 richard Exp $
+AC_INIT(src/jigdo-file.cc)
+AC_CONFIG_HEADER(src/config.h)
+dnl ______________________________________________________________________
+
+dnl Version number of our program.
+read JIGDO_VERSION < "$srcdir/VERSION"
+AC_DEFINE_UNQUOTED(JIGDO_VERSION, "$JIGDO_VERSION")
+AC_SUBST(JIGDO_VERSION)
+dnl ______________________________________________________________________
+
+dnl installDevel is given 2 arguments: Name of "devel" package on
+dnl Debian-based systems, name on RPM-based systems
+if test -f "/etc/debian_version"; then
+    installDevel() {
+    AC_MSG_RESULT([   * (Your system appears to be Debian-based; try])
+    AC_MSG_RESULT([   * installing the \`$1-dev' package.)])
+    }
+elif test -x "/usr/bin/rpm" -o -x "/usr/local/bin/rpm"; then
+    installDevel() {
+    AC_MSG_RESULT([   * (Your system appears to be RPM-based; try])
+    AC_MSG_RESULT([   * installing the package named \`$2-devel' or])
+    AC_MSG_RESULT([   * similar.)])
+    }
+else
+    installDevel() {
+    AC_MSG_RESULT([   * (If the software on your system is managed by a])
+    AC_MSG_RESULT([   * package manager like RPM, try installing the])
+    AC_MSG_RESULT([   * package named \`$2-devel' or similar.)])
+    }
+fi
+dnl ______________________________________________________________________
+
+dnl Checks for programs.
+AC_PROG_AWK
+AC_LANG_C
+AC_PROG_CC
+AC_LANG_CPLUSPLUS
+AC_PROG_CXX
+if test "$GXX" = "yes"; then
+    CFLAGS="$CFLAGS -Wall -W"
+    CXXFLAGS="$CXXFLAGS -Wall -W -Wpointer-arith -Wconversion -Wmissing-prototypes -Woverloaded-virtual"
+fi
+AC_PROG_INSTALL
+dnl ____________________
+
+AC_CACHE_CHECK(whether the C++ compiler is recent enough,
+               jigdo_cv_prog_cxx_recent,
+    AC_TRY_COMPILE(
+    #include <vector>
+    namespace A {
+      namespace B {
+        template<typename T = double> struct X {
+          template<class U> void function(T* t, U* u);
+        };
+      }
+      template<> void B::X<void>::function(void* t, int* u);
+    },, jigdo_cv_prog_cxx_recent="yes", jigdo_cv_prog_cxx_recent="no")
+)
+if test "$jigdo_cv_prog_cxx_recent" = "no"; then
+    AC_MSG_RESULT([   * Your compiler failed to recognize some advanced C++])
+    AC_MSG_RESULT([   * constructs - it might be too old to compile jigdo.])
+    AC_MSG_RESULT([   * In case compilation fails, try upgrading to a newer])
+    AC_MSG_RESULT([   * compiler, e.g. GCC 2.95 or later.])
+fi
+AC_CACHE_SAVE
+dnl ______________________________________________________________________
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS(stddef.h getopt.h unistd.h limits.h string.h)
+
+dnl Checks for libraries and accompanying header files
+AC_CHECK_LIB(z, zlibVersion, have_zlib="yes", have_zlib="no")
+AC_CHECK_HEADER(zlib.h, have_zlib_h="yes", have_zlib_h="no")
+if test "$have_zlib" = "no" -o "$have_zlib_h" = "no"; then
+    AC_MSG_RESULT([   * Please install zlib, it is needed by all of the])
+    AC_MSG_RESULT([   * programs.])
+    installDevel "zlib1g" "zlib"
+fi
+LIBS="-lz $LIBS"
+
+
+AC_MSG_CHECKING(for value of --with-libdb)
+AC_ARG_WITH(libdb,
+    [  --with-libdb            Use libdb3 (necessary for jigdo-file's cache) [yes]], #'
+    jigdo_libdb="$withval", jigdo_libdb="yes")
+AC_MSG_RESULT(\"$jigdo_libdb\")
+if test "$jigdo_libdb" = "yes"; then
+    dnl libdb V3 by "Sleepycat". Apparently the only -l switch
+    dnl compatible across RedHat and Debian is -ldb. In case -ldb isn't
+    dnl there or is V2 or V1, try a few alternative locations. db_create
+    dnl is only available in the lib from V3 onwards.
+    for db in "db" "db3" "db-3" "db-3.1" "db-3.2" "db-3.3"; do
+        AC_CHECK_LIB($db, db_create, have_libdb="$db", have_libdb="no")
+        if test "$have_libdb" != "no"; then break; fi
+    done
+    AC_CHECK_HEADER(db.h, have_db_h="yes", have_db_h="no")
+    if test "$have_libdb" = "no" -o "$have_db_h" = "no"; then
+        AC_MSG_RESULT([   * libdb3 not found - either install it, or use])
+        AC_MSG_RESULT([   * \`configure --without-libdb' to disable the db3])
+        AC_MSG_RESULT([   * file cache of jigdo-file. If this check should not])
+        AC_MSG_RESULT([   * have failed, force e.g. -ldb to be used with])
+        AC_MSG_RESULT([   * \`configure --with-libdb=-ldb'])
+        installDevel "libdb3" "libdb3.3"
+        AC_MSG_ERROR(libdb3 not found.)
+    else
+        LIBS="-l$have_libdb $LIBS"
+    fi
+    AC_DEFINE(HAVE_LIBDB, 1) dnl make compilation fail if libdb not there
+elif test "$jigdo_libdb" != "no" -a "$jigdo_libdb" != "NO"; then
+    dnl Pass argument (e.g. "-ldb") to compiler
+    LIBS="$jigdo_libdb $LIBS"
+    AC_DEFINE(HAVE_LIBDB, 1)
+else
+    AC_DEFINE(HAVE_LIBDB, 0)
+fi
+dnl ________________________________________
+
+AC_MSG_CHECKING(for value of --with-gui)
+AC_ARG_WITH(gui,
+    [  --with-gui              Build the jigdo GUI application [yes]],
+    jigdo_gui="$withval", jigdo_gui="yes")
+AC_MSG_RESULT(\"$jigdo_gui\")
+dnl ____________________
+
+dnl GTK+
+AC_MSG_CHECKING(for GTK+ version)
+jigdo_gtkver="`gtk-config --version 2>&1`"
+AC_MSG_RESULT($jigdo_gtkver)
+case "$jigdo_gtkver" in
+    1.2.*|1.3.*) ;;
+    *)
+    if test "$jigdo_gui" = "yes"; then
+    AC_MSG_RESULT([   * GTK+ not installed, or the installed version is not])
+    AC_MSG_RESULT([   * 1.2.x, or gtk-config is not in \$PATH. Please])
+    AC_MSG_RESULT([   * install GTK+ 1.2, it is needed by \`jigdo'.])
+    installDevel "libgtk1.2" "libgtk1.2"
+    fi
+esac
+noConfig="# gtk-config not found - add compiler switches here"
+GTKCFLAGS="`gtk-config --cflags 2>/dev/null || echo $noConfig`"
+GTKLIBS="`gtk-config --libs 2>/dev/null || echo $noConfig`"
+AC_SUBST(GTKCFLAGS)
+AC_SUBST(GTKLIBS)
+dnl ____________________
+
+dnl libwww
+AC_MSG_CHECKING(for libwww version)
+jigdo_libwwwver="`libwww-config --version 2>&1`"
+AC_MSG_RESULT($jigdo_libwwwver)
+LIBWWWCFLAGS="# libwww-config not found - add compiler switches here"
+LIBWWWLIBS="$LIBWWWCFLAGS"
+case "$jigdo_libwwwver" in
+    dnl Extra [] around [0-9] style wildcards, or M4 swallows them
+    [[6-9]*|5.[4-9]*|5.[1-9][0-9]*|5.3.[2-9]*|5.3.[1-9][0-9]*])
+        LIBWWWCFLAGS="`libwww-config --cflags 2>/dev/null`"
+        LIBWWWLIBS="`libwww-config --libs 2>/dev/null`"
+        dnl Some versions of libwww-config include "-I/usr/include" in their
+        dnl --cflags output, which completely upsets some versions of GCC.
+        LIBWWWCFLAGS=`echo " $LIBWWWCFLAGS " | sed -e 's% -I/usr/include/* % %'`
+        ;;
+    *)
+    if test "$jigdo_gui" = "yes"; then
+    AC_MSG_RESULT([   * libwww not installed, or the installed version is])
+    AC_MSG_RESULT([   * too old, or libwww-config is not in \$PATH. Please])
+    AC_MSG_RESULT([   * install libwww 5.3.2 or later, it is needed by the])
+    AC_MSG_RESULT([   * \`jigdo' program.])
+    installDevel "libwww" "w3c-libwww-devel/libopenssl0"
+    fi
+esac
+AC_SUBST(LIBWWWCFLAGS)
+AC_SUBST(LIBWWWLIBS)
+dnl ____________________
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_SIZE_T
+AC_MSG_CHECKING(whether we are compiling for Windows)
+AC_EGREP_CPP(poorsoul, [
+#if defined WINNT || defined __WINNT || defined __WINNT__ || defined WIN32 \
+    || defined _WIN32 || defined __WIN32 || defined __WIN32__
+  poorsoul
+#endif], is_windows=yes, is_windows=no)
+AC_MSG_RESULT($is_windows)
+if test "$is_windows" = yes; then
+    AC_DEFINE(WINDOWS)
+    exe=".exe"
+else
+    AC_DEFINE(UNIX)
+    exe=""
+fi
+AC_SUBST(exe)
+dnl ____________________
+
+dnl Both MinGW32 and glib declare 'struct dirent' and 'struct DIR'. If
+dnl there are problems using the relevant headers together, do some
+dnl really dirty things with the preprocessor to disable the glib
+dnl declaration.
+dirent_hack="no"
+if test "$is_windows" = yes; then
+    CPPFLAGS_orig="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $GTKCFLAGS"
+    AC_MSG_CHECKING(for conflicting 'struct dirent' in dirent.h and glib.h)
+    AC_TRY_COMPILE([#include <dirent.h>
+                    #include <glib.h>], , dirent_hack="no",dirent_hack="yes")
+    if test "$dirent_hack" = "yes"; then
+        AC_TRY_COMPILE([#include <dirent.h>
+                        #define dirent other_dirent
+                        #define DIR other_DIR
+                        #include <glib.h>], , , dirent_hack="no")
+    fi
+    AC_MSG_RESULT($dirent_hack)
+    CPPFLAGS="$CPPFLAGS_orig"
+fi
+if test "$dirent_hack" = "yes"; then
+    AC_DEFINE(DIRENT_HACK, 1)
+else
+    AC_DEFINE(DIRENT_HACK, 0)
+fi
+dnl ____________________
+
+AC_MSG_CHECKING(for value of --with-uint64)
+AC_ARG_WITH(uint64,
+    [  --with-uint64=TYPE      Specify unsigned type of at least 64 bits [auto]
+                          (Replace spaces with underscores in TYPE)],
+    jigdo_uint64="yes", jigdo_uint64="auto")
+AC_MSG_RESULT(\"$jigdo_uint64\")
+
+AC_CACHE_CHECK(for unsigned long long, jigdo_cv_have_ulonglong,
+    AC_TRY_COMPILE(, unsigned long long x = 0,
+                   jigdo_cv_have_ulonglong=yes, jigdo_cv_have_ulonglong=no))
+if test "$jigdo_cv_have_ulonglong" = "yes"; then
+    AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1)
+else
+    AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 0)
+fi
+
+if test "$jigdo_uint64" = auto; then
+    AC_CHECK_SIZEOF(unsigned long, 0)
+    AC_CHECK_SIZEOF(unsigned long long, 0)
+    if test "$ac_cv_sizeof_unsigned_long" -ge 8; then
+        jigdo_uint64='unsigned long'
+    elif test "$ac_cv_sizeof_unsigned_long_long" -ge 8; then
+        jigdo_uint64='unsigned long long'
+    else
+        if test "$jigdo_cv_have_ulonglong" = "yes"; then
+            jigdo_uint64='unsigned long long'
+        else
+            jigdo_uint64='unsigned long'
+        fi
+        AC_MSG_RESULT([   * Could not find an unsigned type with at least 64])
+        AC_MSG_RESULT([   * bits (or maybe char has >8 bits?) - defaulting to])
+        AC_MSG_RESULT([   * \`$jigdo_uint64'. You may want to override])
+        AC_MSG_RESULT([   * this using --with-uint64=TYPE])
+    fi
+elif test "$jigdo_uint64" = yes -o "$jigdo_uint64" = no; then
+    AC_MSG_ERROR(Invalid argument to --with-uint64 option)
+else
+    jigdo_uint64=`echo $jigdo_uint64 | sed -e 's/_/ /g'`
+fi
+AC_MSG_CHECKING(for 64 bit unsigned integer type)
+AC_MSG_RESULT($jigdo_uint64)
+AC_DEFINE_UNQUOTED(TYPE_UINT64, $jigdo_uint64)
+
+AC_CACHE_CHECK(whether operator <<(uint64) works,
+               jigdo_cv_prog_cxx_outuint64,
+    AC_TRY_COMPILE(
+    [ #include <iostream>
+      namespace std { }
+      using namespace std; ],
+    [ $jigdo_uint64 x;
+      cout << x << endl; ],
+    jigdo_cv_prog_cxx_outuint64="yes", jigdo_cv_prog_cxx_outuint64="no")
+)
+if test "$jigdo_cv_prog_cxx_outuint64" = "yes"; then
+    AC_DEFINE(HAVE_OUTUINT64, 1)
+else
+    AC_DEFINE(HAVE_OUTUINT64, 0)
+fi
+dnl ____________________
+
+dnl Checks for library functions.
+AC_CHECK_FUNCS(lstat truncate ftruncate mmap fileno snprintf _snprintf)
+
+dnl Check whether reading width of TTY via ioctl() works
+AC_MSG_CHECKING(for TIOCGWINSZ ioctl)
+AC_TRY_COMPILE(
+    [ #include <stdio.h>
+      #include <sys/ioctl.h>],
+    [ struct winsize w; int i;
+      ioctl(fileno(stdout), TIOCGWINSZ, &w);
+      i = w.ws_col; ],
+    jigdo_have_ioctl_winsz="yes", jigdo_have_ioctl_winsz="no")
+AC_MSG_RESULT($jigdo_have_ioctl_winsz)
+if test "$jigdo_have_ioctl_winsz" = "yes"; then
+    AC_DEFINE(HAVE_IOCTL_WINSZ, 1)
+elif test "$is_windows" = no; then
+    AC_MSG_RESULT([   * jigdo-file progress reports will not be formatted])
+    AC_MSG_RESULT([   * nicely, because no way has been found to determine])
+    AC_MSG_RESULT([   * the screen width in characters.])
+    AC_DEFINE(HAVE_IOCTL_WINSZ, 0)
+else
+    AC_DEFINE(HAVE_IOCTL_WINSZ, 0)
+fi
+
+dnl On native Windows (MinGW32), there is no snprintf, just _snprintf
+if test "$ac_cv_func_snprintf" = "no" -a "$ac_cv_func__snprintf" = "yes"; then
+    AC_DEFINE(snprintf, _snprintf)
+fi
+dnl ______________________________________________________________________
+
+dnl Check for Native Language Support (gettext)
+AC_MSG_CHECKING(for value of --enable-nls)
+AC_ARG_ENABLE(nls,
+    [  --enable-nls            Use Native Language Support [yes]],
+    USE_NLS=$enableval, USE_NLS=yes)
+AC_MSG_RESULT(\"$USE_NLS\")
+AC_SUBST(USE_NLS)
+CATALOGS=""
+if test "$USE_NLS" = "yes"; then
+    AC_DEFINE(ENABLE_NLS, 1)
+
+    AC_CHECK_LIB(intl, dgettext, x="yes", x="no")
+    if test "$x" = "yes"; then
+        LIBS="$LIBS -lintl";
+        AC_CHECK_LIB(iconv, iconv, LIBS="$LIBS -liconv")
+    fi
+    AC_CHECK_HEADER(libintl.h, x="yes", x="no")
+    if test "$x" = "no"; then
+        AC_MSG_RESULT([   * Make sure gettext is installed, or use])
+        AC_MSG_RESULT([   * --disable-nls to switch off gettext support.])
+        AC_MSG_ERROR(libintl.h not found.)
+    fi
+    AC_MSG_CHECKING(whether dgettext works)
+    AC_TRY_LINK([#include <libintl.h>], [dgettext("", "")], x="yes", x="no")
+    AC_MSG_RESULT("$x")
+    if test "$x" = "no"; then
+        AC_MSG_RESULT([   * Make sure gettext is installed, or use])
+        AC_MSG_RESULT([   * --disable-nls to switch off gettext support.])
+        AC_MSG_ERROR(dgettext() call could not be linked.)
+    fi
+    dnl ____________________
+
+    AC_MSG_CHECKING(for catalogs to be installed)
+    ALL_LINGUAS=`(cd "$srcdir/po" && echo *.po *.pox "") \
+        | sed -e "s/\**\.pox* / /g"`
+    if test "$LINGUAS"; then
+        NEW_LINGUAS=""
+        for provided in $ALL_LINGUAS; do
+            x=""
+            for wanted in $LINGUAS; do
+                case "$provided" in "$wanted"*) x=" $provided";; esac
+                case "$wanted" in "$provided"*) x=" $provided";; esac
+            done
+            NEW_LINGUAS="$NEW_LINGUAS$x"
+        done
+        LINGUAS="$NEW_LINGUAS"
+        AC_MSG_RESULT(LINGUAS:$LINGUAS)
+    else
+        LINGUAS="$ALL_LINGUAS"
+        AC_MSG_RESULT($LINGUAS)
+    fi
+    for x in $LINGUAS; do CATALOGS="$CATALOGS $x.gmo"; done
+else
+    AC_DEFINE(ENABLE_NLS, 0)
+fi
+AC_SUBST(CATALOGS)
+dnl ______________________________________________________________________
+
+dnl Checks for other --enable-xxx, --with-xxx switches
+AC_MSG_CHECKING(for value of --enable-debug)
+AC_ARG_ENABLE(debug,
+    [  --enable-debug          Compile in lots of additional debugging code [no]],
+    jigdo_debug=$enableval, jigdo_debug=no)
+AC_MSG_RESULT(\"$jigdo_debug\")
+DEBUG_PROGRAMS=""
+if test "$jigdo_debug" = yes; then
+    AC_DEFINE(DEBUG, 1)
+    DEBUG_PROGRAMS='$(debug-programs)'
+elif test "$jigdo_debug" != no; then
+    AC_MSG_ERROR(Invalid argument to --enable-debug option)
+else
+    AC_DEFINE(DEBUG, 0)
+fi
+AC_SUBST(DEBUG_PROGRAMS)
+dnl ________________________________________
+
+AC_MSG_CHECKING(for value of --enable-ccmalloc)
+AC_ARG_ENABLE(ccmalloc,
+    [  --enable-ccmalloc       Use the ccmalloc memory leak detector [no]],
+    jigdo_ccmalloc=$enableval, jigdo_ccmalloc=no)
+AC_MSG_RESULT(\"$jigdo_ccmalloc\")
+CCMALLOC=""
+if test "$jigdo_ccmalloc" = yes; then
+    AC_DEFINE(CCMALLOC, 1)
+    CCMALLOC='$(CCMALLOC)'
+elif test "$jigdo_ccmalloc" != no; then
+    AC_MSG_ERROR(Invalid argument to --enable-ccmalloc option)
+else
+    AC_DEFINE(CCMALLOC, 0)
+fi
+AC_SUBST(CCMALLOC)
+dnl ______________________________________________________________________
+
+dnl Touch TAGS to prevent it from being recreated when a normal user
+dnl builds the program. TAGS should only be updated once changes are
+dnl made to the source.
+touch "$srcdir/src/TAGS"
+
+dnl Now that both jigdo_gui and exe are set, build list of programs to
+dnl build.
+if test "$jigdo_gui" = "yes"; then
+    BUILD_TARGETS="jigdo-file$exe jigdo$exe #"
+    INSTALL_TARGETS="install-jigdo-file install-jigdo-lite install-jigdo #"
+else
+    BUILD_TARGETS="jigdo-file$exe # jigdo$exe"
+    INSTALL_TARGETS="install-jigdo-file install-jigdo-lite # install-jigdo"
+fi
+AC_SUBST(BUILD_TARGETS)
+AC_SUBST(INSTALL_TARGETS)
+
+SRC_MAKEDEPS="$srcdir/src/Makedeps"
+AC_SUBST_FILE(SRC_MAKEDEPS)
+
+AC_OUTPUT(Makefile doc/Makefile src/Makefile po/Makefile)
diff --git a/deb/.cvsignore b/deb/.cvsignore
new file mode 100644 (file)
index 0000000..c9fd273
--- /dev/null
@@ -0,0 +1,2 @@
+changelog
+cvs
diff --git a/deb/control b/deb/control
new file mode 100644 (file)
index 0000000..ce53205
--- /dev/null
@@ -0,0 +1,55 @@
+Source: jigdo
+Section: utils
+Priority: extra
+Maintainer: Richard Atterer <jigdo@atterer.net>
+Build-Depends: debhelper (>= 2.0.86), zlib1g-dev, libdb3-dev, libgtk1.2-dev, libwww-dev
+Standards-Version: 3.5.6
+
+Package: jigdo
+Architecture: any
+Depends: ${shlibs:Depends}
+Suggests: jigdo-file
+Description: Distribution of huge files - GTK+ download manager
+ Jigsaw Download, or short jigdo, is a scheme developed primarily to
+ make it easy to distribute huge filesystem images (e.g. CD (ISO9660)
+ or DVD (UDF) images) over the internet, but it could also be used for
+ other data which is awkward to handle due to its size, like
+ audio/video files or large software packages.
+ .
+ jigdo tries to ensure that the large file is downloaded in small
+ parts which can be stored on different servers. People who want to
+ download the image do so by telling the jigdo download tool to
+ process one ".jigdo" file; using it, jigdo downloads the parts and
+ reassembles the image. jigdo-file is used to prepare the files for
+ download.
+ .
+ This package contains "jigdo", the GTK+ download tool.
+ .
+ This package was built directly from the author's source package at
+ <http://atterer.net/jigdo/>. IT IS NOT AN OFFICIAL DEBIAN PACKAGE. 
+
+Package: jigdo-file
+Architecture: any
+Depends: jigdo (=${Source-Version}), wget, ${shlibs:Depends}
+Conflicts: jigdo (<< 0.6.0)
+Replaces: jigdo (<< 0.6.0)
+Description: Distribution of huge files - tool for preparing data for download
+ Jigsaw Download, or short jigdo, is a scheme developed primarily to
+ make it easy to distribute huge filesystem images (e.g. CD (ISO9660)
+ or DVD (UDF) images) over the internet, but it could also be used for
+ other data which is awkward to handle due to its size, like
+ audio/video files or large software packages.
+ .
+ jigdo tries to ensure that the large file is downloaded in small
+ parts which can be stored on different servers. People who want to
+ download the image do so by telling the jigdo download tool to
+ process one ".jigdo" file; using it, jigdo downloads the parts and
+ reassembles the image. jigdo-file is used to prepare the files for
+ download.
+ .
+ This package contains "jigdo-file", the tool used for creating
+ ".jigdo" files, and also "jigdo-lite", a script to download Debian CD
+ images.
+ .
+ This package was built directly from the author's source package at
+ <http://atterer.net/jigdo/>. IT IS NOT AN OFFICIAL DEBIAN PACKAGE. 
diff --git a/deb/copyright b/deb/copyright
new file mode 100644 (file)
index 0000000..f7c6b59
--- /dev/null
@@ -0,0 +1,20 @@
+Copyright (C) 2001-2002 Richard Atterer <richard@atterer.net>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License, version 2, as
+  published by the Free Software Foundation.
+
+  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.
+
+Please note: The copyright notice in the file COPYING only applies to
+the text of the GNU General Public License; the copyright of the
+individual source files is as specified at the top of each file and
+above. Also note that the code is licensed under GPL _version_2_ and
+no other version. Special licensing for my (RA's) code is available on
+request.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
diff --git a/deb/jigdo-file.docs b/deb/jigdo-file.docs
new file mode 100644 (file)
index 0000000..6d10dce
--- /dev/null
@@ -0,0 +1 @@
+changelog
diff --git a/deb/jigdo.docs b/deb/jigdo.docs
new file mode 100644 (file)
index 0000000..6d10dce
--- /dev/null
@@ -0,0 +1 @@
+changelog
diff --git a/deb/jigdo.undocumented b/deb/jigdo.undocumented
new file mode 100644 (file)
index 0000000..8754b20
--- /dev/null
@@ -0,0 +1 @@
+jigdo.1
diff --git a/deb/rules b/deb/rules
new file mode 100755 (executable)
index 0000000..c3185e0
--- /dev/null
+++ b/deb/rules
@@ -0,0 +1,80 @@
+#!/usr/bin/make -f
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# This is the debhelper compatability version to use.
+export DH_COMPAT=2
+
+# Non-standard default goal. This also does enough to allow you to
+# compile from CVS just by typing "deb/rules"
+build-deb: debian/changelog
+       if test ! -d debian -a ! -h debian; then ln -s deb debian; fi
+       if test ! -f configure; then autoconf; fi
+       dpkg-buildpackage -rfakeroot -us -uc -b
+       rm -f debian deb/changelog
+debian/changelog:
+       printf "jigdo (%s) unstable; urgency=low\n\n  * This version was built directly from upstream sources. It is not\n    an official Debian package.\n\n -- Richard Atterer <jigdo@atterer.net>  %s\n" "`cat VERSION`" "`date -R`" >deb/changelog
+src/Makedeps:
+       $(MAKE) depend
+
+# If the user did "./configure --some-option && make deb", then
+# recover the --some-option from config.status and use it when
+# reconfiguring with correct --prefix
+configure: configure-stamp
+configure-stamp:
+       dh_testdir
+       @o=`test config.status && sed -n "/^# [^ ]*configure/ { s/\(^# [^ ]*\|'\?--\(prefix\|mandir\|infodir\)=[^ ]*\)//gp; q;}" config.status`; \
+       echo "(user-supplied configure options: $$o)"; \
+       cmd="./configure $$o --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info"; \
+       echo "$$cmd"; $$cmd
+       touch configure-stamp
+
+build: configure-stamp src/Makedeps debian/changelog build-stamp 
+build-stamp:
+       dh_testdir
+       $(MAKE)
+       touch build-stamp
+
+clean:
+       dh_testdir
+       dh_testroot
+       rm -f build-stamp configure-stamp
+       -$(MAKE) distclean
+       dh_clean
+
+install: build
+       dh_testdir
+       dh_testroot
+       dh_clean -k
+       $(MAKE) DESTDIR=debian/jigdo install-jigdo install-po
+       $(MAKE) DESTDIR=debian/jigdo-file \
+           install-jigdo-file install-jigdo-lite
+       ln -sf "../common-licenses/GPL-2" \
+           "debian/jigdo/usr/share/jigdo/COPYING"
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+       dh_testdir
+       dh_testroot
+       dh_installdocs
+       dh_installexamples
+       dh_installmenu
+       dh_undocumented
+#      dh_installchangelogs 
+       dh_link
+       dh_strip
+       dh_compress
+       dh_fixperms
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/doc/.cvsignore b/doc/.cvsignore
new file mode 100644 (file)
index 0000000..ea9ba67
--- /dev/null
@@ -0,0 +1,8 @@
+Makefile
+.cvsignore
+jigdo-file.1
+jigdo-file.html
+cvs
+tmp
+jigdo-lite.1
+jigdo-lite.html
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644 (file)
index 0000000..c8e52a9
--- /dev/null
@@ -0,0 +1,47 @@
+# Project: Jigdo (Jigsaw download)
+#  __   _
+#  |_) /|  Copyright (C) 2001 Richard Atterer
+#  | \/¯|  <richard@atterer.net>
+#  ¯ '` ¯
+srcdir =       @srcdir@
+VPATH =                @srcdir@
+
+AWK =          @AWK@
+DOCBOOK2MAN =  docbook2man
+DOCBOOK2HTML = docbook2html
+#______________________________
+
+.SUFFIXES:
+.SUFFIXES: .1 .sgml .html
+
+.sgml.1:
+               mkdir -p "$(srcdir)/tmp" && cp "$<" "$(srcdir)/tmp" \
+                   && cd "$(srcdir)/tmp" && $(DOCBOOK2MAN) "$<"
+               sed -e 's/   */ /g' <"$(srcdir)/tmp/$@" >"$(srcdir)/$@"
+               rm -rf "$(srcdir)/tmp"
+#              sed -e 's%\\%\\\\%g;' <"$<" | tr -s '[:space:]' ' ' \
+#                  | $(DOCBOOKTOMAN) - >"$@"
+.sgml.html:
+               mkdir -p "$(srcdir)/tmp" && cp "$<" "$(srcdir)/tmp" \
+                   && cd "$(srcdir)/tmp" && $(DOCBOOK2HTML) "$<"
+               $(AWK) -f "$(srcdir)/../scripts/html-beautify.awk" \
+                   "$(srcdir)/tmp"/*.html >"$(srcdir)/$@"
+               rm -rf "$(srcdir)/tmp"
+#______________________________________________________________________
+
+.PHONY:                all clean distclean mostlyclean maintainer-clean \
+               dep depend doc check
+all:           jigdo-file.1 jigdo-file.html jigdo-lite.1 jigdo-lite.html
+doc mostlyclean dep depend check: ;
+
+clean:         Makefile
+               rm -rf tmp
+distclean:     Makefile
+               rm -rf tmp
+               rm -f *~ \#*\# *.bak
+               rm -f Makefile
+maintainer-clean: Makefile distclean
+               rm -f jigdo-file.html jigdo-file.1
+
+Makefile:      Makefile.in
+               cd .. && sh config.status # update Makefile from Makefile.in
diff --git a/doc/TechDetails.txt b/doc/TechDetails.txt
new file mode 100644 (file)
index 0000000..ae0e656
--- /dev/null
@@ -0,0 +1,218 @@
+
+File format for .jigdo files
+============================
+
+This is described in detail in the manual for jigdo-file. See the
+files `jigdo-file.*' in this directory.
+
+Additional notes:
+
+ - The reason for all those quoting rules in the .jigdo is that in the
+   future, it may be allowed to add options to some lines, e.g.:
+   MyServer=http://foo.com/ --referer=... --priority=... --decrypt
+   
+ - The difference between the Base64 encoding used by jigdo and the
+   real one (RFC2045) is that jigdo uses `-' instead of `+' and it
+   uses `_' instead of `/'. Additionally, no `=' characters are
+   appended to the end of the Base64 string.
+
+Support for automatic ungzipping of .jigdo files is currently not
+present.
+
+
+
+Algorithm for finding the files in the image
+============================================
+
+How do you efficiently search for lots of files within another large
+file?
+
+First, a rolling checksum of the first blockLen bytes of each input
+file is calculated. Next, a "window" of blockLen bytes moves over the
+large image. For each window position, the checksum is calculated and
+looked up in a hash table which contains the checksums of the input
+files.
+
+As soon as the first blockLen bytes of a file have been seen in the
+image this way, the program starts calculating the MD5 sum of blocks
+of length md5BlockLength (where blockLen < md5BlockLength; the
+defaults are 4k, 64k resp.). These MD5 checksums are compared to
+pre-calculated MD5 sums of md5BlockLength-sized chunks of the file
+that matched, until one doesn't match, or the last one matched.
+
+Unfortunately, having to deal with situations like overlapping matches
+in the image, and output of the .template to stdout, lead to quite
+complex code (see mktemplate.cc).
+
+The reason why this whole process is quite fast is that moving the
+RsyncSum window by one byte is a very cheap operation: Two table
+lookups, one multiplication and four additions/subtractions. The
+checksum calculation algorithm is based on that used by rsync
+<http://rsync.samba.org/>, but it has been extended by me from 32 bit
+to 64 bit, and also strengthened by the use of a lookup table.
+
+
+The jigdo-file file cache
+-------------------------
+
+Even without --cache specified, jigdo-file uses an internal cache for
+holding information about files. This information includes at least:
+file length, rsync sum of head of file, MD5 sums of chunks of file,
+MD5 sum of the entire file.
+
+When files are first entered into the cache, the entire file is *not*
+yet read, only enough of it to generate the rsync sum and the first
+chunk's MD5 sum. (If this is also the last MD5 sum because the file is
+small, everything is generated.) The rest of the file is only read "on
+demand" if/when necessary.
+
+
+
+File format of .template files
+==============================
+
+The image template files consist of three types of parts:
+
+ - Header: Short ASCII header identifying the file as a jigdo template
+ - Raw data: those parts of the image that were not matched,
+   compressed with zlib
+ - Description: A description of the image, saying which parts were
+   matched by files and are thus not included in the template
+
+After the header of a template file, one or more raw data parts and
+one description part follow. Each part consists of a 4-byte ID ("DATA"
+or "DESC"), followed by 6 bytes of length. The length values are
+little-endian (i.e. least-significant byte first) because that *is*
+the proper end to open an egg. The length includes the ID and length
+field itself, so for an empty part (containing just the ID and the
+length field) the length field would have the value 10.
+
+Header
+------
+
+The header is three lines of ASCII text, terminated with CR LF. They
+read:
+
+  JigsawDownload template <version> <creator> <CRLF>
+  <comment> <CRLF>
+  <CRLF>
+
+<version> is of the form "1.0" - two integers separated by a dot. The
+integers can consist of more than one digit, e.g. "1.42". The number
+is the file format version of the jigdo template file, which is
+completely unrelated to the program's version number, but is the same
+as the format version of the location list (.jigdo) file. The first
+integer indicates backwards-incompatible changes to the format whenever
+its value changes.
+
+<creator> is the name and version number of the program that was used
+to create the template file. It is just for information and should not
+normally be considered when creating an image from the template. Its
+format is "programName/1.23", i.e. name and version number separated
+by "/". The field must not contain any space characters and only one
+"/" character. jigdo-file uses values like "jigdo-file/1.0.0".
+
+<comment> is any string excluding control characters. It contains some
+information, e.g. an URL, for those people who open the file in a text
+editor and haven't a clue what it is. ;-)
+
+Description
+-----------
+
+This is binary data. Integer values are little-endian. File lengths
+are 6 bytes long - 256TB ought to be enough for everybody...
+
+The order of entries with type==2 or type==6 corresponds to how
+matched files and areas of unmatched data appear in the image file.
+There must only be one entry of type==5 in the list.
+
+The pseudo program below would be suitable for decoding the
+description data.
+
+#Bytes  Value   Description
+----------------------------------------------------------------------
+ 4      descID  "ID for the part: 'DESC' = the hex bytes 44 45 53 43"
+ 6      descLen "Length of part"
+                while (less than descLen-16 bytes read) {
+ 1      type      switch (type) {
+                    case 5: "Information about the image file"
+ 6      imgLen        "Length in bytes of the original image"
+16      imgMD5        "MD5 checksum of the original image"
+ 4      blockLen      "Nr of bytes used for calculating RsyncSums below"
+                    case 2: "Unmatched data, contained in 'Raw data'"
+ 6      skipLen       "Length in bytes of area of unmatched data"
+                    case 6: "Information about matched file"
+ 6      fileLen       "Length in bytes of file contained in image"
+ 8      fileRsync     "RsyncSum64 of first blockLen bytes of the file.
+                       fileLen < blockLen never happens."
+16      fileMD5       "MD5 checksum of the file"
+                  }
+                }
+ 6      descLen "Length of part - identical to descLen at start of part"
+----------------------------------------------------------------------
+The following types are obsolete:
+
+                    case 1: "Information about the image file"
+                      Obsoleted by type 5.
+ 6      imgLen        "Length in bytes of the original image"
+16      imgMD5        "MD5 checksum of the original image"
+                    case 3: "Information about matched file"
+                      Obsoleted by type 6.
+ 6      fileLen       "Length in bytes of file contained in image"
+16      fileMD5       "MD5 checksum of the file"
+----------------------------------------------------------------------
+
+The reason why the length is repeated at the end is for determining
+the start offset of the DESC part just by reading those 6 bytes from
+the end of the template file. Otherwise, one would have to read the
+headers of all DATA parts to get to the DESC part. jigdo-file relies
+on this.
+
+[...and the reason why the DESC part comes last and not first in the
+template data is that jigdo-file allows outputting the template to
+stdout, but all the data contained in the description part is only
+available at the end of template creation.]
+
+Note: In the DESC part appended to a *temporary image file*,
+jigdo-file uses another type of entry: Once the type of a type==6
+entry changes to type==7, that entry's data has successfully been
+written to the image.
+
+
+Raw data
+--------
+
+Binary data, a stream compressed with zlib (see RFC1950).
+
+For each type==2 entry in the description data, the uncompressed
+stream contains skipLen bytes of data. This is data that did not match
+any of the files presented to the creator of the template.
+
+For each type==6 entry in the description data, the raw data stream
+contains _nothing_at_all_ - in other words, the raw data is just a
+number of concatenated type==2 data chunks.
+
+No raw data sections may be present at all if the description data
+contains no type==2 entries.
+
+#Bytes     Value   Description
+----------------------------------------------------------------------
+ 4         dataID  "ID for the part: 'DATA' = the hex bytes 44 41 54 41"
+ 6         dataLen "Length of part, i.e. length of compressed data + 16"
+ 6         dataUnc "Number of bytes of *uncompressed* data of this part"
+dataLen-16         "Compressed data"
+----------------------------------------------------------------------
+
+jigdo-file always takes care to subdivide the complete raw data into
+parts which are not larger than about 256kB each compressed. This is
+done to support certain applications of jigdo where seeking in the
+image is necessary. (Additionally, this allows jigdo-file to write the
+final template file to a non-seekable output, e.g. to stdout.)
+
+Example for an application which needs to seek: A CGI program which
+creates an image on the fly as it is being sent to a browser will need
+to seek to certain offsets in the image if it is to support HTTP 1.1
+ranges.
+
+Note that the data of one type==2 entry in the description data may be
+distributed over more than one raw data part.
diff --git a/doc/jigdo-file.1 b/doc/jigdo-file.1
new file mode 100644 (file)
index 0000000..c1902bb
--- /dev/null
@@ -0,0 +1,876 @@
+.\" This manpage has been automatically generated by docbook2man 
+.\" from a DocBook document. This tool can be found at:
+.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/> 
+.\" Please send any bug reports, improvements, comments, patches, 
+.\" etc. to Steve Cheng <steve@ggi-project.org>.
+.TH "JIGDO-FILE" "1" "16 April 2002" "" ""
+.SH NAME
+jigdo-file \- Prepare files for Jigsaw Download (distribution of huge files, e.g. CD images).
+.SH SYNOPSIS
+
+\fBjigdo-file\fR \fB \fI COMMAND\fB
+\fR [ \fB--image=\fIcdrom.iso\fB\fR] [ \fB--jigdo=\fIcdrom.jigdo\fB\fR] [ \fB--template=\fIcdrom.template\fB\fR] [ \fB--force\fR] [ \fBMORE OPTIONS\fR] [ \fB [ \fIFILES\fB\fI ...\fB] [ --files-from=\fIf\fB] \fR] 
+
+ \fBCommon COMMANDs: make-template,
+make-image, verify\fR
+
+.SH "DESCRIPTION"
+.PP
+Jigsaw Download, or short jigdo, is a scheme developed
+primarily to make it easy to distribute huge filesystem images
+(e.g. CD (ISO9660) or DVD (UDF) images) over the internet, but it
+could also be used for other data which is awkward to handle due
+to its size, like audio/video files or large software
+packages.
+.PP
+jigdo tries to ensure that the large file (always called
+\fIimage\fR from now on) is downloaded in small
+parts which can be stored on different servers. People who want to
+download the image do so by telling the \fBjigdo\fR(1) \fB(NOT IMPLEMENTED YET)\fR
+download tool to process one `\fI.jigdo\fR' file;
+using it, \fBjigdo\fR downloads the parts and
+reassembles the image. \fBjigdo-file\fR is used to
+prepare the files for download.
+.PP
+What makes jigdo special is that the parts that are used to
+reconstruct the image can have any size and content - they only
+need to be contained in a contiguous region anywhere in the
+image.
+.PP
+For example, if you wish to distribute an ISO9660 image
+which contains a snapshot of an FTP server, you can instruct
+\fBjigdo-file\fR to prepare the download data in such
+a way that when people use \fBjigdo\fR to download
+the image, \fBjigdo\fR actually fetches the
+individual files from the FTP server and assembles them into an
+exact copy of your image - during the download! (If the image is
+not a filesystem dump, you can use
+\fBsplit\fR(1) to create the small parts that the image will be
+reassembled from.)
+.PP
+You are completely free to choose where the individual parts
+of the image are stored: They may be in entirely different
+directories on different servers (e.g. because of
+storage/bandwidth constraints), but this is invisible to the
+people downloading your image. The information about available
+servers only needs to be added to the
+`\fI.jigdo\fR' file by you before distributing
+it.
+.PP
+See later sections for a more detailed description of how
+jigdo works, and also to get a better idea of what applications it
+supports (such as customized versions of images released by
+others).
+.SH "OPTIONS"
+.PP
+Many options are specific to a particular
+\fICOMMAND\fR; the ones below are general or
+used by several commands. Further options are listed below with
+the individual commands. All options are silently ignored if they
+are not applicable to the current command. For any
+\fIBYTES\fR parameters to options, you can
+append one of the letters `k', `M' or `G' to the amount you
+specify, to indicate kilobytes, megabytes or gigabytes.
+.TP
+\fB-h --help\fR
+Output short summary of commands and options.
+.TP
+\fB-H --help-all\fR
+Output complete summary of commands and options.
+.TP
+\fB-v --version\fR
+Output program version.
+.TP
+\fB-i --image=\fIcdrom.iso\fB\fR
+Specify location of the file containing the image. The
+image is the large file that you want to distribute.
+.TP
+\fB-j --jigdo=\fIcdrom.jigdo\fB\fR
+Specify location of the Jigsaw Download description
+file. The jigdo file is a human-readable file generated by
+\fBjigdo-file\fR, to which you add information
+about all the servers you are going to upload the files to.
+\fBjigdo\fR will download this file as the
+first step of retrieving the image.
+.TP
+\fB-t --template=\fIcdrom.template\fB\fR
+Specify location of the image `template' file. The
+template file is a binary file generated by
+\fBjigdo-file\fR, it contains information on
+how to reassemble the image and also (in compressed form)
+all the data from the image which was not found in any of
+the parts.
+
+Depending on the command, each of these three files is
+used sometimes for input, sometimes for output. If the file
+is to be used for output for a particular command and the
+output file already exists, \fBjigdo-file\fR
+exits with an error, unless \fB--force\fR is
+present.
+
+In most cases, you will only need to specify one out
+of \fB-i\fR \fB-j\fR
+\fB-t\fR, because any missing filenames will be
+deduced from the one you specify. This is done by first
+stripping any extension from the supplied name and then
+appending nothing (if deducing \fB--image\fR),
+`\fI.jigdo\fR' or
+`\fI.template\fR'.
+.TP
+\fB-r --report=default|noprogress|quiet|grep\fR
+Control how verbose the program is, and what format
+the output has: \fBnoprogress\fR is the same as
+\fBdefault\fR except that no `x%
+done' progress messages are printed.
+\fBquiet\fR restricts the output to what is
+absolutely necessary, mostly error messages.
+\fBgrep\fR is only different from
+\fBdefault\fR for the
+\fBmake-template\fR command: It enables output
+in a simple `\fI<offset>
+<file>\fR' format which is useful when
+searching for binary files in other binary files.
+.TP
+\fB-f --force\fR
+Overwrite existent output files without
+complaining.
+.TP
+\fB--no-force\fR
+\fBThis is the default.\fR Refuse to
+overwrite existent output files.
+.TP
+\fB-c --cache=\fIjigdo-cache.db\fB\fR
+\fBjigdo-file\fR usually needs to read
+the entire contents of all the
+\fIFILES\fR you specify. If you use it
+repeatedly (e.g. because you make a new CD image available
+daily), caching the file information will increase the
+program's speed significantly. The cache file is
+automatically created if it is not yet present. Data is
+usually both read from and written to it.
+.TP
+\fB--no-cache\fR
+\fBThis is the default.\fR Do not use a
+cache.
+.TP
+\fB--cache-expiry=\fISECONDS\fB\fR
+Set maximum age of cache entries. Any entries older
+than this will be removed from the cache. The default is 30
+days. You can append one of the letters `h', `d', `w', `m',
+`y' to denote hours, days, weeks, months or years,
+respectively. A value of `0' or `off' disables expiry, so
+that all entries will stay in the cache forever. See the
+section `CACHE FILES' below for more information.
+.TP
+\fB--readbuffer=\fIBYTES\fB\fR
+Set size of internal buffers. The default is 128k - if
+you have a fast disc, increasing this value may make
+\fBjigdo-file\fR faster, but in general,
+changing it is not necessary.
+.TP
+\fB--md5-block-size=\fIBYTES\fB\fR
+\fBUninteresting internal parameter.\fR
+Set size of blocks into which files are subdivided. The
+default is 128k. If you change it, any cache file will have
+to be regenerated. Internally, \fBjigdo-file\fR
+may choose to use a slightly larger or smaller value.
+.TP
+\fB-T --files-from=\fIfile\fB\fR
+Read file and directory names from the specified file.
+If \fIfile\fR is `-', read names from
+standard input. Each line in the file is taken as a name, so
+the names may contain spaces, but not newline characters. An
+empty line causes \fBjigdo-file\fR to stop
+reading from the file.
+
+\fBfind\fR(1) is a powerful tool for generating file
+lists, but make sure to use `\fBfind -type
+f\fR' if possible - otherwise, if you instruct
+\fBfind\fR to output both a filename and a
+symlink to that filename, \fBjigdo-file\fR will
+read the file contents twice.
+.TP
+\fB\fIFILES\fB\fR
+Names of files or directories to use as input. These
+are the parts that are contained in the image. In case one
+of the names is a directory, the program recursively scans
+the directory and adds all files contained in it. While
+doing this, it follows symbolic links, but avoids symlink
+loops.
+
+If one of the filenames starts with the character `-',
+you must precede the list of files with `--'. A value of `-'
+has \fBno\fR special meaning in this list, it
+stands for a file whose name is a single hyphen.
+.SH "COMMANDS"
+.PP
+The command name is the first non-option argument passed to
+\fBjigdo-file\fR. Most commands have short
+abbreviations as well as long names. \fBThe short command
+names should not be used in scripts - there may be incompatible
+changes to them in the future!\fR
+.SS "MAKE-TEMPLATE, MT"
+.PP
+Reads \fIimage\fR and
+\fIFILES\fR, creates
+`\fI.jigdo\fR' and
+`\fI.template\fR'. This is the main functionality
+of \fBjigdo-file\fR.
+.PP
+It is possible to specify both \fB--image=-\fR
+and \fB--files-from=-\fR. In this case, first the
+list of files is read from standard input until an empty line is
+encountered. Everything following it is assumed to be the image
+data. This can be useful if you use \fBmkisofs\fR(1) or similar programs that can output the complete
+image on their standard output, because there is no need to
+store the image on disc temporarily.
+.PP
+If a \fIFILES\fR argument contains
+the characters `//' (Unix) or
+`\\.\\' (Windows), this has special meaning. In
+the final jigdo file that users will download, each of the parts
+is referenced in the `[Parts]' section with a URI of the form
+`Label:some/filename'. The `[Servers]' section gives a mapping
+of labels to servers on the internet, with lines like
+`Label=http://myserver.org/jigdofiles/'. Using this information,
+\fBjigdo\fR will create the final download URI for
+the part, `http://myserver.org/jigdofiles/some/filename'.
+Specifying `//' (or `\\.\\')
+in a file or directory name serves to `cut off' the names at the
+right directory level. For example, if the Unix path of one of
+your \fIFILES\fR is `/path/some/filename',
+you can tell \fBjigdo-file\fR to cut off after the
+`/path' by passing it the argument `/path//some/filename', or
+`/path//' if you want the whole directory scanned. The path
+names need not be absolute; `somedirectory//' is also
+possible.
+.TP
+\fB--label \fILabel=/path\fB\fR
+Specify a name to use as the label name for a path
+on disc. (Influences the output jigdo file.) If you used
+`//' in the
+\fIFILES\fR arguments as described
+above, \fBjigdo-file\fR will by default pick
+label names automatically (`A', `B' etc.). With this
+option, you can give labels more meaningful names. Note
+that the label name will only be used if one or more
+\fIFILES\fR begin with
+`/path//'.
+
+Try to use label names that start with uppercase
+characters, to disambiguate them clearly from protocol
+names like `http', `ftp'.
+.TP
+\fB--uri \fILabel=http://some.server.org/\fB\fR
+By default, using \fB--label\fR as
+described above will cause lines of the form
+`Label=file:/path/' to be written to the `[Servers]'
+section of the output jigdo file. If you want to override
+the `file:' URI so that the line reads
+`Label=http://some.server.org/', you can do so by
+specifying \fB--uri\fR along with
+\fB--label\fR.
+
+Note that \fB--uri\fR only has an effect
+if the corresponding \fB--label\fR with the
+same label name is present, and gets used by the
+program.
+
+The supplied value is not quoted by the program; if
+it contains characters such as space or any of the
+characters #"'\\ then you must quote it.
+(Under Unix, you may need to quote the value twice to also
+protect it from the shell, e.g. \\\\\\\\ or
+\&'\\\\' to get a single backslash in the
+URI.)
+
+Users of the Windows version may notice that the
+`\\' directory separators are converted
+into `/' in the `file:' URIs that are
+generated by default. This is done to increase
+cross-platform compatibility of `file:' - the
+\fBprint-missing\fR command of the Windows
+version will automatically re-convert the characters when
+it prints the URIs. In case you supply your own `file:'
+URIs under Windows using \fB--uri\fR, you must
+also exchange `/' and
+`\\'.
+.TP
+\fB-0 to -9\fR
+Set amount of compression in the output template
+file, from \fB-0\fR (no compression) to
+\fB-9\fR (maximum compression). The default is
+\fB-9\fR, which can make the template
+generation quite slow. The compression algorithm used is
+the same as for \fBgzip\fR(1).
+.TP
+\fB--min-length=\fIBYTES\fB\fR
+Set minimum length of a part for
+\fBjigdo-file\fR to look for it in the image.
+The default is 4k. Parts smaller than this will never be
+found in the image, so their data will be included in the
+template file. The search algorithm used requires such a
+minimum length, otherwise template generation could become
+extremely slow. If you know for sure that all your
+\fIFILES\fR are larger than a certain
+amount, you can increase \fBjigdo-file\fR's
+speed slightly by specifying the amount with this option.
+There is a hard-wired absolute minimum of 1k - anything
+lower will silently be set to 1k.
+.TP
+\fB--image-section\fR
+\fBThis is the default.\fR Causes
+\fBjigdo-file\fR to include an `[Image]'
+section in the `\fI.jigdo\fR' file.
+.TP
+\fB--no-image-section\fR
+Do \fBnot\fR include an `[Image]'
+section in the `\fI.jigdo\fR' file. You
+need to add one yourself if you use this option.
+.TP
+\fB--servers-section\fR
+\fBThis is the default.\fR Causes
+\fBjigdo-file\fR to append a `[Servers]'
+section at the end of the `\fI.jigdo\fR'
+file. This default section uses `file:' URIs, which allows
+for immediate reassembly of the image from the local
+filesystem, and is also useful if you want to edit the
+file manually and replace the `file:' URIs with other
+URIs.
+.TP
+\fB--no-servers-section\fR
+Do \fBnot\fR add a `[Servers]'
+section at the end of the `\fI.jigdo\fR'
+file. Useful e.g. if you are going to append the section
+with a script.
+.SS "MAKE-IMAGE, MI"
+.PP
+Reads `\fI.template\fR' and
+\fIFILES\fR, creates
+\fIimage\fR (or
+`\fIimagename.tmp\fR'). Provides a rudimentary
+way of reassembling images - \fBjigdo\fR is usually
+better suited for this task. However, in contrast to
+\fBjigdo\fR, no `\fI.jigdo\fR' file
+is required.
+.PP
+If the image is to be written to a file (and not to
+standard output), it is possible to create the image in several
+steps, with several invocations of `\fBjigdo-file
+make-image\fR', as follows: You first invoke
+\fBjigdo-file\fR, specifying as many files as are
+available at this time. The program scans the files, and those
+that are contained in the image are copied to a temporary file,
+whose name is formed by appending `\fI.tmp\fR' to
+the image filename.
+.PP
+For all further files which could be parts of the image,
+you repeat this process. As soon as all parts are present, the
+temporary file will be truncated slightly (to delete some
+administrative data that \fBjigdo-file\fR appends
+at the end) and renamed to the final image name. The possibility
+of reassembling the image in several steps is especially useful
+for gathering files from removable media, e.g. several older
+CDs.
+.PP
+Scripts using \fBmake-image\fR can detect
+whether image creation is complete by checking the exit status:
+0 signals successful creation, whereas 1 means that more files
+need to be supplied. Other errors result in an exit status of 2
+(`recoverable', e.g. file not found) or 3 (non-recoverable, e.g.
+write error).
+.TP
+\fB--check-files\fR
+\fBThis is the default.\fR Whenever
+any part is copied to the image, re-check its checksum
+against the checksum stored in the template. It is
+recommended that you leave this switched on, even if it
+slows down image creation a bit.
+.TP
+\fB--no-check-files\fR
+Do not check files' checksums when copying them to
+the image. This can be safely used when no cache file is
+used (which means that files will be written to the image
+immediately after being scanned) or the whole image is
+checked later with the \fBverify\fR
+command.
+.SS "PRINT-MISSING, PM"
+.PP
+Reads `\fI.jigdo\fR',
+`\fI.template\fR' and (if present)
+`\fIimagename.tmp\fR', outputs a list of URIs
+still needed to completely reassemble the image.
+.PP
+Together with the \fBmake-image\fR command,
+this provides most of the functionality of
+\fBjigdo\fR on the command line.
+.PP
+For each part that is not yet present in the temporary
+image file, the file checksum is looked up in the `[Parts]'
+section of the jigdo file. Any label in the corresponding entry
+is then expanded according to the label definitions in the
+`[Servers]' section and printed on standard output.
+\fBjigdo\fR allows you to specify several
+alternative locations for each label in this section, but
+\fBprint-missing\fR will only output the first one
+for each missing part.
+.PP
+If the checksum cannot be found in the `[Parts]' section
+(this Should Not Happen unless you deleted that section), a
+lookup is instead made for
+`MD5Sum:\fI<checksum>\fR', just like
+with \fBjigdo\fR. (Thus, if you want to get rid of
+the `[Parts]' section, you can do so if you rename each part to
+its own checksum.)
+.TP
+\fB--uri \fILabel=http://some.server.org/\fB\fR
+Override the entries in the
+`\fI.jigdo\fR' file for any label with a
+URI of your choice. With the example above, a `[Parts]'
+entry of `Label:some/filename' will cause the line
+`http://some.server.org/some/filename' to be
+printed.
+
+The supplied value is not quoted by the program; if
+it contains characters such as space or any of the
+characters #"'\\ then you must quote it.
+(Under Unix, you may need to quote the value twice to also
+protect it from the shell, e.g. \\\\\\\\ or
+\&'\\\\' to get a single backslash in the
+URI.)
+.SS "PRINT-MISSING-ALL, PMA"
+.PP
+Just like \fBprint-missing\fR, this command
+outputs a list of URIs still needed to completely reassemble the
+image. However, \fBall\fR alternative download
+locations are printed instead of just one. In the output, the
+URIs for a file are separated from other files' URIs with blank
+lines. The \fB--uri\fR option has the same effect as
+for \fBprint-missing\fR.
+.SS "VERIFY, VER"
+.PP
+Reads \fIimage\fR (presumably
+generated with \fBmake-image\fR) and
+`\fI.template\fR', checks for correct checksum of
+image.
+.PP
+The template data does not only contain checksums of the
+individual parts, but also of the image as a whole.
+\fBmake-image\fR already performs a number of
+internal checks, but if you like, you can additionally check the
+image with this command.
+.SS "SCAN, SC"
+.PP
+Reads all the \fIFILES\fR and enters
+them into the cache, unless they are already cached. The
+\fB--cache\fR option must be present for this
+command.
+.SS "MD5SUM, MD5"
+.PP
+Reads all the \fIFILES\fR and prints
+out MD5 checksums of their contents. This command is quite
+similar to \fBmd5sum\fR(1), except that the checksum is output in the
+Base64-like encoding which is also used elsewhere by
+\fBjigdo-file\fR.
+.PP
+The \fIFILES\fR arguments are
+processed in the same way as with the other commands, which
+means that recursion automatically takes place for any arguments
+that are directories, and that symbolic links are not listed
+except when the file(s) they point to are not reachable
+directly.
+.PP
+In the checksum list printed on standard output, only the
+part of the filename following any `//' (or
+`\\.\\' on Windows) is printed. Any
+\fB--cache\fR will be used for querying files' MD5
+checksums and/or writing the checksums of scanned files.
+.SS "LIST-TEMPLATE, LS"
+.PP
+Reads a `\fI.template\fR' file and outputs
+low-level information about the image and all parts contained in
+it, including offset, length and checksum.
+.PP
+You can also use this command with temporary image files
+(by specifying something like
+\fB--template=imagename.tmp\fR) - in that case, the
+output also distinguishes between parts that have been written
+to the image and parts that haven't.
+.PP
+The following different types of lines can be output.
+`have-file' only occurs for `\fI.tmp\fR' files,
+indicating a file that has already been successfully written to
+the temporary file:
+
+.nf
+in-template \fIoffset-in-image length\fR
+need-file \fIoffset-in-image length file-md5sum filestart-rsyncsum\fR
+have-file \fIoffset-in-image length file-md5sum filestart-rsyncsum\fR
+image-info \fIimage-length image-md5sum rsyncsum-size\fR
+.fi
+.SH "DETAILS"
+.PP
+Jigsaw Download was created with the format of ISO9660 CD
+images in mind - however, the following also applies to many other
+filesystem formats, as well as to `tar' archives and uncompressed
+`zip' archives. A CD image contains both information for
+organizing the filesystem (header with disc name etc., ISO9660
+directory data, data of extensions such as Joliet or RockRidge,
+zero padding) and the files contained on the CD. An important
+property that jigdo relies on is that each file is stored in one
+contiguous section of the image; it is not split into two or more
+parts.
+.PP
+When \fBjigdo-file\fR is given a number of
+files that might be contained in an image, it detects whether any
+of the files are present using a `rolling checksum' inspired by
+the one used by \fBrsync\fR(1). The resulting data is
+written to the `\fI.template\fR' file: If a section
+of the image could not be matched (e.g. it was directory
+information), the data is compressed and written directly to the
+template. However, if a matching file was found, its data is
+omitted from the template. Instead, only a reference (an MD5
+checksum of the file) is inserted in the template.
+.PP
+Note that the template data only contains binary data, it
+does not contain any filenames or URIs, since it cannot be easily
+edited in case any of these values need to be changed. All that
+information is stored in the `\fI.jigdo\fR' file, a
+text file to which you can add URLs for your server(s). The jigdo
+file provides a mapping for each MD5 checksum to one or more
+alternative download locations for the corresponding part. See the
+section `FORMAT OF .JIGDO FILES' below for details.
+.PP
+Apart from the mapping of MD5 sums to URIs, the jigdo file
+also contains an URI pointing to a download location for the
+template file. This way, the \fBjigdo\fR download
+tool only needs to be given one URI (that of the
+`\fI.jigdo\fR' file) to be able to download and
+reassemble the complete image.
+.SH "FORMAT OF .JIGDO FILES"
+.PP
+\fBWORK IN PROGRESS... at the moment, minor
+modifications to the format are still possible.\fR
+.PP
+The overall format of `\fI.jigdo\fR' files
+follows that of `\fI.ini\fR' files, as also used by
+the Gnome and KDE projects for some data. The file is organized
+into sections, each of which is preceded by a line reading
+`[Sectionname]'. Within each section, lines have the form
+`Label=Value'. Such lines are also called `entries' below.
+.PP
+Comments are introduced with the `#'
+character and extend to the end of the line. Whitespace is ignored
+at line start and end as well as to the left and right of section
+names and the `=' in entries. Furthermore, the
+jigdo utilities split up the text of the entry value (i.e. the
+part after the `=') into whitespace-separated
+words, much like the Unix shell. Single '' and
+double "" quotes can be used to prevent that
+e.g. URIs containing whitespace are split apart. Similarly,
+characters with special meaning (the characters
+\&'"#\\ and space/tab) must be quoted with
+\\ to appear in the value. As with the shell,
+there is a difference between '' and
+"": Within '', the
+characters "#\\ and whitespace lose their
+special meaning, whereas within "", only the
+characters '# and whitespace lose their special
+meaning - in other words, backslash escapes still work inside
+"", but not ''.
+.PP
+Below is a description of the individual section names used
+by jigdo.
+.SS "JIGDO SECTION"
+
+.nf
+[Jigdo]
+Version=1.0
+Generator=jigdo-file/0.5.3
+Info=\fIlong description\fR
+.fi
+.PP
+Information about the version of the jigdo file format
+used, and the program that generated it. The `Info' label can
+contain a description of the contents of the jigdo file.
+.PP
+There is one such section per
+`\fI.jigdo\fR' file.
+.SS "IMAGE SECTION"
+
+.nf
+[Image]
+Filename=\fI"filename for saving on user's disc"\fR
+Template=\fI"URI where to fetch template file"\fR
+Selected=yes|no
+ShortInfo=\fIsingle-line description, for displaying menu of images\fR
+Info=\fIlong description\fR
+.fi
+.PP
+The `Selected' label indicates whether the image is
+selected for download by default when \fBjigdo\fR
+is run for this file.
+.PP
+Instead of an URI, the value for the `Template' entry can
+also be a string of the form `\fILabel\fR:\fIpathname\fR', as described
+below.
+.PP
+This section may occur multiple times, there is one such
+section for each image in the jigdo file.
+.SS "PARTS SECTION"
+
+.nf
+[Parts]
+xJNkjrq8NYMraeGavUpllw=LabelA:part0
+GoTResP2EC6Lb_2wTsqOoQ=LabelA:part1
+kyfebwu6clbYqqWUdFIyaw=LabelB:some/path/part2
+-J9UAimo0Bqg9c0oOXI1mQ=http://some.where.com/part3
+.fi
+.PP
+All lines in the section, which provides the mapping from
+MD5 checksums to URIs, have the same format: On the left side of
+the `=' the checksum (encoded with a
+Base64-like encoding) is given, and on the right a string
+corresponding to the part with this checksum; either a complete
+URI or a string of the form `\fILabel\fR:\fIpathname\fR', which is expanded into
+one or more URIs by looking up the definition(s) for the
+\fILabel\fR in the `[Servers]'
+section.
+.PP
+In case a particular MD5 checksum cannot be found in any
+`[Parts]' section by \fBjigdo\fR, the program will
+perform a lookup for `MD5Sum:\fI<checksum>\fR', e.g. for
+`MD5Sum:xJNkjrq8NYMraeGavUpllw' if you
+deleted the line for `part0' above.
+.PP
+A checksum appearing multiple times in this section
+indicates alternative download locations for the part.
+.PP
+There may be any number of `[Parts]' sections in the file;
+they are all considered when looking up MD5 checksums.
+.SS "SERVERS SECTION"
+
+.nf
+[Servers]
+LabelA=http://myserver.org/
+LabelA=ftp://mirror.myserver.org/
+LabelB=LabelC:subdirectory/
+LabelC=http://some.where.com/jigdo/
+.fi
+.PP
+All lines in the section, which provides the mapping from
+server labels to server locations, have the same format: On the
+left side of the `=' the label name is given,
+and on the right the value to expand the label name to.
+.PP
+A label name appearing multiple times in this section
+indicates alternative download locations for the parts that use
+the label in the `[Parts]' section. This notation makes it very
+easy to add mirrors to the jigdo file.
+.PP
+As shown by the example above, the label values may
+themselves reference other labels. For example, the entry
+`LabelB:some/path/part2' in the `[Parts]' section will expand to
+`http://some.where.com/jigdo/subdirectory/some/path/part2'.
+Loops in the label definitions result in undefined behaviour and
+must be avoided.
+.PP
+There may be any number of `[Servers]' sections in the
+file; they are all considered when looking up labels. Either of
+`[Parts]' or `[Servers]', but not both, can be omitted from the
+jigdo file.
+.SH "CACHE FILES"
+.PP
+Any file specified with the \fB--cache\fR option
+is used to store information about the
+\fIFILES\fR presented to
+\fBjigdo-file\fR. When querying the cache, a file is
+considered unchanged (and the cached data is used) only if
+filename, file size and last modification time (mtime) match
+exactly. For the filename match, not the entire file name is used,
+but only the part following any `//', so that
+any changes to the part before the `//' will
+not invalidate the cache.
+.PP
+Old cache entries are removed from the cache if they have
+not been read from or written to for the amount of time specified
+with \fB--cache-expiry\fR. Entries are
+\fBnot\fR immediately removed from the cache if the
+file they refer to no longer exists - this makes it possible to
+cache information about files on removable media.
+.PP
+Cache expiry only takes place \fBafter\fR
+\fBjigdo-file\fR has done its main work - if any old
+entries are accessed before expiry takes place, they will be kept.
+For example, if the program is run using the default expiry time
+of 30 days, but accesses a cache file with entries generated 2
+months ago, then entries in that cache \fBwill\fR
+be considered, and only those cache entries that were not needed
+during the program run will be expired.
+.PP
+Due to a peculiarity of the underlying database library
+(libdb3), cache files never shrink, they only grow. If a large
+number of entries was expired from your cache file and you want it
+to shrink, you can either just delete it (of course then
+everything will have to be regenerated) or use the utilities
+accompanying libdb3 to dump and restore the database, with a
+command like `\fBdb3_dump
+\fIold-cache.db\fB | db3_load
+\fInew-cache.db\fB\fR'. For Debian, these programs are supplied in the
+package `libdb3-util'.
+.PP
+If a different \fB--md5-block-size\fR is
+specified, the entire file needs to be re-read to update its cache
+entry. If a different \fB--min-length\fR is specified,
+only the first `md5-block-size' bytes of the file need to be
+re-read.
+.SH "EXAMPLES"
+.SS "PREPARING YOUR CD IMAGE FOR DISTRIBUTION"
+.PP
+You have created a CD image
+`\fIimage.iso\fR' from some of the files stored
+in the directory `\fI/home/ftp\fR' on your
+harddisc, which is also available online as `ftp://mysite.org'.
+As you don't want to waste space by effectively hosting the same
+data twice (once as files on the FTP server, once inside the
+image), and you are fed up with users' downloads aborting after
+200MB and their restarting the download dozens of times, you
+decide to use jigdo. How do you prepare the image for
+download?
+.PP
+In fact, only one command is necessary:
+.sp
+.RS
+.PP
+\fBjigdo-file make-template
+--image=image.iso --jigdo=/home/ftp/image.jigdo
+--template=/home/ftp/image.template /home/ftp// --label
+Mysite=/home/ftp --uri
+Mysite=ftp://mysite.org/\fR
+.RE
+.PP
+After editing the file
+`\fI/home/ftp/image.jigdo\fR' to contain the
+correct URI for the template, `ftp://mysite.org/image.template',
+people can point \fBjigdo\fR at
+`ftp://mysite.org/image.jigdo' to download your image.
+.PP
+Note that nothing prevents you from doing the same for an
+FTP server that isn't administrated by you - in that case, you
+only need to host the `\fI.jigdo\fR' and
+`\fI.template\fR' files on your own
+server/homepage.
+.SS "PREPARING AN ARBITRARY LARGE FILE FOR DISTRIBUTION"
+.PP
+We assume that you have a large file that is not a
+filesystem, e.g. `\fImovie.mpeg\fR'. Because of
+space problems, you want to distribute the data on two
+servers.
+.PP
+In this case, the parts of the image need to be generated
+artificially with the \fBsplit\fR command. For
+example, to create chunks of 4MB each, use `\fBsplit -b 4m
+movie.mpeg part\fR'. Copy the resulting files
+`\fIpartXX\fR' into
+two directories `\fI1\fR' and
+`\fI2\fR' that you create, according to how you
+want the files distributed between the servers. Next, create the
+jigdo and template files with `\fBjigdo-file make-template
+--image=movie.mpeg 1// 2//\fR'. You will need to edit the
+`\fI.jigdo\fR' file and provide the right URIs
+for the two servers that you are going to upload the
+`\fIpartXX\fR' files
+as well as the `\fI.template\fR' file to.
+.SS "CUSTOMIZED VERSIONS OF IMAGES"
+.PP
+Because it is possible to assign a different URI for each
+part of an image if necessary, jigdo is very flexible. Only one
+example is the possibility of customized versions of images:
+Suppose that someone is distributing a CD image, and that you
+want to make a few small changes to it and redistribute your own
+version. You download the `\fIofficial.iso\fR' CD
+image with \fBjigdo\fR, write it to CD-R, make your
+changes (say, adding files from the
+`\fImyfiles\fR' directory on your harddisc) and
+produce your own version, `\fImyversion.iso\fR'.
+Next, you instruct \fBjigdo-file\fR to create the
+jigdo and template files for your modified image, using the
+command
+.sp
+.RS
+.PP
+\fBjigdo-file make-template
+--image=myversion.iso /mnt/cdrom/ myfiles// --label
+My=myfiles/ --uri
+My=http://my.homepage.net/\fR
+.RE
+while `\fIofficial.iso\fR' is mounted under
+`\fI/mnt/cdrom\fR'. Now you need to create a
+`\fI.jigdo\fR' file that references the same
+files as the original image, but provides additional links for
+any files \fBjigdo-file\fR picked up from the
+`\fImyfiles\fR' directory. This is most easily
+done by copying over the relevant sections from the jigdo file
+for `\fIofficial.iso\fR' to your own version's
+jigdo file.
+.PP
+Finally, after also adding a correct link for the template
+file, you can upload the `\fI.jigdo\fR' file, the
+`\fI.template\fR' file and also the files in
+`\fImyfiles\fR' to `http://my.homepage.net/'.
+Thus, for people to download your modified image, you do
+\fBnot\fR need to upload the complete image
+contents to your web space, but only the changes you
+made!
+.PP
+(In case you only made very few changes, you could also
+omit the `myfiles' parameter in the command above, then all your
+changes end up in the new template file.)
+.SS "COMBINING MANY JIGDO-MANAGED IMAGES INTO ONE"
+.PP
+It is also no problem to combine data from several sources
+that use jigdo. For example, if of five different and unrelated
+servers each one distributes a different CD image via jigdo, you
+can create a customized DVD image that contains the data from
+all these CDs. When people use \fBjigdo\fR to
+download your image, the individual files on the DVD are fetched
+from the same sources as the original CDs.
+.PP
+Consequently, even though you will be distributing a 3.2GB
+file via your web space, the actual amount of data that is
+stored on your server will only be in the order of several
+MBs.
+.SH "BUGS"
+.PP
+For certain contents of one of the input files, most notably
+a sequence of zero bytes longer than \fB--min-length\fR
+at the start of the file, \fBjigdo-file
+make-template\fR may fail to find the file in the image.
+Unfortunately, this restriction cannot be avoided because the
+program could become very slow otherwise.
+\fBjigdo-file\fR may also fail to find the file that
+\fBfollows\fR an all-zeroes file in the image. To
+avoid this, exclude the all-zeroes file from
+\fIFILES\fR - this means that its data will
+end up in the template data, but an all-zeroes file can be
+compressed very well.
+.PP
+In fact, not only all-zeroes files trigger this behaviour,
+but also any files which contain at their start a long sequence of
+short identical strings. For example, both a file containing only
+`a' characters and one containing
+`abcabcabcabc...' are problematic.
+.SH "SEE ALSO"
+.PP
+\fBjigdo\fR(1) (NOT YET IMPLEMENTED),
+\fBsplit\fR(1) (or `\fBinfo split\fR'),
+\fBfind\fR(1) (or `\fBinfo find\fR'),
+\fBmkisofs\fR(1),
+\fBmd5sum\fR(1)
+.SH "AUTHOR"
+.PP
+Jigsaw
+Download <URL:http://atterer.net/jigdo/> was written by Richard Atterer
+<jigdo@atterer.net>, to make downloading of CD ROM
+images for the Debian GNU/Linux distribution more
+convenient.
diff --git a/doc/jigdo-file.html b/doc/jigdo-file.html
new file mode 100644 (file)
index 0000000..9df765f
--- /dev/null
@@ -0,0 +1,861 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+ <HEAD>
+  <TITLE>jigdo-file</TITLE><META NAME="GENERATOR" CONTENT="Modular DocBook
+  HTML Stylesheet Version 1.76b+ "></HEAD>
+ <BODY CLASS="REFENTRY" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF"
+  VLINK="#840084" ALINK="#0000FF">
+  <H1><A NAME="AEN1">jigdo-file</H1>
+  <DIV CLASS="REFNAMEDIV"><A NAME="AEN14"></A>
+   <H2>Name</H2>jigdo-file&nbsp;--&nbsp;Prepare files for Jigsaw Download
+   (distribution of huge files, e.g. CD images).</DIV>
+  <DIV CLASS="REFSYNOPSISDIV"><A NAME="AEN17">
+   <H2>Synopsis</H2>
+   <P><B CLASS="COMMAND">jigdo-file</B> { <TT CLASS="REPLACEABLE"><I>
+    COMMAND</I></TT> } [<TT CLASS="OPTION">--image=<TT CLASS="REPLACEABLE"
+    ><I>cdrom.iso</I></TT></TT>] [<TT CLASS="OPTION">--jigdo=<TT
+    CLASS="REPLACEABLE"><I>cdrom.jigdo</I></TT></TT>] [<TT CLASS="OPTION"
+    >--template=<TT CLASS="REPLACEABLE"><I>cdrom.template</I></TT></TT>]
+    [<TT CLASS="OPTION">--force</TT>] [MORE OPTIONS] [<TT
+    CLASS="REPLACEABLE"><I>FILES</I></TT> | <TT CLASS="OPTION"
+    >--files-from=<TT CLASS="REPLACEABLE"><I>f</I></TT></TT>]<BR> Common
+    COMMANDs: make-template, make-image, verify </P></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN42"></A>
+   <H2>DESCRIPTION</H2>
+   <P>Jigsaw Download, or short jigdo, is a scheme developed primarily to
+    make it easy to distribute huge filesystem images (e.g. CD (ISO9660) or
+    DVD (UDF) images) over the internet, but it could also be used for
+    other data which is awkward to handle due to its size, like audio/video
+    files or large software packages.</P>
+   <P>jigdo tries to ensure that the large file (always called <I
+    CLASS="FIRSTTERM">image</I> from now on) is downloaded in small parts
+    which can be stored on different servers. People who want to download
+    the image do so by telling the <SPAN CLASS="CITEREFENTRY"><SPAN
+    CLASS="REFENTRYTITLE">jigdo</SPAN>(1)</SPAN> <SPAN CLASS="emphasis"><I
+    CLASS="EMPHASIS">(NOT IMPLEMENTED YET)</I></SPAN> download tool to
+    process one `<TT CLASS="FILENAME">.jigdo</TT>' file; using it, <B
+    CLASS="COMMAND">jigdo</B> downloads the parts and reassembles the
+    image. <B CLASS="COMMAND">jigdo-file</B> is used to prepare the files
+    for download.</P>
+   <P>What makes jigdo special is that the parts that are used to
+    reconstruct the image can have any size and content - they only need to
+    be contained in a contiguous region anywhere in the image.</P>
+   <P>For example, if you wish to distribute an ISO9660 image which
+    contains a snapshot of an FTP server, you can instruct <B
+    CLASS="COMMAND">jigdo-file</B> to prepare the download data in such a
+    way that when people use <B CLASS="COMMAND">jigdo</B> to download the
+    image, <B CLASS="COMMAND">jigdo</B> actually fetches the individual
+    files from the FTP server and assembles them into an exact copy of your
+    image - during the download! (If the image is not a filesystem dump,
+    you can use <SPAN CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE"
+    >split</SPAN>(1)</SPAN> to create the small parts that the image will
+    be reassembled from.)</P>
+   <P>You are completely free to choose where the individual parts of the
+    image are stored: They may be in entirely different directories on
+    different servers (e.g. because of storage/bandwidth constraints), but
+    this is invisible to the people downloading your image. The information
+    about available servers only needs to be added to the `<TT
+    CLASS="FILENAME">.jigdo</TT>' file by you before distributing it.</P>
+   <P>See later sections for a more detailed description of how jigdo
+    works, and also to get a better idea of what applications it supports
+    (such as customized versions of images released by others).</P></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN65"></A>
+   <H2>OPTIONS</H2>
+   <P>Many options are specific to a particular <TT CLASS="REPLACEABLE"><I
+    >COMMAND</I></TT>; the ones below are general or used by several
+    commands. Further options are listed below with the individual
+    commands. All options are silently ignored if they are not applicable
+    to the current command. For any <TT CLASS="REPLACEABLE"><I>BYTES</I
+    ></TT> parameters to options, you can append one of the letters `k',
+    `M' or `G' to the amount you specify, to indicate kilobytes, megabytes
+    or gigabytes.</P>
+   <P></P>
+   <DIV CLASS="VARIABLELIST">
+    <DL>
+     <DT><TT CLASS="OPTION">-h</TT> <TT CLASS="OPTION">--help</TT></DT>
+     <DD>
+      <P>Output short summary of commands and options.</P></DD>
+     <DT><TT CLASS="OPTION">-H</TT> <TT CLASS="OPTION">--help-all</TT></DT
+     >
+     <DD>
+      <P>Output complete summary of commands and options.</P></DD>
+     <DT><TT CLASS="OPTION">-v</TT> <TT CLASS="OPTION">--version</TT></DT>
+     <DD>
+      <P>Output program version.</P></DD>
+     <DT><TT CLASS="OPTION">-i</TT> <TT CLASS="OPTION">--image=<TT
+      CLASS="REPLACEABLE"><I>cdrom.iso</I></TT></TT></DT>
+     <DD>
+      <P>Specify location of the file containing the image. The image is
+       the large file that you want to distribute.</P></DD>
+     <DT><TT CLASS="OPTION">-j</TT> <TT CLASS="OPTION">--jigdo=<TT
+      CLASS="REPLACEABLE"><I>cdrom.jigdo</I></TT></TT></DT>
+     <DD>
+      <P>Specify location of the Jigsaw Download description file. The
+       jigdo file is a human-readable file generated by <B CLASS="COMMAND"
+       >jigdo-file</B>, to which you add information about all the servers
+       you are going to upload the files to. <B CLASS="COMMAND">jigdo</B>
+       will download this file as the first step of retrieving the
+       image.</P></DD>
+     <DT><TT CLASS="OPTION">-t</TT> <TT CLASS="OPTION">--template=<TT
+      CLASS="REPLACEABLE"><I>cdrom.template</I></TT></TT></DT>
+     <DD>
+      <P>Specify location of the image `template' file. The template file
+       is a binary file generated by <B CLASS="COMMAND">jigdo-file</B>, it
+       contains information on how to reassemble the image and also (in
+       compressed form) all the data from the image which was not found in
+       any of the parts.</P>
+      <P>Depending on the command, each of these three files is used
+       sometimes for input, sometimes for output. If the file is to be used
+       for output for a particular command and the output file already
+       exists, <B CLASS="COMMAND">jigdo-file</B> exits with an error,
+       unless <TT CLASS="OPTION">--force</TT> is present.</P>
+      <P>In most cases, you will only need to specify one out of <TT
+       CLASS="OPTION">-i</TT> <TT CLASS="OPTION">-j</TT> <TT CLASS="OPTION"
+       >-t</TT>, because any missing filenames will be deduced from the one
+       you specify. This is done by first stripping any extension from the
+       supplied name and then appending nothing (if deducing <TT
+       CLASS="OPTION">--image</TT>), `<TT CLASS="FILENAME">.jigdo</TT>' or
+       `<TT CLASS="FILENAME">.template</TT>'.</P></DD>
+     <DT><TT CLASS="OPTION">-r</TT> <TT CLASS="OPTION"
+      >--report=default|noprogress|quiet|grep</TT></DT>
+     <DD>
+      <P>Control how verbose the program is, and what format the output
+       has: <TT CLASS="OPTION">noprogress</TT> is the same as <TT
+       CLASS="OPTION">default</TT> except that no `<TT
+       CLASS="COMPUTEROUTPUT">x% done</TT>' progress messages are printed.
+       <TT CLASS="OPTION">quiet</TT> restricts the output to what is
+       absolutely necessary, mostly error messages. <TT CLASS="OPTION"
+       >grep</TT> is only different from <TT CLASS="OPTION">default</TT>
+       for the <B CLASS="COMMAND">make-template</B> command: It enables
+       output in a simple `<TT CLASS="REPLACEABLE"><I>&#60;offset&#62;
+       &#60;file&#62;</I></TT>' format which is useful when searching for
+       binary files in other binary files.</P></DD>
+     <DT><TT CLASS="OPTION">-f</TT> <TT CLASS="OPTION">--force</TT></DT>
+     <DD>
+      <P>Overwrite existent output files without complaining.</P></DD>
+     <DT><TT CLASS="OPTION">--no-force</TT></DT>
+     <DD>
+      <P><SPAN CLASS="emphasis"><I CLASS="EMPHASIS">This is the default.</I
+       ></SPAN> Refuse to overwrite existent output files.</P></DD>
+     <DT><TT CLASS="OPTION">-c</TT> <TT CLASS="OPTION">--cache=<TT
+      CLASS="REPLACEABLE"><I>jigdo-cache.db</I></TT></TT></DT>
+     <DD>
+      <P><B CLASS="COMMAND">jigdo-file</B> usually needs to read the entire
+       contents of all the <TT CLASS="REPLACEABLE"><I>FILES</I></TT> you
+       specify. If you use it repeatedly (e.g. because you make a new CD
+       image available daily), caching the file information will increase
+       the program's speed significantly. The cache file is automatically
+       created if it is not yet present. Data is usually both read from and
+       written to it.</P></DD>
+     <DT><TT CLASS="OPTION">--no-cache</TT></DT>
+     <DD>
+      <P><SPAN CLASS="emphasis"><I CLASS="EMPHASIS">This is the default.</I
+       ></SPAN> Do not use a cache.</P></DD>
+     <DT><TT CLASS="OPTION">--cache-expiry=<TT CLASS="REPLACEABLE"><I
+      >SECONDS</I></TT></TT></DT>
+     <DD>
+      <P>Set maximum age of cache entries. Any entries older than this will
+       be removed from the cache. The default is 30 days. You can append
+       one of the letters `h', `d', `w', `m', `y' to denote hours, days,
+       weeks, months or years, respectively. A value of `0' or `off'
+       disables expiry, so that all entries will stay in the cache forever.
+       See the section `CACHE FILES' below for more information.</P></DD>
+     <DT><TT CLASS="OPTION">--readbuffer=<TT CLASS="REPLACEABLE"><I
+      >BYTES</I></TT></TT></DT>
+     <DD>
+      <P>Set size of internal buffers. The default is 128k - if you have a
+       fast disc, increasing this value may make <B CLASS="COMMAND"
+       >jigdo-file</B> faster, but in general, changing it is not
+       necessary.</P></DD>
+     <DT><TT CLASS="OPTION">--md5-block-size=<TT CLASS="REPLACEABLE"><I
+      >BYTES</I></TT></TT></DT>
+     <DD>
+      <P><SPAN CLASS="emphasis"><I CLASS="EMPHASIS">Uninteresting internal
+       parameter.</I></SPAN> Set size of blocks into which files are
+       subdivided. The default is 128k. If you change it, any cache file
+       will have to be regenerated. Internally, <B CLASS="COMMAND"
+       >jigdo-file</B> may choose to use a slightly larger or smaller
+       value.</P></DD>
+     <DT><TT CLASS="OPTION">-T</TT> <TT CLASS="OPTION">--files-from=<TT
+      CLASS="REPLACEABLE"><I>file</I></TT></TT></DT>
+     <DD>
+      <P>Read file and directory names from the specified file. If <TT
+       CLASS="REPLACEABLE"><I>file</I></TT> is `-', read names from
+       standard input. Each line in the file is taken as a name, so the
+       names may contain spaces, but not newline characters. An empty line
+       causes <B CLASS="COMMAND">jigdo-file</B> to stop reading from the
+       file.</P>
+      <P><SPAN CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE">find</SPAN
+       >(1)</SPAN> is a powerful tool for generating file lists, but make
+       sure to use `<B CLASS="COMMAND">find -type f</B>' if possible -
+       otherwise, if you instruct <B CLASS="COMMAND">find</B> to output
+       both a filename and a symlink to that filename, <B CLASS="COMMAND"
+       >jigdo-file</B> will read the file contents twice.</P></DD>
+     <DT><TT CLASS="REPLACEABLE"><I>FILES</I></TT></DT>
+     <DD>
+      <P>Names of files or directories to use as input. These are the parts
+       that are contained in the image. In case one of the names is a
+       directory, the program recursively scans the directory and adds all
+       files contained in it. While doing this, it follows symbolic links,
+       but avoids symlink loops.</P>
+      <P>If one of the filenames starts with the character `-', you must
+       precede the list of files with `--'. A value of `-' has <SPAN
+       CLASS="emphasis"><I CLASS="EMPHASIS">no</I></SPAN> special meaning
+       in this list, it stands for a file whose name is a single hyphen.</P
+      ></DD></DL></DIV></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN208"></A>
+   <H2>COMMANDS</H2>
+   <P>The command name is the first non-option argument passed to <B
+    CLASS="COMMAND">jigdo-file</B>. Most commands have short abbreviations
+    as well as long names. <SPAN CLASS="emphasis"><I CLASS="EMPHASIS">The
+    short command names should not be used in scripts - there may be
+    incompatible changes to them in the future!</I></SPAN></P>
+   <DIV CLASS="REFSECT2"><A NAME="AEN213"></A>
+    <H3><B CLASS="COMMAND">make-template</B>, <B CLASS="COMMAND">mt</B
+     ></H3>
+    <P>Reads <TT CLASS="REPLACEABLE"><I>image</I></TT> and <TT
+     CLASS="REPLACEABLE"><I>FILES</I></TT>, creates `<TT CLASS="FILENAME"
+     >.jigdo</TT>' and `<TT CLASS="FILENAME">.template</TT>'. This is the
+     main functionality of <B CLASS="COMMAND">jigdo-file</B>.</P>
+    <P>It is possible to specify both <TT CLASS="OPTION">--image=-</TT> and
+     <TT CLASS="OPTION">--files-from=-</TT>. In this case, first the list
+     of files is read from standard input until an empty line is
+     encountered. Everything following it is assumed to be the image data.
+     This can be useful if you use <SPAN CLASS="CITEREFENTRY"><SPAN
+     CLASS="REFENTRYTITLE">mkisofs</SPAN>(1)</SPAN> or similar programs
+     that can output the complete image on their standard output, because
+     there is no need to store the image on disc temporarily.</P>
+    <P>If a <TT CLASS="REPLACEABLE"><I>FILES</I></TT> argument contains the
+     characters `<TT CLASS="LITERAL">//</TT>' (Unix) or `<TT
+     CLASS="LITERAL">\.\</TT>' (Windows), this has special meaning. In the
+     final jigdo file that users will download, each of the parts is
+     referenced in the `[Parts]' section with a URI of the form
+     `Label:some/filename'. The `[Servers]' section gives a mapping of
+     labels to servers on the internet, with lines like
+     `Label=http://myserver.org/jigdofiles/'. Using this information, <B
+     CLASS="COMMAND">jigdo</B> will create the final download URI for the
+     part, `http://myserver.org/jigdofiles/some/filename'. Specifying `<TT
+     CLASS="LITERAL">//</TT>' (or `<TT CLASS="LITERAL">\.\</TT>') in a file
+     or directory name serves to `cut off' the names at the right directory
+     level. For example, if the Unix path of one of your <TT
+     CLASS="REPLACEABLE"><I>FILES</I></TT> is `/path/some/filename', you
+     can tell <B CLASS="COMMAND">jigdo-file</B> to cut off after the
+     `/path' by passing it the argument `/path//some/filename', or
+     `/path//' if you want the whole directory scanned. The path names need
+     not be absolute; `somedirectory//' is also possible.</P>
+    <P></P>
+    <DIV CLASS="VARIABLELIST">
+     <DL>
+      <DT><TT CLASS="OPTION">--label <TT CLASS="REPLACEABLE"><I
+       >Label=/path</I></TT></TT></DT>
+      <DD>
+       <P>Specify a name to use as the label name for a path on disc.
+        (Influences the output jigdo file.) If you used `<TT
+        CLASS="LITERAL">//</TT>' in the <TT CLASS="REPLACEABLE"><I
+        >FILES</I></TT> arguments as described above, <B CLASS="COMMAND"
+        >jigdo-file</B> will by default pick label names automatically
+        (`A', `B' etc.). With this option, you can give labels more
+        meaningful names. Note that the label name will only be used if one
+        or more <TT CLASS="REPLACEABLE"><I>FILES</I></TT> begin with
+        `/path//'.</P>
+       <P>Try to use label names that start with uppercase characters, to
+        disambiguate them clearly from protocol names like `http',
+        `ftp'.</P></DD>
+      <DT><TT CLASS="OPTION">--uri <TT CLASS="REPLACEABLE"><I
+       >Label=http://some.server.org/</I></TT></TT></DT>
+      <DD>
+       <P>By default, using <TT CLASS="OPTION">--label</TT> as described
+        above will cause lines of the form `Label=file:/path/' to be
+        written to the `[Servers]' section of the output jigdo file. If you
+        want to override the `file:' URI so that the line reads
+        `Label=http://some.server.org/', you can do so by specifying <TT
+        CLASS="OPTION">--uri</TT> along with <TT CLASS="OPTION"
+        >--label</TT>.</P>
+       <P>Note that <TT CLASS="OPTION">--uri</TT> only has an effect if the
+        corresponding <TT CLASS="OPTION">--label</TT> with the same label
+        name is present, and gets used by the program.</P>
+       <P>The supplied value is not quoted by the program; if it contains
+        characters such as space or any of the characters <TT
+        CLASS="LITERAL">#"'\</TT> then you must quote it. (Under Unix, you
+        may need to quote the value twice to also protect it from the
+        shell, e.g. <TT CLASS="LITERAL">\\\\</TT> or <TT CLASS="LITERAL"
+        >'\\'</TT> to get a single backslash in the URI.)</P>
+       <P>Users of the Windows version may notice that the `<TT
+        CLASS="LITERAL">\</TT>' directory separators are converted into
+        `<TT CLASS="LITERAL">/</TT>' in the `file:' URIs that are generated
+        by default. This is done to increase cross-platform compatibility
+        of `file:' - the <B CLASS="COMMAND">print-missing</B> command of
+        the Windows version will automatically re-convert the characters
+        when it prints the URIs. In case you supply your own `file:' URIs
+        under Windows using <TT CLASS="OPTION">--uri</TT>, you must also
+        exchange `<TT CLASS="LITERAL">/</TT>' and `<TT CLASS="LITERAL"
+        >\</TT>'.</P></DD>
+      <DT><TT CLASS="OPTION">-0</TT> to <TT CLASS="OPTION">-9</TT></DT>
+      <DD>
+       <P>Set amount of compression in the output template file, from <TT
+        CLASS="OPTION">-0</TT> (no compression) to <TT CLASS="OPTION"
+        >-9</TT> (maximum compression). The default is <TT CLASS="OPTION"
+        >-9</TT>, which can make the template generation quite slow. The
+        compression algorithm used is the same as for <SPAN
+        CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE">gzip</SPAN
+        >(1)</SPAN>.</P></DD>
+      <DT><TT CLASS="OPTION">--min-length=<TT CLASS="REPLACEABLE"><I
+       >BYTES</I></TT></TT></DT>
+      <DD>
+       <P>Set minimum length of a part for <B CLASS="COMMAND"
+        >jigdo-file</B> to look for it in the image. The default is 4k.
+        Parts smaller than this will never be found in the image, so their
+        data will be included in the template file. The search algorithm
+        used requires such a minimum length, otherwise template generation
+        could become extremely slow. If you know for sure that all your <TT
+         CLASS="REPLACEABLE"><I>FILES</I></TT> are larger than a certain
+        amount, you can increase <B CLASS="COMMAND">jigdo-file</B>'s speed
+        slightly by specifying the amount with this option. There is a
+        hard-wired absolute minimum of 1k - anything lower will silently be
+        set to 1k.</P></DD>
+      <DT><TT CLASS="OPTION">--image-section</TT></DT>
+      <DD>
+       <P><SPAN CLASS="emphasis"><I CLASS="EMPHASIS">This is the
+        default.</I></SPAN> Causes <B CLASS="COMMAND">jigdo-file</B> to
+        include an `[Image]' section in the `<TT CLASS="FILENAME"
+        >.jigdo</TT>' file.</P></DD>
+      <DT><TT CLASS="OPTION">--no-image-section</TT></DT>
+      <DD>
+       <P>Do <SPAN CLASS="emphasis"><I CLASS="EMPHASIS">not</I></SPAN>
+        include an `[Image]' section in the `<TT CLASS="FILENAME"
+        >.jigdo</TT>' file. You need to add one yourself if you use this
+        option.</P></DD>
+      <DT><TT CLASS="OPTION">--servers-section</TT></DT>
+      <DD>
+       <P><SPAN CLASS="emphasis"><I CLASS="EMPHASIS">This is the
+        default.</I></SPAN> Causes <B CLASS="COMMAND">jigdo-file</B> to
+        append a `[Servers]' section at the end of the `<TT
+        CLASS="FILENAME">.jigdo</TT>' file. This default section uses
+        `file:' URIs, which allows for immediate reassembly of the image
+        from the local filesystem, and is also useful if you want to edit
+        the file manually and replace the `file:' URIs with other URIs.</P
+       ></DD>
+      <DT><TT CLASS="OPTION">--no-servers-section</TT></DT>
+      <DD>
+       <P>Do <SPAN CLASS="emphasis"><I CLASS="EMPHASIS">not</I></SPAN> add
+        a `[Servers]' section at the end of the `<TT CLASS="FILENAME"
+        >.jigdo</TT>' file. Useful e.g. if you are going to append the
+        section with a script.</P></DD></DL></DIV></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN324"></A>
+    <H3><B CLASS="COMMAND">make-image</B>, <B CLASS="COMMAND">mi</B></H3>
+    <P>Reads `<TT CLASS="FILENAME">.template</TT>' and <TT
+     CLASS="REPLACEABLE"><I>FILES</I></TT>, creates <TT CLASS="REPLACEABLE"
+     ><I>image</I></TT> (or `<TT CLASS="FILENAME">imagename.tmp</TT>').
+     Provides a rudimentary way of reassembling images - <B CLASS="COMMAND"
+     >jigdo</B> is usually better suited for this task. However, in
+     contrast to <B CLASS="COMMAND">jigdo</B>, no `<TT CLASS="FILENAME"
+     >.jigdo</TT>' file is required.</P>
+    <P>If the image is to be written to a file (and not to standard
+     output), it is possible to create the image in several steps, with
+     several invocations of `<B CLASS="COMMAND">jigdo-file make-image</B
+     >', as follows: You first invoke <B CLASS="COMMAND">jigdo-file</B>,
+     specifying as many files as are available at this time. The program
+     scans the files, and those that are contained in the image are copied
+     to a temporary file, whose name is formed by appending `<TT
+     CLASS="FILENAME">.tmp</TT>' to the image filename.</P>
+    <P>For all further files which could be parts of the image, you repeat
+     this process. As soon as all parts are present, the temporary file
+     will be truncated slightly (to delete some administrative data that <B
+      CLASS="COMMAND">jigdo-file</B> appends at the end) and renamed to the
+     final image name. The possibility of reassembling the image in several
+     steps is especially useful for gathering files from removable media,
+     e.g. several older CDs.</P>
+    <P>Scripts using <B CLASS="COMMAND">make-image</B> can detect whether
+     image creation is complete by checking the exit status: 0 signals
+     successful creation, whereas 1 means that more files need to be
+     supplied. Other errors result in an exit status of 2 (`recoverable',
+     e.g. file not found) or 3 (non-recoverable, e.g. write error).</P>
+    <P></P>
+    <DIV CLASS="VARIABLELIST">
+     <DL>
+      <DT><TT CLASS="OPTION">--check-files</TT></DT>
+      <DD>
+       <P><SPAN CLASS="emphasis"><I CLASS="EMPHASIS">This is the
+        default.</I></SPAN> Whenever any part is copied to the image,
+        re-check its checksum against the checksum stored in the template.
+        It is recommended that you leave this switched on, even if it slows
+        down image creation a bit.</P></DD>
+      <DT><TT CLASS="OPTION">--no-check-files</TT></DT>
+      <DD>
+       <P>Do not check files' checksums when copying them to the image.
+        This can be safely used when no cache file is used (which means
+        that files will be written to the image immediately after being
+        scanned) or the whole image is checked later with the <B
+        CLASS="COMMAND">verify</B> command.</P></DD></DL></DIV></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN357"></A>
+    <H3><B CLASS="COMMAND">print-missing</B>, <B CLASS="COMMAND">pm</B
+     ></H3>
+    <P>Reads `<TT CLASS="FILENAME">.jigdo</TT>', `<TT CLASS="FILENAME"
+     >.template</TT>' and (if present) `<TT CLASS="FILENAME"
+     >imagename.tmp</TT>', outputs a list of URIs still needed to
+     completely reassemble the image.</P>
+    <P>Together with the <B CLASS="COMMAND">make-image</B> command, this
+     provides most of the functionality of <B CLASS="COMMAND">jigdo</B> on
+     the command line.</P>
+    <P>For each part that is not yet present in the temporary image file,
+     the file checksum is looked up in the `[Parts]' section of the jigdo
+     file. Any label in the corresponding entry is then expanded according
+     to the label definitions in the `[Servers]' section and printed on
+     standard output. <B CLASS="COMMAND">jigdo</B> allows you to specify
+     several alternative locations for each label in this section, but <B
+     CLASS="COMMAND">print-missing</B> will only output the first one for
+     each missing part.</P>
+    <P>If the checksum cannot be found in the `[Parts]' section (this
+     Should Not Happen unless you deleted that section), a lookup is
+     instead made for `MD5Sum:<TT CLASS="REPLACEABLE"><I
+     >&#60;checksum&#62;</I></TT>', just like with <B CLASS="COMMAND"
+     >jigdo</B>. (Thus, if you want to get rid of the `[Parts]' section,
+     you can do so if you rename each part to its own checksum.)</P>
+    <P></P>
+    <DIV CLASS="VARIABLELIST">
+     <DL>
+      <DT><TT CLASS="OPTION">--uri <TT CLASS="REPLACEABLE"><I
+       >Label=http://some.server.org/</I></TT></TT></DT>
+      <DD>
+       <P>Override the entries in the `<TT CLASS="FILENAME">.jigdo</TT>'
+        file for any label with a URI of your choice. With the example
+        above, a `[Parts]' entry of `Label:some/filename' will cause the
+        line `http://some.server.org/some/filename' to be printed.</P>
+       <P>The supplied value is not quoted by the program; if it contains
+        characters such as space or any of the characters <TT
+        CLASS="LITERAL">#"'\</TT> then you must quote it. (Under Unix, you
+        may need to quote the value twice to also protect it from the
+        shell, e.g. <TT CLASS="LITERAL">\\\\</TT> or <TT CLASS="LITERAL"
+        >'\\'</TT> to get a single backslash in the URI.)</P></DD></DL
+     ></DIV></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN386"></A>
+    <H3><B CLASS="COMMAND">print-missing-all</B>, <B CLASS="COMMAND"
+     >pma</B></H3>
+    <P>Just like <B CLASS="COMMAND">print-missing</B>, this command outputs
+     a list of URIs still needed to completely reassemble the image.
+     However, <SPAN CLASS="emphasis"><I CLASS="EMPHASIS">all</I></SPAN>
+     alternative download locations are printed instead of just one. In the
+     output, the URIs for a file are separated from other files' URIs with
+     blank lines. The <TT CLASS="OPTION">--uri</TT> option has the same
+     effect as for <B CLASS="COMMAND">print-missing</B>.</P></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN395"></A>
+    <H3><B CLASS="COMMAND">verify</B>, <B CLASS="COMMAND">ver</B></H3>
+    <P>Reads <TT CLASS="REPLACEABLE"><I>image</I></TT> (presumably
+     generated with <B CLASS="COMMAND">make-image</B>) and `<TT
+     CLASS="FILENAME">.template</TT>', checks for correct checksum of
+     image.</P>
+    <P>The template data does not only contain checksums of the individual
+     parts, but also of the image as a whole. <B CLASS="COMMAND"
+     >make-image</B> already performs a number of internal checks, but if
+     you like, you can additionally check the image with this command.</P
+    ></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN405"></A>
+    <H3><B CLASS="COMMAND">scan</B>, <B CLASS="COMMAND">sc</B></H3>
+    <P>Reads all the <TT CLASS="REPLACEABLE"><I>FILES</I></TT> and enters
+     them into the cache, unless they are already cached. The <TT
+     CLASS="OPTION">--cache</TT> option must be present for this
+     command.</P></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN412"></A>
+    <H3><B CLASS="COMMAND">md5sum</B>, <B CLASS="COMMAND">md5</B></H3>
+    <P>Reads all the <TT CLASS="REPLACEABLE"><I>FILES</I></TT> and prints
+     out MD5 checksums of their contents. This command is quite similar to
+     <SPAN CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE">md5sum</SPAN
+     >(1)</SPAN>, except that the checksum is output in the Base64-like
+     encoding which is also used elsewhere by <B CLASS="COMMAND"
+     >jigdo-file</B>.</P>
+    <P>The <TT CLASS="REPLACEABLE"><I>FILES</I></TT> arguments are
+     processed in the same way as with the other commands, which means that
+     recursion automatically takes place for any arguments that are
+     directories, and that symbolic links are not listed except when the
+     file(s) they point to are not reachable directly.</P>
+    <P>In the checksum list printed on standard output, only the part of
+     the filename following any `<TT CLASS="LITERAL">//</TT>' (or `<TT
+     CLASS="LITERAL">\.\</TT>' on Windows) is printed. Any <TT
+     CLASS="OPTION">--cache</TT> will be used for querying files' MD5
+     checksums and/or writing the checksums of scanned files.</P></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN428"></A>
+    <H3><B CLASS="COMMAND">list-template</B>, <B CLASS="COMMAND">ls</B
+     ></H3>
+    <P>Reads a `<TT CLASS="FILENAME">.template</TT>' file and outputs
+     low-level information about the image and all parts contained in it,
+     including offset, length and checksum.</P>
+    <P>You can also use this command with temporary image files (by
+     specifying something like <TT CLASS="OPTION"
+     >--template=imagename.tmp</TT>) - in that case, the output also
+     distinguishes between parts that have been written to the image and
+     parts that haven't.</P>
+    <P>The following different types of lines can be output. `have-file'
+     only occurs for `<TT CLASS="FILENAME">.tmp</TT>' files, indicating a
+     file that has already been successfully written to the temporary
+     file:</P><PRE
+CLASS="SCREEN"
+>in-template <TT
+CLASS="REPLACEABLE"
+><I
+>offset-in-image length</I
+></TT
+>
+need-file <TT
+CLASS="REPLACEABLE"
+><I
+>offset-in-image length file-md5sum filestart-rsyncsum</I
+></TT
+>
+have-file <TT
+CLASS="REPLACEABLE"
+><I
+>offset-in-image length file-md5sum filestart-rsyncsum</I
+></TT
+>
+image-info <TT
+CLASS="REPLACEABLE"
+><I
+>image-length image-md5sum rsyncsum-size</I
+></TT
+></PRE></DIV></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN443"></A>
+   <H2>DETAILS</H2>
+   <P>Jigsaw Download was created with the format of ISO9660 CD images in
+    mind - however, the following also applies to many other filesystem
+    formats, as well as to `tar' archives and uncompressed `zip' archives.
+    A CD image contains both information for organizing the filesystem
+    (header with disc name etc., ISO9660 directory data, data of extensions
+    such as Joliet or RockRidge, zero padding) and the files contained on
+    the CD. An important property that jigdo relies on is that each file is
+    stored in one contiguous section of the image; it is not split into two
+    or more parts.</P>
+   <P>When <B CLASS="COMMAND">jigdo-file</B> is given a number of files
+    that might be contained in an image, it detects whether any of the
+    files are present using a `rolling checksum' inspired by the one used
+    by <SPAN CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE">rsync</SPAN
+    >(1)</SPAN>. The resulting data is written to the `<TT CLASS="FILENAME"
+    >.template</TT>' file: If a section of the image could not be matched
+    (e.g. it was directory information), the data is compressed and written
+    directly to the template. However, if a matching file was found, its
+    data is omitted from the template. Instead, only a reference (an MD5
+    checksum of the file) is inserted in the template.</P>
+   <P>Note that the template data only contains binary data, it does not
+    contain any filenames or URIs, since it cannot be easily edited in case
+    any of these values need to be changed. All that information is stored
+    in the `<TT CLASS="FILENAME">.jigdo</TT>' file, a text file to which
+    you can add URLs for your server(s). The jigdo file provides a mapping
+    for each MD5 checksum to one or more alternative download locations for
+    the corresponding part. See the section `FORMAT OF .JIGDO FILES' below
+    for details.</P>
+   <P>Apart from the mapping of MD5 sums to URIs, the jigdo file also
+    contains an URI pointing to a download location for the template file.
+    This way, the <B CLASS="COMMAND">jigdo</B> download tool only needs to
+    be given one URI (that of the `<TT CLASS="FILENAME">.jigdo</TT>' file)
+    to be able to download and reassemble the complete image.</P></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN457"></A>
+   <H2>FORMAT OF .JIGDO FILES</H2>
+   <P><SPAN CLASS="emphasis"><I CLASS="EMPHASIS">WORK IN PROGRESS... at the
+    moment, minor modifications to the format are still possible.</I
+    ></SPAN></P>
+   <P>The overall format of `<TT CLASS="FILENAME">.jigdo</TT>' files
+    follows that of `<TT CLASS="FILENAME">.ini</TT>' files, as also used by
+    the Gnome and KDE projects for some data. The file is organized into
+    sections, each of which is preceded by a line reading `[Sectionname]'.
+    Within each section, lines have the form `Label=Value'. Such lines are
+    also called `entries' below.</P>
+   <P>Comments are introduced with the `<TT CLASS="LITERAL">#</TT>'
+    character and extend to the end of the line. Whitespace is ignored at
+    line start and end as well as to the left and right of section names
+    and the `<TT CLASS="LITERAL">=</TT>' in entries. Furthermore, the jigdo
+    utilities split up the text of the entry value (i.e. the part after the
+    `<TT CLASS="LITERAL">=</TT>') into whitespace-separated words, much
+    like the Unix shell. Single <TT CLASS="LITERAL">''</TT> and double <TT
+    CLASS="LITERAL">""</TT> quotes can be used to prevent that e.g. URIs
+    containing whitespace are split apart. Similarly, characters with
+    special meaning (the characters <TT CLASS="LITERAL">'"#\</TT> and
+    space/tab) must be quoted with <TT CLASS="LITERAL">\</TT> to appear in
+    the value. As with the shell, there is a difference between <TT
+    CLASS="LITERAL">''</TT> and <TT CLASS="LITERAL">""</TT>: Within <TT
+    CLASS="LITERAL">''</TT>, the characters <TT CLASS="LITERAL">"#\</TT>
+    and whitespace lose their special meaning, whereas within <TT
+    CLASS="LITERAL">""</TT>, only the characters <TT CLASS="LITERAL"
+    >'#</TT> and whitespace lose their special meaning - in other words,
+    backslash escapes still work inside <TT CLASS="LITERAL">""</TT>, but
+    not <TT CLASS="LITERAL">''</TT>.</P>
+   <P>Below is a description of the individual section names used by
+    jigdo.</P>
+   <DIV CLASS="REFSECT2"><A NAME="AEN481"></A>
+    <H3>Jigdo section</H3><PRE
+CLASS="SCREEN"
+>[Jigdo]
+Version=1.0
+Generator=jigdo-file/0.5.3
+Info=<TT
+CLASS="REPLACEABLE"
+><I
+>long description</I
+></TT
+></PRE>
+    <P>Information about the version of the jigdo file format used, and the
+     program that generated it. The `Info' label can contain a description
+     of the contents of the jigdo file.</P>
+    <P>There is one such section per `<TT CLASS="FILENAME">.jigdo</TT>'
+     file.</P></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN488"></A>
+    <H3>Image section</H3><PRE
+CLASS="SCREEN"
+>[Image]
+Filename=<TT
+CLASS="REPLACEABLE"
+><I
+>"filename for saving on user's disc"</I
+></TT
+>
+Template=<TT
+CLASS="REPLACEABLE"
+><I
+>"URI where to fetch template file"</I
+></TT
+>
+Selected=yes|no
+ShortInfo=<TT
+CLASS="REPLACEABLE"
+><I
+>single-line description, for displaying menu of images</I
+></TT
+>
+Info=<TT
+CLASS="REPLACEABLE"
+><I
+>long description</I
+></TT
+></PRE>
+    <P>The `Selected' label indicates whether the image is selected for
+     download by default when <B CLASS="COMMAND">jigdo</B> is run for this
+     file.</P>
+    <P>Instead of an URI, the value for the `Template' entry can also be a
+     string of the form `<TT CLASS="REPLACEABLE"><I>Label</I></TT>:<TT
+     CLASS="REPLACEABLE"><I>pathname</I></TT>', as described below.</P>
+    <P>This section may occur multiple times, there is one such section for
+     each image in the jigdo file.</P></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN501"></A>
+    <H3>Parts section</H3><PRE
+CLASS="SCREEN"
+>[Parts]
+xJNkjrq8NYMraeGavUpllw=LabelA:part0
+GoTResP2EC6Lb_2wTsqOoQ=LabelA:part1
+kyfebwu6clbYqqWUdFIyaw=LabelB:some/path/part2
+-J9UAimo0Bqg9c0oOXI1mQ=http://some.where.com/part3</PRE>
+    <P>All lines in the section, which provides the mapping from MD5
+     checksums to URIs, have the same format: On the left side of the `<TT
+     CLASS="LITERAL">=</TT>' the checksum (encoded with a Base64-like
+     encoding) is given, and on the right a string corresponding to the
+     part with this checksum; either a complete URI or a string of the form
+     `<TT CLASS="REPLACEABLE"><I>Label</I></TT>:<TT CLASS="REPLACEABLE"><I
+     >pathname</I></TT>', which is expanded into one or more URIs by
+     looking up the definition(s) for the <TT CLASS="REPLACEABLE"><I
+     >Label</I></TT> in the `[Servers]' section.</P>
+    <P>In case a particular MD5 checksum cannot be found in any `[Parts]'
+     section by <B CLASS="COMMAND">jigdo</B>, the program will perform a
+     lookup for `<TT CLASS="LITERAL">MD5Sum:</TT><TT CLASS="REPLACEABLE"
+     ><I>&#60;checksum&#62;</I></TT>', e.g. for `<TT CLASS="LITERAL"
+     >MD5Sum:xJNkjrq8NYMraeGavUpllw</TT>' if you deleted the line for
+     `part0' above.</P>
+    <P>A checksum appearing multiple times in this section indicates
+     alternative download locations for the part.</P>
+    <P>There may be any number of `[Parts]' sections in the file; they are
+     all considered when looking up MD5 checksums.</P></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN516"></A>
+    <H3>Servers section</H3><PRE
+CLASS="SCREEN"
+>[Servers]
+LabelA=http://myserver.org/
+LabelA=ftp://mirror.myserver.org/
+LabelB=LabelC:subdirectory/
+LabelC=http://some.where.com/jigdo/</PRE>
+    <P>All lines in the section, which provides the mapping from server
+     labels to server locations, have the same format: On the left side of
+     the `<TT CLASS="LITERAL">=</TT>' the label name is given, and on the
+     right the value to expand the label name to.</P>
+    <P>A label name appearing multiple times in this section indicates
+     alternative download locations for the parts that use the label in the
+     `[Parts]' section. This notation makes it very easy to add mirrors to
+     the jigdo file.</P>
+    <P>As shown by the example above, the label values may themselves
+     reference other labels. For example, the entry
+     `LabelB:some/path/part2' in the `[Parts]' section will expand to
+     `http://some.where.com/jigdo/subdirectory/some/path/part2'. Loops in
+     the label definitions result in undefined behaviour and must be
+     avoided.</P>
+    <P>There may be any number of `[Servers]' sections in the file; they
+     are all considered when looking up labels. Either of `[Parts]' or
+     `[Servers]', but not both, can be omitted from the jigdo file.</P
+    ></DIV></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN524"></A>
+   <H2>CACHE FILES</H2>
+   <P>Any file specified with the <TT CLASS="OPTION">--cache</TT> option is
+    used to store information about the <TT CLASS="REPLACEABLE"><I
+    >FILES</I></TT> presented to <B CLASS="COMMAND">jigdo-file</B>. When
+    querying the cache, a file is considered unchanged (and the cached data
+    is used) only if filename, file size and last modification time (mtime)
+    match exactly. For the filename match, not the entire file name is
+    used, but only the part following any `<TT CLASS="LITERAL">//</TT>', so
+    that any changes to the part before the `<TT CLASS="LITERAL">//</TT>'
+    will not invalidate the cache.</P>
+   <P>Old cache entries are removed from the cache if they have not been
+    read from or written to for the amount of time specified with <TT
+    CLASS="OPTION">--cache-expiry</TT>. Entries are <SPAN CLASS="emphasis"
+    ><I CLASS="EMPHASIS">not</I></SPAN> immediately removed from the cache
+    if the file they refer to no longer exists - this makes it possible to
+    cache information about files on removable media.</P>
+   <P>Cache expiry only takes place <SPAN CLASS="emphasis"><I
+    CLASS="EMPHASIS">after</I></SPAN> <B CLASS="COMMAND">jigdo-file</B> has
+    done its main work - if any old entries are accessed before expiry
+    takes place, they will be kept. For example, if the program is run
+    using the default expiry time of 30 days, but accesses a cache file
+    with entries generated 2 months ago, then entries in that cache <SPAN
+    CLASS="emphasis"><I CLASS="EMPHASIS">will</I></SPAN> be considered, and
+    only those cache entries that were not needed during the program run
+    will be expired.</P>
+   <P>Due to a peculiarity of the underlying database library (libdb3),
+    cache files never shrink, they only grow. If a large number of entries
+    was expired from your cache file and you want it to shrink, you can
+    either just delete it (of course then everything will have to be
+    regenerated) or use the utilities accompanying libdb3 to dump and
+    restore the database, with a command like `<B CLASS="COMMAND">db3_dump
+    <TT CLASS="REPLACEABLE"><I>old-cache.db</I></TT> | db3_load <TT
+    CLASS="REPLACEABLE"><I>new-cache.db</I></TT></B>'. <SPAN CLASS="phrase"
+    ><SPAN CLASS="PHRASE">For Debian, these programs are supplied in the
+    package `libdb3-util'.</SPAN></SPAN></P>
+   <P>If a different <TT CLASS="OPTION">--md5-block-size</TT> is specified,
+    the entire file needs to be re-read to update its cache entry. If a
+    different <TT CLASS="OPTION">--min-length</TT> is specified, only the
+    first `md5-block-size' bytes of the file need to be re-read.</P></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN547"></A>
+   <H2>EXAMPLES</H2>
+   <DIV CLASS="REFSECT2"><A NAME="AEN549"></A>
+    <H3>Preparing your CD image for distribution</H3>
+    <P>You have created a CD image `<TT CLASS="FILENAME">image.iso</TT>'
+     from some of the files stored in the directory `<TT CLASS="FILENAME"
+     >/home/ftp</TT>' on your harddisc, which is also available online as
+     `ftp://mysite.org'. As you don't want to waste space by effectively
+     hosting the same data twice (once as files on the FTP server, once
+     inside the image), and you are fed up with users' downloads aborting
+     after 200MB and their restarting the download dozens of times, you
+     decide to use jigdo. How do you prepare the image for download?</P>
+    <P>In fact, only one command is necessary: <A NAME="AEN555"><BLOCKQUOTE
+      CLASS="BLOCKQUOTE">
+     <P><B CLASS="COMMAND">jigdo-file make-template --image=image.iso
+      --jigdo=/home/ftp/image.jigdo --template=/home/ftp/image.template
+      /home/ftp// --label Mysite=/home/ftp --uri
+      Mysite=ftp://mysite.org/</B></P></BLOCKQUOTE> </P>
+    <P>After editing the file `<TT CLASS="FILENAME"
+     >/home/ftp/image.jigdo</TT>' to contain the correct URI for the
+     template, `ftp://mysite.org/image.template', people can point <B
+     CLASS="COMMAND">jigdo</B> at `ftp://mysite.org/image.jigdo' to
+     download your image.</P>
+    <P>Note that nothing prevents you from doing the same for an FTP server
+     that isn't administrated by you - in that case, you only need to host
+     the `<TT CLASS="FILENAME">.jigdo</TT>' and `<TT CLASS="FILENAME"
+     >.template</TT>' files on your own server/homepage.</P></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN564"></A>
+    <H3>Preparing an arbitrary large file for distribution</H3>
+    <P>We assume that you have a large file that is not a filesystem, e.g.
+     `<TT CLASS="FILENAME">movie.mpeg</TT>'. Because of space problems, you
+     want to distribute the data on two servers.</P>
+    <P>In this case, the parts of the image need to be generated
+     artificially with the <B CLASS="COMMAND">split</B> command. For
+     example, to create chunks of 4MB each, use `<B CLASS="COMMAND">split
+     -b 4m movie.mpeg part</B>'. Copy the resulting files `<TT
+     CLASS="FILENAME">part<TT CLASS="REPLACEABLE"><I>XX</I></TT></TT>' into
+     two directories `<TT CLASS="FILENAME">1</TT>' and `<TT
+     CLASS="FILENAME">2</TT>' that you create, according to how you want
+     the files distributed between the servers. Next, create the jigdo and
+     template files with `<B CLASS="COMMAND">jigdo-file make-template
+     --image=movie.mpeg 1// 2//</B>'. You will need to edit the `<TT
+     CLASS="FILENAME">.jigdo</TT>' file and provide the right URIs for the
+     two servers that you are going to upload the `<TT CLASS="FILENAME"
+     >part<TT CLASS="REPLACEABLE"><I>XX</I></TT></TT>' files as well as the
+     `<TT CLASS="FILENAME">.template</TT>' file to.</P></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN580"></A>
+    <H3>Customized versions of images</H3>
+    <P>Because it is possible to assign a different URI for each part of an
+     image if necessary, jigdo is very flexible. Only one example is the
+     possibility of customized versions of images: Suppose that someone is
+     distributing a CD image, and that you want to make a few small changes
+     to it and redistribute your own version. You download the `<TT
+     CLASS="FILENAME">official.iso</TT>' CD image with <B CLASS="COMMAND"
+     >jigdo</B>, write it to CD-R, make your changes (say, adding files
+     from the `<TT CLASS="FILENAME">myfiles</TT>' directory on your
+     harddisc) and produce your own version, `<TT CLASS="FILENAME"
+     >myversion.iso</TT>'. Next, you instruct <B CLASS="COMMAND"
+     >jigdo-file</B> to create the jigdo and template files for your
+     modified image, using the command <A NAME="AEN588"><BLOCKQUOTE
+     CLASS="BLOCKQUOTE">
+     <P><B CLASS="COMMAND">jigdo-file make-template --image=myversion.iso
+      /mnt/cdrom/ myfiles// --label My=myfiles/ --uri
+      My=http://my.homepage.net/</B></P></BLOCKQUOTE> while `<TT
+     CLASS="FILENAME">official.iso</TT>' is mounted under `<TT
+     CLASS="FILENAME">/mnt/cdrom</TT>'. Now you need to create a `<TT
+     CLASS="FILENAME">.jigdo</TT>' file that references the same files as
+     the original image, but provides additional links for any files <B
+     CLASS="COMMAND">jigdo-file</B> picked up from the `<TT
+     CLASS="FILENAME">myfiles</TT>' directory. This is most easily done by
+     copying over the relevant sections from the jigdo file for `<TT
+     CLASS="FILENAME">official.iso</TT>' to your own version's jigdo
+     file.</P>
+    <P>Finally, after also adding a correct link for the template file, you
+     can upload the `<TT CLASS="FILENAME">.jigdo</TT>' file, the `<TT
+     CLASS="FILENAME">.template</TT>' file and also the files in `<TT
+     CLASS="FILENAME">myfiles</TT>' to `http://my.homepage.net/'. Thus, for
+     people to download your modified image, you do <SPAN CLASS="emphasis"
+     ><I CLASS="EMPHASIS">not</I></SPAN> need to upload the complete image
+     contents to your web space, but only the changes you made!</P>
+    <P>(In case you only made very few changes, you could also omit the
+     `myfiles' parameter in the command above, then all your changes end up
+     in the new template file.)</P></DIV>
+   <DIV CLASS="REFSECT2"><A NAME="AEN603"></A>
+    <H3>Combining many jigdo-managed images into one</H3>
+    <P>It is also no problem to combine data from several sources that use
+     jigdo. For example, if of five different and unrelated servers each
+     one distributes a different CD image via jigdo, you can create a
+     customized DVD image that contains the data from all these CDs. When
+     people use <B CLASS="COMMAND">jigdo</B> to download your image, the
+     individual files on the DVD are fetched from the same sources as the
+     original CDs.</P>
+    <P>Consequently, even though you will be distributing a 3.2GB file via
+     your web space, the actual amount of data that is stored on your
+     server will only be in the order of several MBs.</P></DIV></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN608"></A>
+   <H2>BUGS</H2>
+   <P>For certain contents of one of the input files, most notably a
+    sequence of zero bytes longer than <TT CLASS="OPTION">--min-length</TT
+    > at the start of the file, <B CLASS="COMMAND">jigdo-file
+    make-template</B> may fail to find the file in the image.
+    Unfortunately, this restriction cannot be avoided because the program
+    could become very slow otherwise. <B CLASS="COMMAND">jigdo-file</B> may
+    also fail to find the file that <SPAN CLASS="emphasis"><I
+    CLASS="EMPHASIS">follows</I></SPAN> an all-zeroes file in the image. To
+    avoid this, exclude the all-zeroes file from <TT CLASS="REPLACEABLE"
+    ><I>FILES</I></TT> - this means that its data will end up in the
+    template data, but an all-zeroes file can be compressed very well.</P>
+   <P>In fact, not only all-zeroes files trigger this behaviour, but also
+    any files which contain at their start a long sequence of short
+    identical strings. For example, both a file containing only `<TT
+    CLASS="LITERAL">a</TT>' characters and one containing `<TT
+    CLASS="LITERAL">abcabcabcabc</TT>...' are problematic.</P></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN619"></A>
+   <H2>SEE ALSO</H2>
+   <P> <SPAN CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE">jigdo</SPAN
+    >(1)</SPAN> (NOT YET IMPLEMENTED), <SPAN CLASS="CITEREFENTRY"><SPAN
+    CLASS="REFENTRYTITLE">split</SPAN>(1)</SPAN> (or `<B CLASS="COMMAND"
+    >info split</B>'), <SPAN CLASS="CITEREFENTRY"><SPAN
+    CLASS="REFENTRYTITLE">find</SPAN>(1)</SPAN> (or `<B CLASS="COMMAND"
+    >info find</B>'), <SPAN CLASS="CITEREFENTRY"><SPAN
+    CLASS="REFENTRYTITLE">mkisofs</SPAN>(1)</SPAN>, <SPAN
+    CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE">md5sum</SPAN
+    >(1)</SPAN> </P></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN639"></A>
+   <H2>AUTHOR</H2>
+   <P><A HREF="http://atterer.net/jigdo/" TARGET="_top">Jigsaw Download</A
+    > was written by Richard Atterer <TT CLASS="EMAIL">&#60;<A
+    HREF="mailto:jigdo@atterer.net">jigdo@atterer.net</A>&#62;</TT>, to
+    make downloading of CD ROM images for the Debian GNU/Linux distribution
+    more convenient.</P></DIV>
+ </BODY>
+</HTML>
diff --git a/doc/jigdo-file.sgml b/doc/jigdo-file.sgml
new file mode 100644 (file)
index 0000000..2a3bc0a
--- /dev/null
@@ -0,0 +1,1177 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<refentry lang="en">
+  <refentryinfo>
+    <address>richard@atterer.net</address>
+    <author>
+      <firstname>Richard</firstname><surname>Atterer</surname>
+    </author>
+    <copyright>
+      <year>2001-2002</year><holder>Richard Atterer</holder>
+    </copyright>
+    <date>Jan 24, 2002</date>
+  </refentryinfo>
+  <refmeta>
+    <refentrytitle>jigdo-file</refentrytitle>
+    <manvolnum>1</manvolnum>
+  </refmeta>
+  <refnamediv>
+    <refname>jigdo-file</refname>
+    <refpurpose>Prepare files for Jigsaw Download (distribution of
+      huge files, e.g. CD images).</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>jigdo-file</command>
+      <arg choice="req">
+        <replaceable> COMMAND</replaceable>
+      </arg>
+      <arg><option>--image=<replaceable
+        >cdrom.iso</replaceable></option></arg>
+      <arg><option>--jigdo=<replaceable
+        >cdrom.jigdo</replaceable></option></arg>
+      <arg><option>--template=<replaceable
+        >cdrom.template</replaceable></option></arg>
+      <arg><option>--force</option></arg>
+      <arg>MORE OPTIONS</arg>
+      <group>
+        <arg rep="repeat"><replaceable>FILES</replaceable></arg>
+        <arg><option>--files-from=<replaceable
+          >f</replaceable></option></arg>
+      </group>
+      <sbr>
+        <arg choice="plain">Common COMMANDs: make-template,
+        make-image, verify</arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>DESCRIPTION</title>
+
+    <para>Jigsaw Download, or short jigdo, is a scheme developed
+    primarily to make it easy to distribute huge filesystem images
+    (e.g. CD (ISO9660) or DVD (UDF) images) over the internet, but it
+    could also be used for other data which is awkward to handle due
+    to its size, like audio/video files or large software
+    packages.</para>
+
+    <para>jigdo tries to ensure that the large file (always called
+    <firstterm>image</firstterm> from now on) is downloaded in small
+    parts which can be stored on different servers. People who want to
+    download the image do so by telling the <citerefentry>
+        <refentrytitle>jigdo</refentrytitle><manvolnum>1</manvolnum>
+    </citerefentry> <emphasis>(NOT IMPLEMENTED YET)</emphasis>
+    download tool to process one `<filename>.jigdo</filename>' file;
+    using it, <command>jigdo</command> downloads the parts and
+    reassembles the image. <command>jigdo-file</command> is used to
+    prepare the files for download.</para>
+
+    <para>What makes jigdo special is that the parts that are used to
+    reconstruct the image can have any size and content - they only
+    need to be contained in a contiguous region anywhere in the
+    image.</para>
+
+    <para>For example, if you wish to distribute an ISO9660 image
+    which contains a snapshot of an FTP server, you can instruct
+    <command>jigdo-file</command> to prepare the download data in such
+    a way that when people use <command>jigdo</command> to download
+    the image, <command>jigdo</command> actually fetches the
+    individual files from the FTP server and assembles them into an
+    exact copy of your image - during the download! (If the image is
+    not a filesystem dump, you can use
+    <citerefentry>
+        <refentrytitle>split</refentrytitle><manvolnum>1</manvolnum>
+    </citerefentry> to create the small parts that the image will be
+    reassembled from.)</para>
+
+    <para>You are completely free to choose where the individual parts
+    of the image are stored: They may be in entirely different
+    directories on different servers (e.g. because of
+    storage/bandwidth constraints), but this is invisible to the
+    people downloading your image. The information about available
+    servers only needs to be added to the
+    `<filename>.jigdo</filename>' file by you before distributing
+    it.</para>
+
+    <para>See later sections for a more detailed description of how
+    jigdo works, and also to get a better idea of what applications it
+    supports (such as customized versions of images released by
+    others).</para>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>OPTIONS</title>
+
+    <para>Many options are specific to a particular
+    <replaceable>COMMAND</replaceable>; the ones below are general or
+    used by several commands. Further options are listed below with
+    the individual commands. All options are silently ignored if they
+    are not applicable to the current command. For any
+    <replaceable>BYTES</replaceable> parameters to options, you can
+    append one of the letters `k', `M' or `G' to the amount you
+    specify, to indicate kilobytes, megabytes or gigabytes.</para>
+
+    <variablelist>
+
+      <varlistentry>
+        <term><option>-h</option> <option>--help</option></term>
+        <listitem>
+          <para>Output short summary of commands and options.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-H</option> <option>--help-all</option></term>
+        <listitem>
+          <para>Output complete summary of commands and options.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-v</option> <option>--version</option></term>
+        <listitem>
+          <para>Output program version.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-i</option> <option>--image=<replaceable
+          >cdrom.iso</replaceable></option></term>
+        <listitem>
+          <para>Specify location of the file containing the image. The
+          image is the large file that you want to distribute.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-j</option> <option>--jigdo=<replaceable
+          >cdrom.jigdo</replaceable></option></term>
+        <listitem>
+          <para>Specify location of the Jigsaw Download description
+          file. The jigdo file is a human-readable file generated by
+          <command>jigdo-file</command>, to which you add information
+          about all the servers you are going to upload the files to.
+          <command>jigdo</command> will download this file as the
+          first step of retrieving the image.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-t</option> <option>--template=<replaceable
+          >cdrom.template</replaceable></option></term>
+        <listitem>
+          <para>Specify location of the image `template' file. The
+          template file is a binary file generated by
+          <command>jigdo-file</command>, it contains information on
+          how to reassemble the image and also (in compressed form)
+          all the data from the image which was not found in any of
+          the parts.</para>
+
+          <para>Depending on the command, each of these three files is
+          used sometimes for input, sometimes for output. If the file
+          is to be used for output for a particular command and the
+          output file already exists, <command>jigdo-file</command>
+          exits with an error, unless <option>--force</option> is
+          present.</para>
+
+          <para>In most cases, you will only need to specify one out
+          of <option>-i</option> <option>-j</option>
+          <option>-t</option>, because any missing filenames will be
+          deduced from the one you specify. This is done by first
+          stripping any extension from the supplied name and then
+          appending nothing (if deducing <option>--image</option>),
+          `<filename>.jigdo</filename>' or
+          `<filename>.template</filename>'.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-r</option> <option
+          >--report=default|noprogress|quiet|grep</option></term>
+        <listitem>
+          <para>Control how verbose the program is, and what format
+          the output has: <option>noprogress</option> is the same as
+          <option>default</option> except that no `<computeroutput>x%
+          done</computeroutput>' progress messages are printed.
+          <option>quiet</option> restricts the output to what is
+          absolutely necessary, mostly error messages.
+          <option>grep</option> is only different from
+          <option>default</option> for the
+          <command>make-template</command> command: It enables output
+          in a simple `<replaceable>&lt;offset&gt;
+          &lt;file&gt;</replaceable>' format which is useful when
+          searching for binary files in other binary files.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-f</option> <option>--force</option></term>
+        <listitem>
+          <para>Overwrite existent output files without
+          complaining.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--no-force</option></term>
+        <listitem>
+          <para><emphasis>This is the default.</emphasis> Refuse to
+          overwrite existent output files.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-c</option> <option>--cache=<replaceable
+          >jigdo-cache.db</replaceable></option></term>
+        <listitem>
+          <para><command>jigdo-file</command> usually needs to read
+          the entire contents of all the
+          <replaceable>FILES</replaceable> you specify. If you use it
+          repeatedly (e.g. because you make a new CD image available
+          daily), caching the file information will increase the
+          program's speed significantly. The cache file is
+          automatically created if it is not yet present. Data is
+          usually both read from and written to it.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--no-cache</option></term>
+        <listitem>
+          <para><emphasis>This is the default.</emphasis> Do not use a
+          cache.</para>
+        </listitem>
+      </varlistentry>
+
+
+      <varlistentry>
+        <term><option>--cache-expiry=<replaceable
+          >SECONDS</replaceable></option></term>
+        <listitem>
+          <para>Set maximum age of cache entries. Any entries older
+          than this will be removed from the cache. The default is 30
+          days. You can append one of the letters `h', `d', `w', `m',
+          `y' to denote hours, days, weeks, months or years,
+          respectively. A value of `0' or `off' disables expiry, so
+          that all entries will stay in the cache forever. See the
+          section `CACHE FILES' below for more information.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--readbuffer=<replaceable
+          >BYTES</replaceable></option></term>
+        <listitem>
+          <para>Set size of internal buffers. The default is 128k - if
+          you have a fast disc, increasing this value may make
+          <command>jigdo-file</command> faster, but in general,
+          changing it is not necessary.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--md5-block-size=<replaceable
+          >BYTES</replaceable></option></term>
+        <listitem>
+          <para><emphasis>Uninteresting internal parameter.</emphasis>
+          Set size of blocks into which files are subdivided. The
+          default is 128k. If you change it, any cache file will have
+          to be regenerated. Internally, <command>jigdo-file</command>
+          may choose to use a slightly larger or smaller value.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>-T</option> <option>--files-from=<replaceable
+          >file</replaceable></option></term>
+        <listitem>
+          <para>Read file and directory names from the specified file.
+          If <replaceable>file</replaceable> is `-', read names from
+          standard input. Each line in the file is taken as a name, so
+          the names may contain spaces, but not newline characters. An
+          empty line causes <command>jigdo-file</command> to stop
+          reading from the file.</para>
+
+          <para><citerefentry>
+          <refentrytitle>find</refentrytitle><manvolnum>1</manvolnum>
+          </citerefentry> is a powerful tool for generating file
+          lists, but make sure to use `<command>find -type
+          f</command>' if possible - otherwise, if you instruct
+          <command>find</command> to output both a filename and a
+          symlink to that filename, <command>jigdo-file</command> will
+          read the file contents twice.</para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><replaceable>FILES</replaceable></term>
+        <listitem>
+          <para>Names of files or directories to use as input. These
+          are the parts that are contained in the image. In case one
+          of the names is a directory, the program recursively scans
+          the directory and adds all files contained in it. While
+          doing this, it follows symbolic links, but avoids symlink
+          loops.</para>
+
+          <para>If one of the filenames starts with the character `-',
+          you must precede the list of files with `--'. A value of `-'
+          has <emphasis>no</emphasis> special meaning in this list, it
+          stands for a file whose name is a single hyphen.</para>
+        </listitem>
+      </varlistentry>
+
+    </variablelist>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>COMMANDS</title>
+
+    <para>The command name is the first non-option argument passed to
+    <command>jigdo-file</command>. Most commands have short
+    abbreviations as well as long names. <emphasis>The short command
+    names should not be used in scripts - there may be incompatible
+    changes to them in the future!</emphasis></para>
+
+    <refsect2>
+      <title><command>make-template</command>, <command>mt</command></title>
+
+      <para>Reads <replaceable>image</replaceable> and
+      <replaceable>FILES</replaceable>, creates
+      `<filename>.jigdo</filename>' and
+      `<filename>.template</filename>'. This is the main functionality
+      of <command>jigdo-file</command>.</para>
+
+      <para>It is possible to specify both <option>--image=-</option>
+      and <option>--files-from=-</option>. In this case, first the
+      list of files is read from standard input until an empty line is
+      encountered. Everything following it is assumed to be the image
+      data. This can be useful if you use <citerefentry>
+      <refentrytitle>mkisofs</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry> or similar programs that can output the complete
+      image on their standard output, because there is no need to
+      store the image on disc temporarily.</para>
+
+      <para>If a <replaceable>FILES</replaceable> argument contains
+      the characters `<literal>//</literal>' (Unix) or
+      `<literal>\.\</literal>' (Windows), this has special meaning. In
+      the final jigdo file that users will download, each of the parts
+      is referenced in the `[Parts]' section with a URI of the form
+      `Label:some/filename'. The `[Servers]' section gives a mapping
+      of labels to servers on the internet, with lines like
+      `Label=http://myserver.org/jigdofiles/'. Using this information,
+      <command>jigdo</command> will create the final download URI for
+      the part, `http://myserver.org/jigdofiles/some/filename'.
+      Specifying `<literal>//</literal>' (or `<literal>\.\</literal>')
+      in a file or directory name serves to `cut off' the names at the
+      right directory level. For example, if the Unix path of one of
+      your <replaceable>FILES</replaceable> is `/path/some/filename',
+      you can tell <command>jigdo-file</command> to cut off after the
+      `/path' by passing it the argument `/path//some/filename', or
+      `/path//' if you want the whole directory scanned. The path
+      names need not be absolute; `somedirectory//' is also
+      possible.</para>
+
+      <variablelist>
+        <varlistentry>
+          <term><option>--label <replaceable
+            >Label=/path</replaceable></option></term>
+          <listitem>
+            <para>Specify a name to use as the label name for a path
+            on disc. (Influences the output jigdo file.) If you used
+            `<literal>//</literal>' in the
+            <replaceable>FILES</replaceable> arguments as described
+            above, <command>jigdo-file</command> will by default pick
+            label names automatically (`A', `B' etc.). With this
+            option, you can give labels more meaningful names. Note
+            that the label name will only be used if one or more
+            <replaceable>FILES</replaceable> begin with
+            `/path//'.</para>
+
+            <para>Try to use label names that start with uppercase
+            characters, to disambiguate them clearly from protocol
+            names like `http', `ftp'.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--uri <replaceable
+            >Label=http://some.server.org/</replaceable></option></term>
+          <listitem>
+            <para>By default, using <option>--label</option> as
+            described above will cause lines of the form
+            `Label=file:/path/' to be written to the `[Servers]'
+            section of the output jigdo file. If you want to override
+            the `file:' URI so that the line reads
+            `Label=http://some.server.org/', you can do so by
+            specifying <option>--uri</option> along with
+            <option>--label</option>.</para>
+
+            <para>Note that <option>--uri</option> only has an effect
+            if the corresponding <option>--label</option> with the
+            same label name is present, and gets used by the
+            program.</para>
+
+            <para>The supplied value is not quoted by the program; if
+            it contains characters such as space or any of the
+            characters <literal>#"'\</literal> then you must quote it.
+            (Under Unix, you may need to quote the value twice to also
+            protect it from the shell, e.g. <literal>\\\\</literal> or
+            <literal>'\\'</literal> to get a single backslash in the
+            URI.)</para>
+
+            <para>Users of the Windows version may notice that the
+            `<literal>\</literal>' directory separators are converted
+            into `<literal>/</literal>' in the `file:' URIs that are
+            generated by default. This is done to increase
+            cross-platform compatibility of `file:' - the
+            <command>print-missing</command> command of the Windows
+            version will automatically re-convert the characters when
+            it prints the URIs. In case you supply your own `file:'
+            URIs under Windows using <option>--uri</option>, you must
+            also exchange `<literal>/</literal>' and
+            `<literal>\</literal>'.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>-0</option> to <option>-9</option></term>
+          <listitem>
+            <para>Set amount of compression in the output template
+            file, from <option>-0</option> (no compression) to
+            <option>-9</option> (maximum compression). The default is
+            <option>-9</option>, which can make the template
+            generation quite slow. The compression algorithm used is
+            the same as for <citerefentry>
+            <refentrytitle>gzip</refentrytitle><manvolnum>1</manvolnum>
+            </citerefentry>.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--min-length=<replaceable
+            >BYTES</replaceable></option></term>
+          <listitem>
+            <para>Set minimum length of a part for
+            <command>jigdo-file</command> to look for it in the image.
+            The default is 4k. Parts smaller than this will never be
+            found in the image, so their data will be included in the
+            template file. The search algorithm used requires such a
+            minimum length, otherwise template generation could become
+            extremely slow. If you know for sure that all your
+            <replaceable>FILES</replaceable> are larger than a certain
+            amount, you can increase <command>jigdo-file</command>'s
+            speed slightly by specifying the amount with this option.
+            There is a hard-wired absolute minimum of 1k - anything
+            lower will silently be set to 1k.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--image-section</option></term>
+          <listitem>
+            <para><emphasis>This is the default.</emphasis> Causes
+            <command>jigdo-file</command> to include an `[Image]'
+            section in the `<filename>.jigdo</filename>' file.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--no-image-section</option></term>
+          <listitem>
+            <para>Do <emphasis>not</emphasis> include an `[Image]'
+            section in the `<filename>.jigdo</filename>' file. You
+            need to add one yourself if you use this option.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--servers-section</option></term>
+          <listitem>
+            <para><emphasis>This is the default.</emphasis> Causes
+            <command>jigdo-file</command> to append a `[Servers]'
+            section at the end of the `<filename>.jigdo</filename>'
+            file. This default section uses `file:' URIs, which allows
+            for immediate reassembly of the image from the local
+            filesystem, and is also useful if you want to edit the
+            file manually and replace the `file:' URIs with other
+            URIs.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--no-servers-section</option></term>
+          <listitem>
+            <para>Do <emphasis>not</emphasis> add a `[Servers]'
+            section at the end of the `<filename>.jigdo</filename>'
+            file. Useful e.g. if you are going to append the section
+            with a script.</para>
+          </listitem>
+        </varlistentry>
+      </variablelist>
+
+    </refsect2>
+    <!-- ----------------------------------------- -->
+    <refsect2>
+      <title><command>make-image</command>, <command>mi</command></title>
+
+      <para>Reads `<filename>.template</filename>' and
+      <replaceable>FILES</replaceable>, creates
+      <replaceable>image</replaceable> (or
+      `<filename>imagename.tmp</filename>'). Provides a rudimentary
+      way of reassembling images - <command>jigdo</command> is usually
+      better suited for this task. However, in contrast to
+      <command>jigdo</command>, no `<filename>.jigdo</filename>' file
+      is required.</para>
+
+      <para>If the image is to be written to a file (and not to
+      standard output), it is possible to create the image in several
+      steps, with several invocations of `<command>jigdo-file
+      make-image</command>', as follows: You first invoke
+      <command>jigdo-file</command>, specifying as many files as are
+      available at this time. The program scans the files, and those
+      that are contained in the image are copied to a temporary file,
+      whose name is formed by appending `<filename>.tmp</filename>' to
+      the image filename.</para>
+
+      <para>For all further files which could be parts of the image,
+      you repeat this process. As soon as all parts are present, the
+      temporary file will be truncated slightly (to delete some
+      administrative data that <command>jigdo-file</command> appends
+      at the end) and renamed to the final image name. The possibility
+      of reassembling the image in several steps is especially useful
+      for gathering files from removable media, e.g. several older
+      CDs.</para>
+
+      <para>Scripts using <command>make-image</command> can detect
+      whether image creation is complete by checking the exit status:
+      0 signals successful creation, whereas 1 means that more files
+      need to be supplied. Other errors result in an exit status of 2
+      (`recoverable', e.g. file not found) or 3 (non-recoverable, e.g.
+      write error).</para>
+
+      <variablelist>
+        <varlistentry>
+          <term><option>--check-files</option></term>
+          <listitem>
+            <para><emphasis>This is the default.</emphasis> Whenever
+            any part is copied to the image, re-check its checksum
+            against the checksum stored in the template. It is
+            recommended that you leave this switched on, even if it
+            slows down image creation a bit.</para>
+          </listitem>
+        </varlistentry>
+
+        <varlistentry>
+          <term><option>--no-check-files</option></term>
+          <listitem>
+            <para>Do not check files' checksums when copying them to
+            the image. This can be safely used when no cache file is
+            used (which means that files will be written to the image
+            immediately after being scanned) or the whole image is
+            checked later with the <command>verify</command>
+            command.</para>
+          </listitem>
+        </varlistentry>
+      </variablelist>
+
+    </refsect2>
+    <!-- ----------------------------------------- -->
+    <refsect2>
+      <title><command>print-missing</command>, <command>pm</command></title>
+
+      <para>Reads `<filename>.jigdo</filename>',
+      `<filename>.template</filename>' and (if present)
+      `<filename>imagename.tmp</filename>', outputs a list of URIs
+      still needed to completely reassemble the image.</para>
+
+      <para>Together with the <command>make-image</command> command,
+      this provides most of the functionality of
+      <command>jigdo</command> on the command line.</para>
+
+      <para>For each part that is not yet present in the temporary
+      image file, the file checksum is looked up in the `[Parts]'
+      section of the jigdo file. Any label in the corresponding entry
+      is then expanded according to the label definitions in the
+      `[Servers]' section and printed on standard output.
+      <command>jigdo</command> allows you to specify several
+      alternative locations for each label in this section, but
+      <command>print-missing</command> will only output the first one
+      for each missing part.</para>
+
+      <para>If the checksum cannot be found in the `[Parts]' section
+      (this Should Not Happen unless you deleted that section), a
+      lookup is instead made for
+      `MD5Sum:<replaceable>&lt;checksum&gt;</replaceable>', just like
+      with <command>jigdo</command>. (Thus, if you want to get rid of
+      the `[Parts]' section, you can do so if you rename each part to
+      its own checksum.)</para>
+
+      <variablelist>
+        <varlistentry>
+          <term><option>--uri <replaceable
+            >Label=http://some.server.org/</replaceable></option></term>
+          <listitem>
+            <para>Override the entries in the
+            `<filename>.jigdo</filename>' file for any label with a
+            URI of your choice. With the example above, a `[Parts]'
+            entry of `Label:some/filename' will cause the line
+            `http://some.server.org/some/filename' to be
+            printed.</para>
+
+            <para>The supplied value is not quoted by the program; if
+            it contains characters such as space or any of the
+            characters <literal>#"'\</literal> then you must quote it.
+            (Under Unix, you may need to quote the value twice to also
+            protect it from the shell, e.g. <literal>\\\\</literal> or
+            <literal>'\\'</literal> to get a single backslash in the
+            URI.)</para>
+          </listitem>
+        </varlistentry>
+      </variablelist>
+
+    </refsect2>
+    <!-- ----------------------------------------- -->
+    <refsect2>
+      <title><command>print-missing-all</command>,
+      <command>pma</command></title>
+
+      <para>Just like <command>print-missing</command>, this command
+      outputs a list of URIs still needed to completely reassemble the
+      image. However, <emphasis>all</emphasis> alternative download
+      locations are printed instead of just one. In the output, the
+      URIs for a file are separated from other files' URIs with blank
+      lines. The <option>--uri</option> option has the same effect as
+      for <command>print-missing</command>.</para>
+
+    </refsect2>
+    <!-- ----------------------------------------- -->
+    <refsect2>
+      <title><command>verify</command>, <command>ver</command></title>
+
+      <para>Reads <replaceable>image</replaceable> (presumably
+      generated with <command>make-image</command>) and
+      `<filename>.template</filename>', checks for correct checksum of
+      image.</para>
+
+      <para>The template data does not only contain checksums of the
+      individual parts, but also of the image as a whole.
+      <command>make-image</command> already performs a number of
+      internal checks, but if you like, you can additionally check the
+      image with this command.</para>
+
+    </refsect2>
+    <!-- ----------------------------------------- -->
+    <refsect2>
+      <title><command>scan</command>, <command>sc</command></title>
+
+      <para>Reads all the <replaceable>FILES</replaceable> and enters
+      them into the cache, unless they are already cached. The
+      <option>--cache</option> option must be present for this
+      command.</para>
+
+    </refsect2>
+    <!-- ----------------------------------------- -->
+    <refsect2>
+      <title><command>md5sum</command>, <command>md5</command></title>
+
+      <para>Reads all the <replaceable>FILES</replaceable> and prints
+      out MD5 checksums of their contents. This command is quite
+      similar to <citerefentry>
+        <refentrytitle>md5sum</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>, except that the checksum is output in the
+      Base64-like encoding which is also used elsewhere by
+      <command>jigdo-file</command>.</para>
+
+      <para>The <replaceable>FILES</replaceable> arguments are
+      processed in the same way as with the other commands, which
+      means that recursion automatically takes place for any arguments
+      that are directories, and that symbolic links are not listed
+      except when the file(s) they point to are not reachable
+      directly.</para>
+
+      <para>In the checksum list printed on standard output, only the
+      part of the filename following any `<literal>//</literal>' (or
+      `<literal>\.\</literal>' on Windows) is printed. Any
+      <option>--cache</option> will be used for querying files' MD5
+      checksums and/or writing the checksums of scanned files.</para>
+
+    </refsect2>
+    <!-- ----------------------------------------- -->
+    <refsect2>
+      <title><command>list-template</command>, <command>ls</command></title>
+
+      <para>Reads a `<filename>.template</filename>' file and outputs
+      low-level information about the image and all parts contained in
+      it, including offset, length and checksum.</para>
+
+      <para>You can also use this command with temporary image files
+      (by specifying something like
+      <option>--template=imagename.tmp</option>) - in that case, the
+      output also distinguishes between parts that have been written
+      to the image and parts that haven't.</para>
+
+      <para>The following different types of lines can be output.
+      `have-file' only occurs for `<filename>.tmp</filename>' files,
+      indicating a file that has already been successfully written to
+      the temporary file:</para>
+
+      <screen
+>in-template  <replaceable>offset-in-image  length</replaceable>
+need-file    <replaceable>offset-in-image  length  file-md5sum  filestart-rsyncsum</replaceable>
+have-file    <replaceable>offset-in-image  length  file-md5sum  filestart-rsyncsum</replaceable>
+image-info   <replaceable>image-length  image-md5sum  rsyncsum-size</replaceable>
+</screen>
+
+    </refsect2>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>DETAILS</title>
+
+    <para>Jigsaw Download was created with the format of ISO9660 CD
+    images in mind - however, the following also applies to many other
+    filesystem formats, as well as to `tar' archives and uncompressed
+    `zip' archives. A CD image contains both information for
+    organizing the filesystem (header with disc name etc., ISO9660
+    directory data, data of extensions such as Joliet or RockRidge,
+    zero padding) and the files contained on the CD. An important
+    property that jigdo relies on is that each file is stored in one
+    contiguous section of the image; it is not split into two or more
+    parts.</para>
+
+    <para>When <command>jigdo-file</command> is given a number of
+    files that might be contained in an image, it detects whether any
+    of the files are present using a `rolling checksum' inspired by
+    the one used by <citerefentry><refentrytitle>rsync</refentrytitle
+    ><manvolnum>1</manvolnum></citerefentry>. The resulting data is
+    written to the `<filename>.template</filename>' file: If a section
+    of the image could not be matched (e.g. it was directory
+    information), the data is compressed and written directly to the
+    template. However, if a matching file was found, its data is
+    omitted from the template. Instead, only a reference (an MD5
+    checksum of the file) is inserted in the template.</para>
+
+    <para>Note that the template data only contains binary data, it
+    does not contain any filenames or URIs, since it cannot be easily
+    edited in case any of these values need to be changed. All that
+    information is stored in the `<filename>.jigdo</filename>' file, a
+    text file to which you can add URLs for your server(s). The jigdo
+    file provides a mapping for each MD5 checksum to one or more
+    alternative download locations for the corresponding part. See the
+    section `FORMAT OF .JIGDO FILES' below for details.</para>
+
+    <para>Apart from the mapping of MD5 sums to URIs, the jigdo file
+    also contains an URI pointing to a download location for the
+    template file. This way, the <command>jigdo</command> download
+    tool only needs to be given one URI (that of the
+    `<filename>.jigdo</filename>' file) to be able to download and
+    reassemble the complete image.</para>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>FORMAT OF .JIGDO FILES</title>
+
+    <para><emphasis>WORK IN PROGRESS... at the moment, minor
+    modifications to the format are still possible.</emphasis></para>
+
+    <para>The overall format of `<filename>.jigdo</filename>' files
+    follows that of `<filename>.ini</filename>' files, as also used by
+    the Gnome and KDE projects for some data. The file is organized
+    into sections, each of which is preceded by a line reading
+    `[Sectionname]'. Within each section, lines have the form
+    `Label=Value'. Such lines are also called `entries' below.</para>
+
+    <para>Comments are introduced with the `<literal>#</literal>'
+    character and extend to the end of the line. Whitespace is ignored
+    at line start and end as well as to the left and right of section
+    names and the `<literal>=</literal>' in entries. Furthermore, the
+    jigdo utilities split up the text of the entry value (i.e. the
+    part after the `<literal>=</literal>') into whitespace-separated
+    words, much like the Unix shell. Single <literal>''</literal> and
+    double <literal>""</literal> quotes can be used to prevent that
+    e.g. URIs containing whitespace are split apart. Similarly,
+    characters with special meaning (the characters
+    <literal>'"#\</literal> and space/tab) must be quoted with
+    <literal>\</literal> to appear in the value. As with the shell,
+    there is a difference between <literal>''</literal> and
+    <literal>""</literal>: Within <literal>''</literal>, the
+    characters <literal>"#\</literal> and whitespace lose their
+    special meaning, whereas within <literal>""</literal>, only the
+    characters <literal>'#</literal> and whitespace lose their special
+    meaning - in other words, backslash escapes still work inside
+    <literal>""</literal>, but not <literal>''</literal>.</para>
+
+    <para>Below is a description of the individual section names used
+    by jigdo.</para>
+
+    <!-- >1 images per .jigdo -->
+
+    <refsect2>
+      <title>Jigdo section</title>
+
+      <screen
+>[Jigdo]
+Version=1.0
+Generator=jigdo-file/0.5.3
+Info=<replaceable>long description</replaceable></screen>
+
+      <para>Information about the version of the jigdo file format
+      used, and the program that generated it. The `Info' label can
+      contain a description of the contents of the jigdo file.</para>
+
+      <para>There is one such section per
+      `<filename>.jigdo</filename>' file.</para>
+    </refsect2>
+
+    <refsect2>
+      <title>Image section</title>
+
+      <screen
+>[Image]
+Filename=<replaceable>"filename for saving on user's disc"</replaceable>
+Template=<replaceable>"URI where to fetch template file"</replaceable>
+Selected=yes|no
+ShortInfo=<replaceable>single-line description, for displaying menu of images</replaceable>
+Info=<replaceable>long description</replaceable></screen>
+
+      <para>The `Selected' label indicates whether the image is
+      selected for download by default when <command>jigdo</command>
+      is run for this file.</para>
+
+      <para>Instead of an URI, the value for the `Template' entry can
+      also be a string of the form `<replaceable>Label</replaceable
+      >:<replaceable>pathname</replaceable>', as described
+      below.</para>
+
+      <para>This section may occur multiple times, there is one such
+      section for each image in the jigdo file.</para>
+    </refsect2>
+
+    <refsect2>
+      <title>Parts section</title>
+
+      <screen
+>[Parts]
+xJNkjrq8NYMraeGavUpllw=LabelA:part0
+GoTResP2EC6Lb_2wTsqOoQ=LabelA:part1
+kyfebwu6clbYqqWUdFIyaw=LabelB:some/path/part2
+-J9UAimo0Bqg9c0oOXI1mQ=http://some.where.com/part3</screen>
+
+      <para>All lines in the section, which provides the mapping from
+      MD5 checksums to URIs, have the same format: On the left side of
+      the `<literal>=</literal>' the checksum (encoded with a
+      Base64-like encoding) is given, and on the right a string
+      corresponding to the part with this checksum; either a complete
+      URI or a string of the form `<replaceable>Label</replaceable
+      >:<replaceable>pathname</replaceable>', which is expanded into
+      one or more URIs by looking up the definition(s) for the
+      <replaceable>Label</replaceable> in the `[Servers]'
+      section.</para>
+
+      <para>In case a particular MD5 checksum cannot be found in any
+      `[Parts]' section by <command>jigdo</command>, the program will
+      perform a lookup for `<literal>MD5Sum:</literal><replaceable
+      >&lt;checksum&gt;</replaceable>', e.g. for
+      `<literal>MD5Sum:xJNkjrq8NYMraeGavUpllw</literal>' if you
+      deleted the line for `part0' above.</para>
+
+      <para>A checksum appearing multiple times in this section
+      indicates alternative download locations for the part.</para>
+
+      <para>There may be any number of `[Parts]' sections in the file;
+      they are all considered when looking up MD5 checksums.</para>
+    </refsect2>
+
+    <refsect2>
+      <title>Servers section</title>
+
+      <screen
+>[Servers]
+LabelA=http://myserver.org/
+LabelA=ftp://mirror.myserver.org/
+LabelB=LabelC:subdirectory/
+LabelC=http://some.where.com/jigdo/</screen>
+
+      <para>All lines in the section, which provides the mapping from
+      server labels to server locations, have the same format: On the
+      left side of the `<literal>=</literal>' the label name is given,
+      and on the right the value to expand the label name to.</para>
+
+      <para>A label name appearing multiple times in this section
+      indicates alternative download locations for the parts that use
+      the label in the `[Parts]' section. This notation makes it very
+      easy to add mirrors to the jigdo file.</para>
+
+      <para>As shown by the example above, the label values may
+      themselves reference other labels. For example, the entry
+      `LabelB:some/path/part2' in the `[Parts]' section will expand to
+      `http://some.where.com/jigdo/subdirectory/some/path/part2'.
+      Loops in the label definitions result in undefined behaviour and
+      must be avoided.</para>
+
+      <para>There may be any number of `[Servers]' sections in the
+      file; they are all considered when looking up labels. Either of
+      `[Parts]' or `[Servers]', but not both, can be omitted from the
+      jigdo file.</para>
+    </refsect2>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>CACHE FILES</title>
+
+    <para>Any file specified with the <option>--cache</option> option
+    is used to store information about the
+    <replaceable>FILES</replaceable> presented to
+    <command>jigdo-file</command>. When querying the cache, a file is
+    considered unchanged (and the cached data is used) only if
+    filename, file size and last modification time (mtime) match
+    exactly. For the filename match, not the entire file name is used,
+    but only the part following any `<literal>//</literal>', so that
+    any changes to the part before the `<literal>//</literal>' will
+    not invalidate the cache.</para>
+
+    <para>Old cache entries are removed from the cache if they have
+    not been read from or written to for the amount of time specified
+    with <option>--cache-expiry</option>. Entries are
+    <emphasis>not</emphasis> immediately removed from the cache if the
+    file they refer to no longer exists - this makes it possible to
+    cache information about files on removable media.</para>
+
+    <para>Cache expiry only takes place <emphasis>after</emphasis>
+    <command>jigdo-file</command> has done its main work - if any old
+    entries are accessed before expiry takes place, they will be kept.
+    For example, if the program is run using the default expiry time
+    of 30 days, but accesses a cache file with entries generated 2
+    months ago, then entries in that cache <emphasis>will</emphasis>
+    be considered, and only those cache entries that were not needed
+    during the program run will be expired.</para>
+
+    <para>Due to a peculiarity of the underlying database library
+    (libdb3), cache files never shrink, they only grow. If a large
+    number of entries was expired from your cache file and you want it
+    to shrink, you can either just delete it (of course then
+    everything will have to be regenerated) or use the utilities
+    accompanying libdb3 to dump and restore the database, with a
+    command like `<command>db3_dump
+    <replaceable>old-cache.db</replaceable> | db3_load
+    <replaceable>new-cache.db</replaceable></command>'. <phrase
+    vendor="Debian">For Debian, these programs are supplied in the
+    package `libdb3-util'.</phrase></para>
+
+    <para>If a different <option>--md5-block-size</option> is
+    specified, the entire file needs to be re-read to update its cache
+    entry. If a different <option>--min-length</option> is specified,
+    only the first `md5-block-size' bytes of the file need to be
+    re-read.</para>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>EXAMPLES</title>
+
+    <refsect2>
+      <title>Preparing your CD image for distribution</title>
+
+      <para>You have created a CD image
+      `<filename>image.iso</filename>' from some of the files stored
+      in the directory `<filename>/home/ftp</filename>' on your
+      harddisc, which is also available online as `ftp://mysite.org'.
+      As you don't want to waste space by effectively hosting the same
+      data twice (once as files on the FTP server, once inside the
+      image), and you are fed up with users' downloads aborting after
+      200MB and their restarting the download dozens of times, you
+      decide to use jigdo. How do you prepare the image for
+      download?</para>
+
+      <para>In fact, only one command is necessary:
+
+        <blockquote><para><command>jigdo-file make-template
+        --image=image.iso --jigdo=/home/ftp/image.jigdo
+        --template=/home/ftp/image.template /home/ftp// --label
+        Mysite=/home/ftp --uri
+        Mysite=ftp://mysite.org/</command></para></blockquote>
+      </para>
+
+      <para>After editing the file
+      `<filename>/home/ftp/image.jigdo</filename>' to contain the
+      correct URI for the template, `ftp://mysite.org/image.template',
+      people can point <command>jigdo</command> at
+      `ftp://mysite.org/image.jigdo' to download your image.</para>
+
+      <para>Note that nothing prevents you from doing the same for an
+      FTP server that isn't administrated by you - in that case, you
+      only need to host the `<filename>.jigdo</filename>' and
+      `<filename>.template</filename>' files on your own
+      server/homepage.</para>
+    </refsect2>
+
+    <refsect2>
+      <title>Preparing an arbitrary large file for
+      distribution</title>
+
+      <para>We assume that you have a large file that is not a
+      filesystem, e.g. `<filename>movie.mpeg</filename>'. Because of
+      space problems, you want to distribute the data on two
+      servers.</para>
+
+      <para>In this case, the parts of the image need to be generated
+      artificially with the <command>split</command> command. For
+      example, to create chunks of 4MB each, use `<command>split -b 4m
+      movie.mpeg part</command>'. Copy the resulting files
+      `<filename>part<replaceable>XX</replaceable></filename>' into
+      two directories `<filename>1</filename>' and
+      `<filename>2</filename>' that you create, according to how you
+      want the files distributed between the servers. Next, create the
+      jigdo and template files with `<command>jigdo-file make-template
+      --image=movie.mpeg 1// 2//</command>'. You will need to edit the
+      `<filename>.jigdo</filename>' file and provide the right URIs
+      for the two servers that you are going to upload the
+      `<filename>part<replaceable>XX</replaceable></filename>' files
+      as well as the `<filename>.template</filename>' file to.</para>
+    </refsect2>
+
+    <refsect2>
+      <title>Customized versions of images</title>
+
+      <para>Because it is possible to assign a different URI for each
+      part of an image if necessary, jigdo is very flexible. Only one
+      example is the possibility of customized versions of images:
+      Suppose that someone is distributing a CD image, and that you
+      want to make a few small changes to it and redistribute your own
+      version. You download the `<filename>official.iso</filename>' CD
+      image with <command>jigdo</command>, write it to CD-R, make your
+      changes (say, adding files from the
+      `<filename>myfiles</filename>' directory on your harddisc) and
+      produce your own version, `<filename>myversion.iso</filename>'.
+      Next, you instruct <command>jigdo-file</command> to create the
+      jigdo and template files for your modified image, using the
+      command
+
+        <blockquote><para><command>jigdo-file make-template
+        --image=myversion.iso /mnt/cdrom/ myfiles// --label
+        My=myfiles/ --uri
+        My=http://my.homepage.net/</command></para></blockquote>
+
+      while `<filename>official.iso</filename>' is mounted under
+      `<filename>/mnt/cdrom</filename>'. Now you need to create a
+      `<filename>.jigdo</filename>' file that references the same
+      files as the original image, but provides additional links for
+      any files <command>jigdo-file</command> picked up from the
+      `<filename>myfiles</filename>' directory. This is most easily
+      done by copying over the relevant sections from the jigdo file
+      for `<filename>official.iso</filename>' to your own version's
+      jigdo file.</para>
+
+      <para>Finally, after also adding a correct link for the template
+      file, you can upload the `<filename>.jigdo</filename>' file, the
+      `<filename>.template</filename>' file and also the files in
+      `<filename>myfiles</filename>' to `http://my.homepage.net/'.
+      Thus, for people to download your modified image, you do
+      <emphasis>not</emphasis> need to upload the complete image
+      contents to your web space, but only the changes you
+      made!</para>
+
+      <para>(In case you only made very few changes, you could also
+      omit the `myfiles' parameter in the command above, then all your
+      changes end up in the new template file.)</para>
+    </refsect2>
+
+    <refsect2>
+      <title>Combining many jigdo-managed images into one</title>
+
+      <para>It is also no problem to combine data from several sources
+      that use jigdo. For example, if of five different and unrelated
+      servers each one distributes a different CD image via jigdo, you
+      can create a customized DVD image that contains the data from
+      all these CDs. When people use <command>jigdo</command> to
+      download your image, the individual files on the DVD are fetched
+      from the same sources as the original CDs.</para>
+
+      <para>Consequently, even though you will be distributing a 3.2GB
+      file via your web space, the actual amount of data that is
+      stored on your server will only be in the order of several
+      MBs.</para>
+    </refsect2>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>BUGS</title>
+
+    <para>For certain contents of one of the input files, most notably
+    a sequence of zero bytes longer than <option>--min-length</option>
+    at the start of the file, <command>jigdo-file
+    make-template</command> may fail to find the file in the image.
+    Unfortunately, this restriction cannot be avoided because the
+    program could become very slow otherwise.
+    <command>jigdo-file</command> may also fail to find the file that
+    <emphasis>follows</emphasis> an all-zeroes file in the image. To
+    avoid this, exclude the all-zeroes file from
+    <replaceable>FILES</replaceable> - this means that its data will
+    end up in the template data, but an all-zeroes file can be
+    compressed very well.</para>
+
+    <para>In fact, not only all-zeroes files trigger this behaviour,
+    but also any files which contain at their start a long sequence of
+    short identical strings. For example, both a file containing only
+    `<literal>a</literal>' characters and one containing
+    `<literal>abcabcabcabc</literal>...' are problematic.</para>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>SEE ALSO</title>
+
+    <para>
+      <citerefentry>
+        <refentrytitle>jigdo</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry> (NOT YET IMPLEMENTED),
+      <citerefentry>
+        <refentrytitle>split</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry> (or `<command>info split</command>'),
+      <citerefentry>
+        <refentrytitle>find</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry> (or `<command>info find</command>'),
+      <citerefentry>
+        <refentrytitle>mkisofs</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+        <refentrytitle>md5sum</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>
+    </para>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>AUTHOR</title>
+
+    <para><ulink url="http://atterer.net/jigdo/">Jigsaw
+    Download</ulink> was written by Richard Atterer
+    <email>jigdo@atterer.net</email>, to make downloading of CD ROM
+    images for the Debian GNU/Linux distribution more
+    convenient.</para>
+
+  </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/doc/jigdo-lite.1 b/doc/jigdo-lite.1
new file mode 100644 (file)
index 0000000..a468d50
--- /dev/null
@@ -0,0 +1,47 @@
+.\" This manpage has been automatically generated by docbook2man 
+.\" from a DocBook document. This tool can be found at:
+.\" <http://shell.ipoline.com/~elmert/comp/docbook2X/> 
+.\" Please send any bug reports, improvements, comments, patches, 
+.\" etc. to Steve Cheng <steve@ggi-project.org>.
+.TH "JIGDO-LITE" "1" "16 April 2002" "" ""
+.SH NAME
+jigdo-lite \- Download jigdo files using wget
+.SH SYNOPSIS
+
+\fBjigdo-lite\fR [ \fBURL\fR] 
+
+.SH "DESCRIPTION"
+.PP
+Given the URL of a `\fI.jigdo\fR' file,
+\fBjigdo-lite\fR downloads the large file (e.g. a CD
+image) that has been made available through that URL.
+\fBwget\fR(1) is used to download the necessary
+pieces of administrative data (contained in the
+`\fI.jigdo\fR' file and a corresponding
+`\fI.template\fR' file) as well as the many pieces
+that the large file is made from. The
+\fBjigdo-file\fR(1) utility is used to reconstruct the
+large file from the pieces.
+.PP
+`\fI.jigdo\fR' files that contain references
+to Debian mirrors are treated specially: When such a file is
+recognized, you are asked to select one mirror out of a list of
+all Debian mirrors.
+.PP
+If \fBURL\fR is not given on the command line,
+the script prompts for a location to download the
+`\fI.jigdo\fR' file from.
+.SH "SEE ALSO"
+.PP
+\fBjigdo-file\fR(1),
+\fBwget\fR(1) (or `\fBinfo wget\fR')
+.PP
+CD images for Debian GNU/Linux can be downloaded with
+jigdo <URL:http://www.debian.org/CD/jigdo-cd/>.
+.SH "AUTHOR"
+.PP
+Jigsaw
+Download <URL:http://atterer.net/jigdo/> was written by Richard Atterer
+<jigdo@atterer.net>, to make downloading of CD ROM
+images for the Debian GNU/Linux distribution more
+convenient.
diff --git a/doc/jigdo-lite.html b/doc/jigdo-lite.html
new file mode 100644 (file)
index 0000000..8f409c7
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+ <HEAD>
+  <TITLE>jigdo-lite</TITLE><META NAME="GENERATOR" CONTENT="Modular DocBook
+  HTML Stylesheet Version 1.76b+ "></HEAD>
+ <BODY CLASS="REFENTRY" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF"
+  VLINK="#840084" ALINK="#0000FF">
+  <H1><A NAME="AEN1">jigdo-lite</H1>
+  <DIV CLASS="REFNAMEDIV"><A NAME="AEN14"></A>
+   <H2>Name</H2>jigdo-lite&nbsp;--&nbsp;Download jigdo files using
+   wget</DIV>
+  <DIV CLASS="REFSYNOPSISDIV"><A NAME="AEN17">
+   <H2>Synopsis</H2>
+   <P><B CLASS="COMMAND">jigdo-lite</B> [URL]</P></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN21"></A>
+   <H2>DESCRIPTION</H2>
+   <P>Given the URL of a `<TT CLASS="FILENAME">.jigdo</TT>' file, <B
+    CLASS="COMMAND">jigdo-lite</B> downloads the large file (e.g. a CD
+    image) that has been made available through that URL. <SPAN
+    CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE">wget</SPAN>(1)</SPAN>
+    is used to download the necessary pieces of administrative data
+    (contained in the `<TT CLASS="FILENAME">.jigdo</TT>' file and a
+    corresponding `<TT CLASS="FILENAME">.template</TT>' file) as well as
+    the many pieces that the large file is made from. The <SPAN
+    CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE">jigdo-file</SPAN
+    >(1)</SPAN> utility is used to reconstruct the large file from the
+    pieces.</P>
+   <P>`<TT CLASS="FILENAME">.jigdo</TT>' files that contain references to
+    Debian mirrors are treated specially: When such a file is recognized,
+    you are asked to select one mirror out of a list of all Debian
+    mirrors.</P>
+   <P>If <TT CLASS="OPTION">URL</TT> is not given on the command line, the
+    script prompts for a location to download the `<TT CLASS="FILENAME"
+    >.jigdo</TT>' file from.</P></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN39"></A>
+   <H2>SEE ALSO</H2>
+   <P> <SPAN CLASS="CITEREFENTRY"><SPAN CLASS="REFENTRYTITLE"
+    >jigdo-file</SPAN>(1)</SPAN>, <SPAN CLASS="CITEREFENTRY"><SPAN
+    CLASS="REFENTRYTITLE">wget</SPAN>(1)</SPAN> (or `<B CLASS="COMMAND"
+    >info wget</B>') </P>
+   <P>CD images for Debian GNU/Linux can be <A
+    HREF="http://www.debian.org/CD/jigdo-cd/" TARGET="_top">downloaded with
+    jigdo</A>.</P></DIV>
+  <DIV CLASS="REFSECT1"><A NAME="AEN51"></A>
+   <H2>AUTHOR</H2>
+   <P><A HREF="http://atterer.net/jigdo/" TARGET="_top">Jigsaw Download</A
+    > was written by Richard Atterer <TT CLASS="EMAIL">&#60;<A
+    HREF="mailto:jigdo@atterer.net">jigdo@atterer.net</A>&#62;</TT>, to
+    make downloading of CD ROM images for the Debian GNU/Linux distribution
+    more convenient.</P></DIV>
+ </BODY>
+</HTML>
diff --git a/doc/jigdo-lite.sgml b/doc/jigdo-lite.sgml
new file mode 100644 (file)
index 0000000..3812ce7
--- /dev/null
@@ -0,0 +1,101 @@
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<refentry lang="en">
+  <refentryinfo>
+    <address>richard@atterer.net</address>
+    <author>
+      <firstname>Richard</firstname><surname>Atterer</surname>
+    </author>
+    <copyright>
+      <year>2001-2002</year><holder>Richard Atterer</holder>
+    </copyright>
+    <date>Feb 04, 2002</date>
+  </refentryinfo>
+  <refmeta>
+    <refentrytitle>jigdo-lite</refentrytitle>
+    <manvolnum>1</manvolnum>
+  </refmeta>
+  <refnamediv>
+    <refname>jigdo-lite</refname>
+    <refpurpose>Download jigdo files using wget</refpurpose>
+  </refnamediv>
+  <refsynopsisdiv>
+    <cmdsynopsis>
+      <command>jigdo-lite</command>
+      <arg>URL</arg>
+    </cmdsynopsis>
+  </refsynopsisdiv>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>DESCRIPTION</title>
+
+    <para>Given the URL of a `<filename>.jigdo</filename>' file,
+    <command>jigdo-lite</command> downloads the large file (e.g. a CD
+    image) that has been made available through that URL.
+    <citerefentry><refentrytitle>wget</refentrytitle><manvolnum
+    >1</manvolnum></citerefentry> is used to download the necessary
+    pieces of administrative data (contained in the
+    `<filename>.jigdo</filename>' file and a corresponding
+    `<filename>.template</filename>' file) as well as the many pieces
+    that the large file is made from. The
+    <citerefentry><refentrytitle>jigdo-file</refentrytitle><manvolnum
+    >1</manvolnum></citerefentry> utility is used to reconstruct the
+    large file from the pieces.</para>
+
+    <para>`<filename>.jigdo</filename>' files that contain references
+    to Debian mirrors are treated specially: When such a file is
+    recognized, you are asked to select one mirror out of a list of
+    all Debian mirrors.</para>
+
+    <para>If <option>URL</option> is not given on the command line,
+    the script prompts for a location to download the
+    `<filename>.jigdo</filename>' file from.</para>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>SEE ALSO</title>
+
+    <para>
+      <citerefentry>
+        <refentrytitle>jigdo-file</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry>,
+      <citerefentry>
+        <refentrytitle>wget</refentrytitle><manvolnum>1</manvolnum>
+      </citerefentry> (or `<command>info wget</command>')
+    </para>
+
+    <para>CD images for Debian GNU/Linux can be <ulink
+    url="http://www.debian.org/CD/jigdo-cd/">downloaded with
+    jigdo</ulink>.</para>
+
+  </refsect1>
+  <!-- ------------------------------------------------------------- -->
+  <refsect1>
+    <title>AUTHOR</title>
+
+    <para><ulink url="http://atterer.net/jigdo/">Jigsaw
+    Download</ulink> was written by Richard Atterer
+    <email>jigdo@atterer.net</email>, to make downloading of CD ROM
+    images for the Debian GNU/Linux distribution more
+    convenient.</para>
+
+  </refsect1>
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/doc/libwww-mingw.diff b/doc/libwww-mingw.diff
new file mode 100644 (file)
index 0000000..245d05c
--- /dev/null
@@ -0,0 +1,213 @@
+#! /bin/sh
+patch --remove-empty-files -p0 -i "$0" "$@"
+exit $?
+
+--- ./configure.in
++++ ./configure.in     Wed Oct  3 13:53:24 2001
+@@ -31,11 +31,23 @@
+ dnl Regular configure...
+ AC_PROG_CC
++if test "$GCC" = "yes"; then CFLAGS="$CFLAGS -Wall"; fi
+ AC_ISC_POSIX
+ dnl AC_PROG_CXX               Caused problems and is not needed...
+-AC_CYGWIN     dnl   You should probably
+-AC_MINGW32    dnl   use all three of these
+-AC_EXEEXT     dnl   for maximum portability
++dnl You should probably use all three of these for maximum portability
++AC_CYGWIN
++AC_MINGW32
++AC_EXEEXT
++if test "$MINGW32" = "yes"; then
++    # With MinGW, need to explicitly link against winsock2
++    LIBS="$LIBS -lws2_32"
++    # LIBS="$LIBS -no-unused" for DLL building, but doesn't work ATM,
++    # so completely disable shared libs (speeds up compilation because
++    # the .c files are not compiled twice):
++    AC_DISABLE_SHARED
++fi
++
++AC_LIBTOOL_WIN32_DLL
+ AM_PROG_LIBTOOL
+ AC_PROG_MAKE_SET
+ AC_PROG_INSTALL
+@@ -183,12 +195,14 @@
+ AC_TYPE_SIZE_T
+ AC_TYPE_SIGNAL
+-AC_CHECK_TYPE(BOOLEAN, char)
+-AC_CHECK_TYPE(u_char, unsigned char)
+-AC_CHECK_TYPE(u_short, unsigned short)
+-AC_CHECK_TYPE(u_long, unsigned long)
++if test "$MINGW32" != "yes"; then
++    AC_CHECK_TYPE(BOOLEAN, char)
++    AC_CHECK_TYPE(u_char, unsigned char)
++    AC_CHECK_TYPE(u_short, unsigned short)
++    AC_CHECK_TYPE(u_long, unsigned long)
++fi
+-AC_CHECK_SIZEOF(char)
++AC_CHECK_SIZEOF(char,1)
+ AC_CHECK_SIZEOF(char *)
+ AC_CHECK_SIZEOF(int,4)
+ AC_CHECK_SIZEOF(long,4)
+@@ -481,7 +495,7 @@
+     WWWXML="libwwwxml.la"
+     LWWWXML="-lwwwxml -lxmltok -lxmlparse"
+     LIBWWWXML='${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la'
+-    SHOWXML="showxml ptri stri rdf_parse_file rdf_parse_buffer"
++    SHOWXML='showxml$(EXEEXT) ptri$(EXEEXT) stri$(EXEEXT) rdf_parse_file$(EXEEXT) rdf_parse_buffer$(EXEEXT)'
+     ;;
+   esac ],
+   AC_MSG_RESULT(yes)
+@@ -493,7 +507,7 @@
+   WWWXML="libwwwxml.la"
+   LWWWXML="-lwwwxml -lxmltok -lxmlparse"
+   LIBWWWXML='${top_builddir}/Library/src/libwwwxml.la ${top_builddir}/modules/expat/xmlparse/libxmlparse.la ${top_builddir}/modules/expat/xmltok/libxmltok.la'
+-  SHOWXML="showxml ptri stri rdf_parse_file rdf_parse_buffer"
++  SHOWXML='showxml$(EXEEXT) ptri$(EXEEXT) stri$(EXEEXT) rdf_parse_file$(EXEEXT) rdf_parse_buffer$(EXEEXT)'
+ )
+ AC_SUBST(HTXML)               # for old style big library
+ AC_SUBST(HTLIBXML)    # for old style big library
+@@ -580,7 +594,7 @@
+     WWWSSL="libwwwssl.la"
+     LWWWSSL="-lwwwssl" 
+     LIBWWWSSL='${top_builddir}/Library/src/SSL/libwwwssl.la'
+-    WWWSSLEX="wwwssl"
++    WWWSSLEX='wwwssl$(EXEEXT)'
+     ;;
+   esac ],
+ [ AC_MSG_RESULT(no) ])
+--- ./Library/src/wwwsys.html
++++ ./Library/src/wwwsys.html  Wed Oct  3 14:11:38 2001
+@@ -308,6 +308,77 @@
+ <H2>
+   <A NAME="Macintosh">Macintosh</A>
+ </H2>
++<H3>
++  mingw32 - Minimalist GNU for Windows
++</H3>
++<P>
++A bit like Cygwin, except it uses the native Windows API, which means
++the programs do not need the huge Cygwin DLL to run.
++<P>
++Patch by Richard Atterer &lt;richard@atterer.net&gt;, October 2001
++<PRE>
++#ifdef __MINGW32__
++
++#include &lt;winsock2.h&gt;
++
++#define WWW_MSWINDOWS
++/* #define WWW_WIN_CONSOLE */
++#define WWW_WIN_WINDOW
++/* #define WWW_WIN_ASYNC */
++/* #define WWW_WIN_DLL */
++
++#ifndef _WINSOCKAPI_
++#define _WINSOCKAPI_
++#endif
++
++#define NETREAD(s,b,l)  recv((s),(b),(l),0)
++#define NETWRITE(s,b,l) send((s),(b),(l),0)
++#define NETCLOSE(s)     closesocket(s)
++#define IOCTL(s,c,a)  ioctlsocket(s,c, (long *) a)
++
++#define MKDIR(a,b)      mkdir(a)
++#define REMOVE(a)     remove((a))
++#define DEFAULT_SUFFIXES      "."
++
++#define SOCKET SOCKET                 /* WinSocks socket descriptor */
++#define INVSOC INVALID_SOCKET         /* WinSocks invalid socket */
++
++#define DESIRED_WINSOCK_VERSION 0x0101  /* we'd like winsock ver 1.1... */
++#define MINIMUM_WINSOCK_VERSION 0x0101  /* ...but we'll take ver 1.1 :) */
++
++#define DIR_SEPARATOR
++#define DIR_SEPARATOR_CHAR     '\\'
++#define DIR_SEPARATOR_STR      "\\"
++
++#define socerrno WSAGetLastError()
++#define ERRNO_DONE
++
++/* Taken from the WIN32 stuff above. */
++#define EWOULDBLOCK     WSAEWOULDBLOCK
++#define EINPROGRESS     WSAEINPROGRESS
++#define ECONNREFUSED    WSAECONNREFUSED
++#define ETIMEDOUT       WSAETIMEDOUT
++#define ENETUNREACH     WSAENETUNREACH
++#define EHOSTUNREACH    WSAEHOSTUNREACH
++#define EHOSTDOWN       WSAEHOSTDOWN
++#define EISCONN         WSAEISCONN
++/*#define EINVAL          WSAEINVAL*/
++#define ECONNRESET      WSAECONNRESET
++#define ECONNABORTED    WSAECONNABORTED
++#define ESHUTDOWN       WSAESHUTDOWN
++
++/* The configure.in script is wrong to default to #define GETGROUPS_T int */
++#ifdef GETGROUPS_T
++#undef GETGROUPS_T
++#endif
++
++#define HT_LSTAT stat
++
++#endif /* __MINGW32__ */
++</PRE>
++<H2>
++  <A NAME="Macintosh">Macintosh</A>
++</H2>
+ <P>
+ We have two environments on Macintosh: Codeworrior and MPV.
+ <H3>
+@@ -578,16 +649,21 @@
+ #endif
+ </PRE>
+ <P>
+-On non-VMS machines STAT should be stat...On VMS machines STAT is a function
+-that converts directories and devices so that you can stat them.
++On non-VMS machines STAT should be stat, unless that was overridden
++somewhere above. On VMS machines STAT is a function that converts
++directories and devices so that you can stat them.
+ <PRE>
+ #ifdef VMS
+ typedef unsigned long mode_t;
+ #define HT_STAT               HTStat
+ #define HT_LSTAT      HTStat
+ #else
++#ifndef HT_STAT
+ #define HT_STAT               stat
++#endif
++#ifndef HT_STAT
+ #define HT_LSTAT      lstat
++#endif
+ #endif /* non VMS */
+ </PRE>
+ <H3>
+@@ -1026,9 +1102,11 @@
+   Booleans
+ </H2>
+ <PRE>
++#ifndef __MINGW32__ /* has a typedef for BOOLEAN */
+ #ifndef BOOLEAN
+ typedef char  BOOLEAN;                                    /* Logical value */
+ #endif
++#endif
+ #ifndef CURSES
+ #ifndef TRUE
+@@ -1053,6 +1131,8 @@
+ If we don't have these (for some mysterious reason) then define them. This
+ should (is?) be handled by the configure script already.
+ <PRE>
++/* Disabled - caused problems because mingw32 has typedefs for these.
++
+ #ifndef u_short
+ #define u_short unsigned short
+ #endif
+@@ -1060,6 +1140,7 @@
+ #ifndef u_long
+ #define u_long unsigned long
+ #endif
++*/
+ </PRE>
+ <H2>
+   NULL Definition
diff --git a/gfx/.cvsignore b/gfx/.cvsignore
new file mode 100644 (file)
index 0000000..fdc738c
--- /dev/null
@@ -0,0 +1 @@
+cvs
diff --git a/gfx/abutton.xcf.bz2 b/gfx/abutton.xcf.bz2
new file mode 100644 (file)
index 0000000..2ba7546
Binary files /dev/null and b/gfx/abutton.xcf.bz2 differ
diff --git a/gfx/button-cross.xpm b/gfx/button-cross.xpm
new file mode 100644 (file)
index 0000000..8651173
--- /dev/null
@@ -0,0 +1,91 @@
+/* XPM */
+static char * button_cross_xpm[] = {
+"35 24 64 1",
+"      c None",
+".     c #030402",
+"+     c #D8EBD8",
+"@     c #737F73",
+"#     c #0B1C08",
+"$     c #905957",
+"%     c #D1E0D0",
+"&     c #0C2E09",
+"*     c #C0A2A0",
+"=     c #804342",
+"-     c #113A0C",
+";     c #B69492",
+">     c #753837",
+",     c #A8B8A8",
+"'     c #174412",
+")     c #AB8684",
+"!     c #722F2D",
+"~     c #642221",
+"{     c #99A799",
+"]     c #66514F",
+"^     c #F5E8E4",
+"/     c #164C10",
+"(     c #BACDBA",
+"_     c #BED0BE",
+":     c #531F1E",
+"<     c #909D90",
+"[     c #6A2B29",
+"}     c #B4C4B4",
+"|     c #7F7877",
+"1     c #A17774",
+"2     c #16520F",
+"3     c #9E8A86",
+"4     c #602C29",
+"5     c #413B3A",
+"6     c #E8F9E8",
+"7     c #40100E",
+"8     c #5E5E5E",
+"9     c #726868",
+"0     c #441F1D",
+"a     c #899489",
+"b     c #C6AEAB",
+"c     c #F1E1DD",
+"d     c #FAF0ED",
+"e     c #5A5653",
+"f     c #836D6A",
+"g     c #330F0C",
+"h     c #16560F",
+"i     c #464545",
+"j     c #986A68",
+"k     c #828E82",
+"l     c #363030",
+"m     c #4E4D4D",
+"n     c #0C1208",
+"o     c #836362",
+"p     c #E8DAD7",
+"q     c #292423",
+"r     c #B5A9A5",
+"s     c #F6FCF5",
+"t     c #8D8583",
+"u     c #CFBAB8",
+"v     c #1A6212",
+"w     c #AB9F9D",
+"x     c #DACFCA",
+"y     c #525252",
+"        |5n.............n5|        ",
+"      infbpdddddddddddddpboni      ",
+"    tnt^dddddddddd^^^^^^^ccp|nt    ",
+"   |qxdddd^ccc^^^^^^cpxxxpxxpuq|   ",
+"  tqpdd^^cuuuuxcccppubub*uuuxxuqt  ",
+"  nxd^^^cupdssuuxxxbbsssp3wrruuwq  ",
+" i|d^^cpx*xup^dbru**s^xuu3foftwwey ",
+" nc^cpxxu;1$$bcs*1wdc;=$1$[~~:>||# ",
+"|8cpxubrw1;1=>b^su^p)>$1;=[[~:7l|5|",
+"5wxubw<3tf1;1$=uccx*=$1;j!!![~:g5em",
+"nuurw|]4[[~j;1$$;b)$$1;1>===>!~7g8l",
+".ur3]:~[!!!!1*1$$j$$1b)======>!:g5q",
+".r350~[!!>>>!;)jj$$$;*=$$$$$$==[7.q",
+"nt8g:~!>>===1x)j$$$$;x)$jjjjj$$>0n5",
+"58q7:[>====)puj$$j$$juc)jj111jo=:g8",
+"|lg7:!==$$)^xj=$1)1j=juc;11))1j=4qt",
+" ..g:>=$$j^u$=$)*;*)j==*p1);;)1]0l ",
+" m.g:>=oj;x$=$1*;j;b;1$$*;;;;)j]l9 ",
+"  ng:>$j1))j1)*)););b*;)1);*;)o5i  ",
+"  tn0=$1)1));b;;*bb;;ub*;)**;1]5w  ",
+"   |n5o1;;));)*bbuuu*;;;;**;)fia   ",
+"    kq51;*b*bbuuuuuuuuubb*;)omw    ",
+"      8q]1wbuuuuuuuuuuuu*)om|      ",
+"        te5lllll55555iiiy9a        "};
diff --git a/gfx/button-pause.xpm b/gfx/button-pause.xpm
new file mode 100644 (file)
index 0000000..12b23f2
--- /dev/null
@@ -0,0 +1,91 @@
+/* XPM */
+static char * button_pause_xpm[] = {
+"35 24 64 1",
+"      c None",
+".     c #020202",
+"+     c #9E9E9E",
+"@     c #3E3E3E",
+"#     c #DEDEDE",
+"$     c #7A7A7A",
+"%     c #666666",
+"&     c #C6C6C6",
+"*     c #121212",
+"=     c #B6B6B6",
+"-     c #565656",
+";     c #1E1E1E",
+">     c #929292",
+",     c #E6E6E6",
+"'     c #262626",
+")     c #424242",
+"!     c #AAAAAA",
+"~     c #EAEAEA",
+"{     c #CACACA",
+"]     c #868686",
+"^     c #4E4E4E",
+"/     c #F6F6F6",
+"(     c #6A6A6A",
+"_     c #2A2A2A",
+":     c #BEBEBE",
+"<     c #2E2E2E",
+"[     c #5E5E5E",
+"}     c #CECECE",
+"|     c #6E6E6E",
+"1     c #A2A2A2",
+"2     c #F2F2F2",
+"3     c #DADADA",
+"4     c #323232",
+"5     c #828282",
+"6     c #4A4A4A",
+"7     c #0E0E0E",
+"8     c #363636",
+"9     c #969696",
+"0     c #727272",
+"a     c #8E8E8E",
+"b     c #AEAEAE",
+"c     c #D6D6D6",
+"d     c #464646",
+"e     c #5A5A5A",
+"f     c #525252",
+"g     c #FBFBFB",
+"h     c #C2C2C2",
+"i     c #A6A6A6",
+"j     c #EEEEEE",
+"k     c #161616",
+"l     c #7E7E7E",
+"m     c #8A8A8A",
+"n     c #626262",
+"o     c #9A9A9A",
+"p     c #767676",
+"q     c #B2B2B2",
+"r     c #3A3A3A",
+"s     c #BABABA",
+"t     c #0A0A0A",
+"u     c #E2E2E2",
+"v     c #1A1A1A",
+"w     c #D2D2D2",
+"x     c #222222",
+"y     c #060606",
+"        0rk.............kr0        ",
+"      dkpsu/gg/////////2#=0kd      ",
+"    5kmj/////2222222jjj~~~,#lk5    ",
+"   0xw//22j,uu~jjj~~u3wc33333:x0   ",
+"  5x#/222~ch{hh3,,uws:hb=h&&{whx]  ",
+"  k}22jj~chg2#&=wc}b,g~w++!bqs:1;  ",
+" dl2j~,u3=~256|os:bbg&-^lllppm++ff ",
+" *,~,#w{:+gcdd[l+19=/])^[66)@8f5lv ",
+"0%~#w&=bi]g}@^%pma5bj$)-(6^6)8_rpr$",
+"r13{=io>]|/&@^(n---1~0d[0^-f^d8x)e^",
+"khhbole6dd/:@f0n^ff1~(dnl-[[-^)_v[4",
+".h!9er)d^62q@-$(-ee1,n6(me%%ne^r;@'",
+".!9d4@6^f^~!@-$0n%%1#ed%an|0|([6_7_",
+"k][x8d^-ef,+@fl$|p013fd%9($ll$|-8kr",
+"r[<xr6-[ne,brf5]$5li#[)%+0]mm]$nrv[",
+"04v'@^[%(n,=@-mm]am!#%d|i$>99>5%r'm",
+" y7x@-%0p(~q@[9>ao>!#%6$b5o+1o]%84 ",
+" 6tx@-($5p,:d(19oiob#|f]=mi!i+5e<| ",
+"  *vre|5m5}h[lboib!135(oqobb!9p))  ",
+"  m74-0]99+{9ibo=s=1&i+q+!qb1an@+  ",
+"   $vd0a+i+o+++=:hhsi1i+b=bi9$d>   ",
+"    a'dm1b=qq=:h&&&&&:s::=!o(^+    ",
+"      [_e]is:hhh&&&&&&&hb>(6p      ",
+"        ]e@44488rrr@@))df|>        "};
diff --git a/gfx/button-play.xpm b/gfx/button-play.xpm
new file mode 100644 (file)
index 0000000..24f3652
--- /dev/null
@@ -0,0 +1,91 @@
+/* XPM */
+static char * button_play_xpm[] = {
+"35 24 64 1",
+"      c None",
+".     c #020302",
+"+     c #2A6423",
+"@     c #77A073",
+"#     c #D6EAD6",
+"$     c #B1CCAF",
+"%     c #112010",
+"&     c #696969",
+"*     c #133A0F",
+"=     c #90A090",
+"-     c #53894D",
+";     c #363E36",
+">     c #90B28D",
+",     c #5B645A",
+"'     c #747B73",
+")     c #DFEDDF",
+"!     c #CCE1CC",
+"~     c #447E3D",
+"{     c #3D3E3D",
+"]     c #718571",
+"^     c #A3B2A2",
+"/     c #3A563A",
+"(     c #212321",
+"_     c #BCD0BA",
+":     c #839382",
+"<     c #EAF2EA",
+"[     c #486C45",
+"}     c #A4B8A3",
+"|     c #164212",
+"1     c #131611",
+"2     c #547E51",
+"3     c #2C6A27",
+"4     c #6E8A6B",
+"5     c #2E2E2D",
+"6     c #7DA678",
+"7     c #484B48",
+"8     c #A4C1A1",
+"9     c #111211",
+"0     c #C6DAC5",
+"a     c #264226",
+"b     c #E3F6E3",
+"c     c #12330E",
+"d     c #1D4A16",
+"e     c #61915C",
+"f     c #8EAC8A",
+"g     c #40743B",
+"h     c #B4C5B4",
+"i     c #2B5327",
+"j     c #5D755B",
+"k     c #3E523E",
+"l     c #9FAD9F",
+"m     c #6A9765",
+"n     c #F7FEF7",
+"o     c #97B995",
+"p     c #34722D",
+"q     c #C0D6C0",
+"r     c #545554",
+"s     c #EEFBEE",
+"t     c #799377",
+"u     c #ADC4AA",
+"v     c #20571A",
+"w     c #9AA99A",
+"x     c #323632",
+"y     c #83AC7F",
+"        759.............957        ",
+"      x1'h)snnnnnnnnsssb#u'1x      ",
+"    r1:<nssssssssssbbbbbbb)#41r    ",
+"   7(0ssssb##)bbbbbbb)####!!#$(7   ",
+"  r(!ssbbb#!0$!#)))#!!0_____q0$(r  ",
+"  10sbbbbb!_nb$uq00q_hu}}^^}}hhw%  ",
+" x]sbbb##!_$nnn)8>}}^ww==:44]:wwr{ ",
+" 9)b)#!q_h}8nsssn!ft::::2pp+vv[]]1 ",
+"7&b#0_u}lw=}nbbbbssqt2gpppp3+v|a';r",
+"5w!_ul==:t]fsb###)<<<u~pg~~pp3v*7,{",
+"9$_}=][33336<$y6oq#)))#>~~~~~p+d%,5",
+".$^=[i+3ppp6$~3ppp-y$!!!0y~~~~pvc{(",
+".^=kd+3ppgg@m~~-------myy>e---~+|15",
+"9:,cv+pg~~~@e-m@yyyyy66yymemmm-gd%{",
+"5,x*vpg~~--6mmyo8$$$$u8yem@@@@m~i%r",
+"7x%*vp~--ee6@y8$q0!!0om@6yyyy6@2i(&",
+" .1*vg2eemmy>o$0!##$6@yf>>>>>f@2ax ",
+" {9cvg-em@@yu$0!#qy6>oooooooofm[x, ",
+"  9%ig-m@66f$q!q>yo888888888of4k{  ",
+"  r9a[-@y>f>__>fou$$$$$$uu88>@j{'  ",
+"   r1/4@foooof8u$_______$u8of47'   ",
+"    ,(kt>8u88$$_________$uofj7'    ",
+"      75,t^u$__________$8=j7&      ",
+"        &7{xxxxx{{{{{{{7r&'        "};
diff --git a/gfx/buttons.xcf.bz2 b/gfx/buttons.xcf.bz2
new file mode 100644 (file)
index 0000000..49e26d4
Binary files /dev/null and b/gfx/buttons.xcf.bz2 differ
diff --git a/gfx/icon-cd.xcf.bz2 b/gfx/icon-cd.xcf.bz2
new file mode 100644 (file)
index 0000000..282331e
Binary files /dev/null and b/gfx/icon-cd.xcf.bz2 differ
diff --git a/gfx/jigdo-icon.png b/gfx/jigdo-icon.png
new file mode 100644 (file)
index 0000000..d2e08fb
Binary files /dev/null and b/gfx/jigdo-icon.png differ
diff --git a/gfx/jigdo-logo.xcf.bz2 b/gfx/jigdo-logo.xcf.bz2
new file mode 100644 (file)
index 0000000..36fa8b1
Binary files /dev/null and b/gfx/jigdo-logo.xcf.bz2 differ
diff --git a/gfx/jigdo-logo.xpm b/gfx/jigdo-logo.xpm
new file mode 100644 (file)
index 0000000..325e1e7
--- /dev/null
@@ -0,0 +1,182 @@
+/* XPM */
+static char * jigdo_logo_xpm[] = {
+"357 114 65 1",
+"      c None",
+".     c #FFFFFF",
+"+     c #F3F9F4",
+"@     c #F7FBF8",
+"#     c #E5F2E9",
+"$     c #D3E9D9",
+"%     c #C8E4D0",
+"&     c #BDDEC6",
+"*     c #B3D9BF",
+"=     c #A1D0AF",
+"-     c #98CCA7",
+";     c #8EC89F",
+">     c #80C193",
+",     c #DDEEE1",
+"'     c #A9D5B6",
+")     c #EFF6F0",
+"!     c #8DC29D",
+"~     c #EBF4EE",
+"{     c #6FB885",
+"]     c #F7F7F7",
+"^     c #525753",
+"/     c #020202",
+"(     c #E6E7E6",
+"_     c #C5DECD",
+":     c #E3E3E3",
+"<     c #D3D5D4",
+"[     c #3C4C3F",
+"}     c #67786C",
+"|     c #ACB3AE",
+"1     c #C2C4C3",
+"2     c #C6CCC7",
+"3     c #DEDEDE",
+"4     c #374039",
+"5     c #84B893",
+"6     c #919994",
+"7     c #878C89",
+"8     c #D3DDD6",
+"9     c #A7A9A8",
+"0     c #ABC2B2",
+"a     c #ADCDB7",
+"b     c #7D9886",
+"c     c #718B78",
+"d     c #C0D5C7",
+"e     c #2E3630",
+"f     c #74A984",
+"g     c #8DA995",
+"h     c #787D79",
+"i     c #1D2F22",
+"j     c #6B9978",
+"k     c #97B8A0",
+"l     c #727272",
+"m     c #577961",
+"n     c #56675B",
+"o     c #666967",
+"p     c #181B19",
+"q     c #5E8C6B",
+"r     c #43674E",
+"s     c #375A40",
+"t     c #447953",
+"u     c #5EAA74",
+"v     c #29452E",
+"w     c #070A08",
+"x     c #256B38",
+"y     c #438A57",
+"z     c #519866",
+".......................+@@..+#$%&**=-;>-=*&$,#$$&'-;=*%,@...+*=---=$$##,,,#$#,$%%%%,@..........................................................................................................................................................................................................................                                                      ",
+"......................#+++..),$%*'==->!-'*%##%$%*=>-=%$)...@%=;-;-&,#,,##,##,,%&&%,#)..........................................................................................................................................................................................................................                                                      ",
+"......................##)+)~,,%***'-;>;=&%$,,$$%=;!=*%#@...%=>>!>'$,,#,#$###$$%*%$$+.........))))@.@...........................................................................................................................................................................................................                                                      ",
+".....................)@##)+#$%'**'-;>>--=%#,,,&*==;'&$)...$'->>>=%,###,#),#,%%'&%$))......@##$$##)#)+@.........................................................................................................................................................................................................                                                      ",
+".....................#####,,%%'*-=;>{;;=*$$$,%&'->;*%,)..)*->{>-&$######~#,$%'*&%,+.......,$$$$$,,,#))@........................................................................................................................................................................................................                                                      ",
+"....................++~~+#$%%=''-;;{>;='%#,,%%*=;;'*%#@.)%=;>>;'%~##~~)#,,$%***%$,@.....),%%%&$$,,#,#~+).......................................................@.@.@.@.........................................................................................................................................                                                      ",
+"....................)~~##,,%''=-;>{{;;-*,$%$%*'---'&,+..$'->{>'%%##~~~#,,$%*'*&%,)@...@)$**%%%%$######))+@.............................................@.@.@...@.].].@@.@......................................................................................................................................                                                      ",
+"...................+##++#,%&''-;;>{>;-*$,,,%&'=;;-*%#@.#*=;{{-'&$,~##,#,$%&**&%%,@...@#%%'&**$#~,###)###~+@..............................................^////////]@]].@.@.....................................................................................................................................                                                      ",
+"...................##~##,,%'''-->>>;='%,$$$%*=->-=*$).+%*--;-'*$$~#,##,$%&**'&%,)+..@,$&&'&&%,##~~)#,##+#+@..............................................^////////~(]]]]..@....................................................................................................................................                                                      ",
+"..................+)~++#,$%*'--;;-=*%%#)##$_*=-;=*%#@@,%*'=''*%$$,~#)#$%&&&*&%$#+..@,&&&*'*%,#~)#,###)#))..............................................].^////////::((~]]].....................................................................................................................................                                                      ",
+"..................~+~#~#,%'*'--;;=*&%#)~#$%*'-!-*&$~.@$$&&*%$*_%$,###$$&&&*'&%,#+.@$%&&*'&%$,,,#,#+#~+)@.................................................^////////<<<:((]].@...................................................................................................................................                                                      ",
+"..................~#+##,%%**'=;;;'%^[^^^[^[}=;-=&%~.]$|[[[[[[[[|%,,,$,&&&*'*&$#+@@,&*%&*%%&$$$$++##~+@..............@...................................]^////////|12<3(]]]....................................................................................................................................                                                      ",
+".................+++#)#,%&*'=';>-*%////////4!5-'_$).#$6////////7__8$$_**--'&&$#@+#$&&*&&%$%$$#$,##@+@...........)..##)#).@.............))#).)............^////////99|1<3(]].@..................................................................................................................................                                                      ",
+".................)~))~,$%%*'=-!>-&$////////45!0a8(@~$$b////////cdd_dd**'-=*&,#+.,&%&&&%%%%%&%%$,#~@............@,,$$%,##,)@+@..........+~,,~~)))....].].]^////////769|2<(]]@...................................................................................................................................                                                      ",
+"................+@#)+#,%&*''';>!=&$////////efg-a3#),_%6////////h000a-a-=''*%$#~#$%&*&&%$%%%%%$$$~@+..........,,,%%**%%%%%,#,@@.@.......~)~,#,,~~.)~....]]^////////h7791<:~]].......................................................@+@.........................................................................                                                      ",
+"................))#))#$%%**=-;>-'%$////////ijfk08((&*_b////////}9kkkk!5-*'*%$)$%%&&&%%%$$$$%%%,,,++@.......,$$%&&*=&%%%&$$$,#)#).......@~#$~$#~,,~).~]..]^////////lh7912:(]..@....................................................+@@)+........................................................................                                                      ",
+"................@)~+),%%&''*;!>-*_,////////imcg1<:_d*&c////////nbbbfk5!=**%$#~$$%&*%%%&%%%%%$$$##++@....,#)$%&**%&%%$$%%,%%$$,##)......+~,$~#$~,#,,#~....^////////ol76|2:(]]......................................................@)+~)@.......................................................................                                                      ",
+"...............#~+))#$$%&**'=>;-*%#////////pmc6|<daa='c////////[hqqjg!0==*%,%,%&&*&%%$%%%%%$,,,,##++)@)#$$&*&&%&&&$,$%$$,$$&'&$$,$)#)...~~,,,,,$~$#~,$#~]^////////olh69<3~]@.......................................................~)~#).......................................................................                                                      ",
+"...............+)+++,$$&%'*=;>--'%$////////prmb|11--0=c////////[rmmqg!0==&%$$$%%*%%%%$%%%%%,,,#,,,##~@,$**&&%&%%%%$,$$,,%&'''='''*&%,%,$$$$#,,,,~,$~$(~,~[////////^lh6|1:(].]......................................................)~##~.......................................................................                                                      ",
+"..............++++~)$,%&'*'-;;-'&%(////////ps}79|00!!-q////////errtqjk-aa&$%&%&*%%%&%%%%%$$,,#,#$,,~,,&&*&&&%%%$,$$$$$$*;-'>>{u{>;'='=*=*&''~$#,,,,#$),(]^////////oo76|2:(]].......................................................+,#,,#......................................................................                                                      ",
+"..............+))+~~#%%**&'-;-=*_,,82k6mr[vs^}69ggk;!a0!kgb}mss[srtmfk!=&%&%%&*%%%%%%%$$%,,#$,,#~$$*&%'%*%$%%$$$#,,$'&'=;-;>{{{{{{>=;-=->-;'''&&~,,,$~,#)[////////ooh69<3]]]........................................................#,,$)@.....................................................................                                                      ",
+".............@+++#+~#%%*'*';;='*_($3a0bqsss[nl69gk5!-;=00gbconssvrmqfg5a*'&&&&&&%%'*&*%$$~####,$,%'--=&%$,$$$$$$*&=%'==';;{>>{{{{{{;{;-;{{{=;**'&$#,$,,)(^///////w^lh6|13(]].@......................................................,,,,,+.....................................................................                                                      ",
+"..............))#+#,,%&&&='-;='&$,,$20bqxssro766g5k5-a'a!gbc}nssrsqcjf!a'=%%%*%%%&&''&%%,###,#~%&-';'=%,$,,$$$*'-'=&*='=-;>;{{{{{{;;>;;>>>{>>'=*==&$,,(##[////////ooh992:(].........................................................@$$$$#.....................................................................                                                      ",
+".............++++++,$%&&''-;-'*%,#,8*kjqmrmm769gg5k-=a'a0kgbqmrrrmmjuf!a=*%&*&%%&=&'=&%%%$,#$$$%'>>;=*%%&%%$'>>;;>-;>>-;';{;uu{>uu>{>>>>{{{>;--'-=;'%$,~(^///////wolh6|23~]].........................................................$$$$,@...................................................................                                                       ",
+".............)~+#+,,%%&%'=---**%#~#:d!fjqqcc699gk5k!a*&dd0kgcqmtttjjff-a'&&**%$%&*'*&&&%$$,#,%%'->='&%%$$$*;>>{{;{{;{u;{{{{>>u{{{{>{{;{-{{{>=;''**==-_$#~[////////^oh6|<3(]].........................................................#$%%$#...................................................................                                                      .",
+"............@~++++,$%%&&*'--''_$#~(,_0kgbf69|1kk5!!'*&_&dd10kbjytqjuf!a'*&&'&%%&'&***%$$,$,%$%'-=''*%,$$$%*;>{uu>{u{>uuuu{{{;u>>{u>u{->;{>;-=''*&&*&'*%$~^///////woo7691:(]].@.................@.@.@.@.@.@.@.@.......................+$%%%,...................................................................                                                      .",
+".............@++)#,$$%&&*'--**%##)##%*=00k0021kkk-0'd%$$3%_205fbufg55=a&_&'&%%%*'*&$%$,,,,#,%**'*&%%$,,,%'=;;>uzuu{u{{>uuu{{;>;;>{>>;;>-==*-*&&&*_%_&_&_(^////////^ol6|<3]]].............@.@.........@.@.].@.@.@...................@@@%%%%$)..................................................................                                                      .",
+"............)++++~,%&&&**=;=*%%,~~~#%_&**d2d<a0-!!-'%,,#,$3%d05ff5f5!=*%&&&&%%'*&%%$,###<g6[[[[[[[[^g|#_%*'';{>{uuu{>;{>>{{u>>;;>>';-==*'*0c}[[[[[[[[b9$$[///////w^l76|13(]............@....99^^^^^^^^91].]]].@...@...............@@@+,%%_%#..................................................................                                                      .",
+"............@))+)##$%&***=-=*&,#))~^[[[[[[[h:a=!0;a*%$0[^[^[[44j5{5!a=&%&*%&%&*&%%,,#0op///////////////[4[44[vvvy{{;{;;>>{{{>{-=';&'''*grp//////////////[p////////^^l6|2:(]].............9^//////////////^1]]]]]].@.............@@@@+),%&&%%@.................................................................                                                      .",
+"............)+~++,,$%&**'==**%#~~~~////////[da0!!--*%,6////////mk{5!-a__&&&%%**$$,,0e///////////////////////////t>{>>>>;{{{{;-{>&&'%%ge///////////////////////////^oh6|1:(]].@......@..9p//////////////////e|]]]@]].@@.......@.@+++++@@%&&&%).................................................................                                                      .",
+"............))+++,,$&&&&'-''*$~~~~#////////[<!5!5-=d%,6////////mff50;'&%*%&$%&%$,_[/////////////////////////////tf{55{>>>u{u>&;-%&&&[/////////////////////////////[^l69<:(]..........3e//////////////////////o((]]]..@........@@+)@+++)%%&&%,@...............................................................                                                       .",
+"...........+++++#,,%%&&&=-'&%$##~~,////////4kk5k50-&_,g////////nfu5k!_&*&%%&*%#,dp//////////////////////////////nffu{5u>{uu{{*'*%$0p//////////////////////////////4^l7913~]]........:p////////////////////////^(((~]].@.@....@++@@+++)@$%**&,)...............................................................                                                      ..",
+"...........)+++++,%%&&*'=='&$,~~##$////////4gbjf5!='_36////////rqqfk0ad*%&%%%$,6////////////////////////////////rqjzj!{{{u{{{**&%dp///////////////////////////////^ooh|2:(]].]..@..9///////////////////////////p2:((]]].....@@))@++@+@@,%*&*%#...............................................................                                                      ..",
+"...........+++~+#,%%%%&''=&%$#)~##%////////ecqqzfk0'&$6////////vtqjf0a''&%&&$#dp////////////pieeep//////////////vtyqyfuu{>{{=-&%ap////////////wpwppw//////////////[[l791:(].@.....3////////////weeeew///////////e<3((~.]@@.@)+~~++++++@@%&'*&#@..............................................................                                                      ..",
+"...........+)+++#,%%&&&=-'**$#)##$8////////immtqj50'_$6////////vxrqjk0a*&%%$$,p//////////wvnn7hho[viipp/////////esxxtyyy{;>>*=&&e//////////wpviiiiiivveip/////////[so791:(]......:p/////////p^h7hhhh7l4//////////4<<((]]....+)~~)+++@+@@%&*'&$).............................................................                                                       ..",
+"...........++~+#,$$$%%&==*&%,~#~,%%////////pssxqjg!'&$6////////isrtbk00_%,%$,o/////////wisssolllsvee[n7n////////ivixxxzyu{;;'&%n//////////iiiiiiiiivvv^c6e////////[^}7923~]]].@..^/////////ihhhhllllll7hp/////////h2<:(]]@@)+~~#+++@@++@$%&'*%~@............................................................                                                      ...",
+"..........)+++++,$%%&&&=='&%,)~#$__////////pssstzgk'd%6////////ivstc50-a_$$$|/////////wvvv[sllo^svie[nco////////piivxxu{u{-;'%0/////////wiviiiiiivivvv^c64////////[^}7923(].....7/////////ehhlllollhhhh7hw/////////913:(]].)~###+++++@@@,%&'*%,)............................................................                                                      ...",
+"..........))++++#,%%&&*''*&%#~#~%%&////////pvvstq5ka&%6////////ivsmcgk0&%%$#e/////////vv[4[^llrsvvvsrnbo////////iiixyyuu>>>&&*[/////////viiiiiiiivvvssrcg4////////[nl6|23~]].].:p////////ehlloolllhh7h7766p////////4|1<:(]]@~#,,#+++++)+#%%''&,+@...........................       ........................                                                       ...",
+"..........@+++~##,%%%&*='*&$~)~,_&&////////pvvstqg!d&%6////////iesrcg50__%$|/////////ivv4[slhhnrsvxxtqg}////////pvvxqj5z{;>=%g/////////pvvviiiiivvvxxxtb|e////////^nl6|23(]]...l////////wllooollh776666669l/////////7|23:~])~#,,~+@++@+@+%&*=*%~@.........................            .....................                       .......                        ....",
+"..........+++++#,,%%%&*'*&%$~~#$_'&////////wevstqgka&_b////////ivvmcbka_%$,[////////wv4ev[oh7mtxxxtyqgkh////////iivrtjkzfu>'&n////////wivesvvvxvxxxxttqg0[////////^o76|2:(]..../////////4looolh77999|||99||i////////e9123(~+#,,,#)@@@+@@+$%*'*%,)@......................                 ..................                     ............                     ....",
+"..........@++++#,%%%&&*='&&$)],$*'*////////pevvtqg!a__6////////i4[tcjka_$$</////////i444[^h66cqyttzjgk0c////////ivssmquu{u;'*/////////ieevesxsxtyyyyyqj004////////[oh6|1:]]]..7/////////looool76991111111116/////////791<:(~#$$,,)++++@@@$%*''%,#@.....................                    ...............                    .................                  ....",
+"..........+++++#,%%%&&*'*&%,))$_*a*////////pevstjf0a%_b////////iv[mqbk28$,c////////wvee[so69gjzyzfkfa2d7////////i[[xmjzu!{*_c/////////ive4snmbjfjzzzzufa<[////////olh6|13(]]..e////////eoo^lh76911<<33<21122p////////^6|1<((($$%,#+@+@+++$$&''&,~+....................                       ............                    ....................               .....",
+".........@++++#,,$%%%&*'*&$#)#%*'a*////////peesrjfka&_b////////iesncf0d_$(e////////p44v[r799gguu{!'dd%:c////////i[ssq6fk*&$$[////////peee[r}c||0gk{f{uk'_[////////^oh6|<3(].]://///////^^ool76911333:3:::<<<^////////p791<:(,$$$$#+@+++@@,$**'*$,)@..................                          .........                    .......................            ......",
+".........@@+++),$$%%%&''*&%#),$&==*////////pevstqg0'd_7////////i4smcg0_$,#/////////e4e4sl691k5f5=<___%$6////////iesxtgka~&,%/////////pees^m7|2<8!;0{{{'d:[////////olh6923~]..9/////////o^olh79|<3:((~((,$(::6/////////7691<(:%%%%,+++@@@),$&*=*%,#+..................                            ......                    ..........................         .......",
+".........++@+++##$%%%&''*&$~#,&'-=*////////pivstjfk-d%c////////iermcg183,6////////w4e4vr7|1|k!5!&__%$3$6////////eesrrg2(](.9/////////veessh91<:(8=5{5>'*$[////////ooh99<3(]..^////////po^ol79|133(](~~#(~,((://///////^791<3:_%%%,#+@+++@#$&*='%,#).................                                                       ............................      ........",
+".........@++++)#,$%%%*''&%$+,$_'!=*////////wvestqg!a'*b////////i[^}cg28$,o////////pvev[}9|20aa!=$$%_%#~6////////i4v}61<()@]7////////pvv[s}9|23(]~&*-{!=d:^///////w^lh6923~]].e////////e^oll691<((]]#)~~~~#(,(p////////4h6928:__%%,#+@++@@+$&'='&$#)+...............                                                       ...........................................",
+".........++@@+##,$%%&*=*&&,~#%*=!='////////pevstjgk'd*c////////i4r}b|a<$#[////////p4evrh|12aa='&_%,$%,,6////////iev691<(]].^////////i[^^r7|13(~]],%'>-'&$[////////ooh6|<3(]../////////4^ol799<3(]]]])~~~~~~~([////////el691<8_&&&$,)+++++@$&*-=%$,#+...............                                                      ............................................",
+".........+++++##,%%&%*''&%$#$%*-!a*////////peesmjgka'dc////////i[^}j90d8,/////////ie4[n6|2<d*a*_%%3%%%,9////////i[o7913(].]p////////4^olh9|2:(]]]+_'->*%([///////wolh691:(]]@////////w4^ol791<((].]~~#))))(~][////////pl79|<3d_&&%,~)@+@@@$%'-=&%,~+@..............                                                      ............................................",
+".........+)+++#,$$%%&&=&*%$#,%*;>=*////////pevsrq5ka='c////////i[r}cga_8,/////////ievs}91<<_&'__*%%%,$$6////////i[n791<(]]./////////4ooh791<(]]]..,%'-&%$^////////ooh611:]].1/////////^^ol691<(]]].~#~~)~++(~6////////wlh6|23d&&&%,,)+))))%&'-=%%,#+..............                                                       ............................................",
+".........++++),,$%%%&*''&%$#%&=;;=*////////pivsmjg0-='c////////i[nmcg2d&2/////////4e4sc91388_&&%%$$%%%$6////////4oh791<(].@/////////^ooh6913:]]...]#a'_$~[///////wolh6|13(]]9////////w^^ol69<3(]].@])~~~~~+~]6/////////lh691<2_**&$,#~+)))$&';=&%$#)@.............                                                      .............................................",
+".........@@+++#,$%%&&''*&%,,$%-!>a*////////pevsmjg!0='c////////i[n}cg0d%b/////////4e[rh|23(,__%_$%%(##36////////4oh7913(]]9/////////^oo76|23(]]....%_%%(~^////////^lh6|<3]]]9/////////[^oh6|<3]]]..]~)]~)~##~6/////////^l691<dd&&&%,##~#~#&*'-=&$,#+..............                                                      .............................................",
+".........+++++##,$%%%&=*&&$,%*=;!=*////////wvvsmjg0!a=b////////i[n}cg0a86/////////evvr71<:#(_%%%#,$,$$,9////////4oh791<(]]9/////////^ol79|<:~].]...#$$,#(^//////ww^lh6|13(]]9/////////^^oh6|23]]..@)))))~~#~(9/////////^l791<2&**&$$,#~~##%&'-=&%$#)@............                                                       .............................................",
+".........@@+++##%%%%&''&%%$,&&-;;=*////////pevsmbg!a=ac////////i^n}bg2&$6/////////4e[m6|<(]],($%%$%%%%#9////////4oh7913(]]9/////////^ol791<:]].]...@+$$#~^////////ooh6|<:(]]9/////////^[oh6|23(]...@+))~#,()#6/////////^l76|<2d&**%,#,##,#%&'=-&%$#+.............                                                      ..............................................",
+".........+++++##,$%%%*=*%&,$%*=>!=*////////wvvrmjg50-'c////////i[nhb|0<$6/////////4vsn62<:)],,,$%$%,,#(9///////w4oh791<(]]9////////w^ol791<:]]...@...)]]]^///////wolh6|13~]]9/////////[^oh6|23~]..@]~~+#,#,##9/////////^oh9|2dd**&%$,##+~~%&'-=&%,#)@............                                                      ..............................................",
+".........+++++#,$%%&&''&%%$,&';!>=*////////pevrmjg!!!'c////////i[rhbk2a%6/////////[[s}g|2(]@~######,,~~9////////4ol691<(]]9/////////ooh6913:]].......@.@.^////////ooh6|<3(]]6/////////[^nhb928(#...@~)~#,$,##6/////////[oh6|22d&**%,#,,###%%===&&$#).............                                                      ..............................................",
+".........@++++,,$%%%&*=*&%,,%*;>5=*////////p4vrmjf50;ac////////isnh6|28#6/////////evn790<:(@..~####,..]9///////w4ll7913(]]9/////////ool6913(]].........]]^//////ww^lh691:(]~9/////////^^oc6ka8,~...@+)#,$$(#~9/////////[^h691aa**&$$####~~%&*--&%,#)@............                                                      ..............................................",
+".........+@++~#,$%%%&''&%$$,%*;>>-'////////wvvsmjb5!;'c////////i4rhb|2d%2/////////e[n7612%(+@..)@].@..@9////////4oh691<(]]9/////////^oh6923(]].].......].^////////ooh99<3((~,/////////eslcb908:~~..@+)~,$$$##^////////p[^l6|12d***%,,#####$%';=&%$,++...........                                                       ..............................................",
+".........++@+#,,,%&%&*=*%$,,%';>5='////////p4[smqf5!;ab////////i[rh702a8,/////////isnc90d8,]...+@+..@.]9///////w4ol791<(~]3////////w4lh6|1:(]]........].]^///////w^lh6923~##(/////////ennh6ka8$~)..@)~#,,$,#(^////////p[^l6910dd**%,,,####%%';=*%,#)@...........                                                      ...............................................",
+".........@@@+++,$%%%*'=**%,$%';>{='////////wvvsmqfkk;=c////////i[ohb|2d:,p////////p^nc991d,~].@.......]9////////4ll691<(]])/////////4oh69<3(]..........]]^////////ooh6|<3((~,p////////i^nc6k0d8,~..@~)#$$%,)~e////////p[n}6910****$$,###~#%%'=-&%$,+@...........                                                      ...............................................",
+".........++@+++)#$%%&*''&$,,%*;>>-'////////p4vsmjj5-;ab////////i[rh6|0d_:[/////////nohgk0d8]...........7//////ww4ll791<:~]]///////wwelh6913(]]@.........]^///////w^ll991:(,$:[////////i^oc690d%,)+.@+),$_%$#~/////////e[^l691add**%,,,###~%%'--&%,#)@...........                                                      ...............................................",
+".........++++++#,$%&&'=&&%,,%'->5='////////w4vstqb55!'c////////i[nhb|2d_%h/////////^}76gk0_#.].....].]://///////4ol6913:]]]^////////pol6923(]]........]..^////////[oh69<:((_8h////////wsnhbg0a_8,+.@)#,$%$$#</////////e[^}6920*&**%,#,####%&'=-&%$,+............                                                      ...............................................",
+".........@++++++)#$%%*='&%#,%*-!>-*////////pevstjfk!-ac////////i[rh6k2d3:|/////////il76bk0d~.....@..]8p///////ww4ll791<((]]o///////wwlh6913(]].@.......]]^////////^oh6923(:_%9/////////^nh6g0ad$,+.+~),%_%$#7/////////[[nh6|12d**&%,#,####%&*--&%$#+@...........                                                      ...............................................",
+".........+@+++++#,$%&''*%%,,$*->5='////////pevstmf5!-ac////////i[rhb|2d*_8p/////////h76bf0d(@......@+e//////////4ol691<(]]]9////////w^l791<(]]..........9/////////4^h99<3(_&&&p////////4nqbgkad%#).@)~,%_%,#[////////p[[nh6|2ad&**$$#,##,+%*===&%$#)@...........                                                      ...............................................",
+".........@++++++#),$%&''&%,,$&=;>='////////p4vsmjfkk-'b////////i4n}bk1d8%%o/////////p66gf5a_].]...]~^/////////ww4ll7913((]])///////wwph791<:~]].@..@...<//////////^^l6|23(_aa'^////////po}7bk0d8%#.@#),%$3,</////////e4[nc602a**&&$$##~###%&''-&%,#+............                                                      ...............................................",
+".........++@+@++)#,%&*=*&$%#$&=;!-'////////pevstqb!!=ac////////p[nh6|2dd__1//////////e6bgkd(@...].3p////////////4ol791<(]]]~e////////wl79|<3(]]~..]@~~8p//////////4^l69<3:*=a=g/////////^}7ggk'&%~@~##,$$$,o////////w4[[o76022d***%,###,##&&'-=%%$#+@...........                                                      ...............................................",
+".........++++++++),,%&'*&%#,$%*=!=*////////pvvstcf50-ab////////ivrh6|2d&3:_^//////////4kgka3]]@.@9p////[//////ww4oh7913((]]]7///////wwp69|2:(]@3,###~<p///////////[^l7|23(a'-!di////////pcc6gk0d3,@@)~$%$$d/////////p4[^}791<*d&&&$#,#))~#%*'-=%%,#+............                                                      ...............................................",
+".........@)@@++++##$$&'*&%,,$%*=!='////////pe[stqfk!-ac////////p4shb|08_%3_0///////////p}ad%)].9e/////i7////////4ol791<(]]]((/////////w^911:(]#$,,##8p////////////4[l692:_d-!!a9/////////[bbg!0*%,@~#)#$,,[////////w44[r}6912*&**%$$#####)%&=--%%$~+............                                                      ...............................................",
+".........+++++++++,,%%'*&%%#$%*=='*////////p[vsrqf50''b////////ierm6k2<:$$da^/////////////[4^e////////gh//////ww4ooo913((]]]~o///////wwwo1<3(3$8$$$h/////p////////4[o7923da!55=24/////////oggk0d_#@)@)#,#h/////////pe4[nh6|2_d_&&&%,,###)#&*';'&%,#+............                                                      ...............................................",
+".........@@++++++++#,%*&%$$#,$&'='_////////p[srmjg5-a'7////////ienh6|a3,($_d0i///////////////////////n0h////////4^^lcg<(]]]](2///////////e93:d$%$6e/////[4////////4so792<d--!-ad|p/////////lkk0d8)]+])##7/////////w4v[^m7g1<<__&&%$####+##%&'=*%$,)+............                                                      ...............................................",
+".........@@@@+@@+++#,$&*%$,#,$%_*&_////////p[srmbgka**b////////i4sc6|2_8$88a0gw/////////////////////igk}///////we[n}c60(]]]]](h////////////p[[[[////////|4////////4[n791<da=;-*aah//////////^gd<$~@)@]0e//////////444[n}6|1<___%&$,,##))),%&*'&$,#~@@...........                                                      ...............................................",
+".........@@@@@+@@@@+#,%&$$,##,$_&&%////////p^^mmbkk'__b////////ieshb|2_:$$%d0kbw///////////////////pcbk}////////e^nrqg0d:~8]~(:p///////////////////////o04////////[[n791<a'a-dddd1h///////////ih6996le///////////e[4[^oc60<88$%%%,,##+)#+,%&&&%$,#+@............                                                      ...............................................",
+"..........@@@.@@@@++~#$%$,,)#,$$$%$////////i[n}cf|ad_%6////////i4r}6k18$$3$8d0kcw/////////////////whcb6}////////[s^m6|0kd__:!209p/////////////////////ekke////////4smc902a'''&_&da0e////////////////////////////v[4[[n}6|1<(($$$$,#+#+))+,,%&%%,,~+.............                                                      ...............................................",
+"..........@@@@@@@@@@@),$$,#))#,$$$$////////p^n}cg00_8%6////////i4s}b|1d$,,,%8a0gbe///////////////i}7hbg}////////[[n}6k08_'*'-5kgn////////////////////p7gge////////[^o7g1add&_%%3_21|^//////////////////////////[^s[[rl76|<8,$,,$$,+#+)+++#,$%%,##)@..............