Imported Debian patch 2.23.05-1 master debian/2.23.05-1
authorFelipe Augusto van de Wiel (faw) <faw@debian.org>
Sun, 5 Feb 2012 18:21:18 +0000 (16:21 -0200)
committerClinton Ebadi <clinton@neurasthenic.home.unknownlamer.org>
Tue, 8 Apr 2014 09:24:12 +0000 (05:24 -0400)
52 files changed:
debian/README.Debian [new file with mode: 0644]
debian/changelog [new file with mode: 0644]
debian/compat [new file with mode: 0644]
debian/config [new file with mode: 0644]
debian/control [new file with mode: 0644]
debian/copyright [new file with mode: 0644]
debian/dirs [new file with mode: 0644]
debian/docs [new file with mode: 0644]
debian/patches/01_symlink_vulnerability.diff [new file with mode: 0644]
debian/patches/02_fix_a_spelling_error.diff [new file with mode: 0644]
debian/patches/05_apache_logio.diff [new file with mode: 0644]
debian/patches/06_apache_logio_optional.diff [new file with mode: 0644]
debian/patches/07_apache_logio_color_config.diff [new file with mode: 0644]
debian/patches/14_add_search_engines.diff [new file with mode: 0644]
debian/patches/15_ignore_localhost.diff [new file with mode: 0644]
debian/patches/18_ttf_support_throught_libgd.diff [new file with mode: 0644]
debian/patches/22_php_as_htm_in_sample.conf.diff [new file with mode: 0644]
debian/patches/23_gettext_first_part.diff [new file with mode: 0644]
debian/patches/24_gettext_generated.diff [new file with mode: 0644]
debian/patches/25_gettext_po_files.diff [new file with mode: 0644]
debian/patches/series [new file with mode: 0644]
debian/po/POTFILES.in [new file with mode: 0644]
debian/po/ca.po [new file with mode: 0644]
debian/po/cs.po [new file with mode: 0644]
debian/po/da.po [new file with mode: 0644]
debian/po/de.po [new file with mode: 0644]
debian/po/es.po [new file with mode: 0644]
debian/po/eu.po [new file with mode: 0644]
debian/po/fi.po [new file with mode: 0644]
debian/po/fr.po [new file with mode: 0644]
debian/po/gl.po [new file with mode: 0644]
debian/po/it.po [new file with mode: 0644]
debian/po/ja.po [new file with mode: 0644]
debian/po/ko.po [new file with mode: 0644]
debian/po/nb.po [new file with mode: 0644]
debian/po/nl.po [new file with mode: 0644]
debian/po/pt.po [new file with mode: 0644]
debian/po/pt_BR.po [new file with mode: 0644]
debian/po/ru.po [new file with mode: 0644]
debian/po/sv.po [new file with mode: 0644]
debian/po/templates.pot [new file with mode: 0644]
debian/po/vi.po [new file with mode: 0644]
debian/po/zh_TW.po [new file with mode: 0644]
debian/postinst [new file with mode: 0644]
debian/postrm [new file with mode: 0644]
debian/rules [new file with mode: 0755]
debian/source/format [new file with mode: 0644]
debian/templates [new file with mode: 0644]
debian/watch [new file with mode: 0644]
debian/webalizer.cron.daily [new file with mode: 0644]
debian/webalizer.examples [new file with mode: 0644]
debian/webalizer.links [new file with mode: 0644]

diff --git a/debian/README.Debian b/debian/README.Debian
new file mode 100644 (file)
index 0000000..b2448b4
--- /dev/null
@@ -0,0 +1,99 @@
+webalizer for Debian
+--------------------
+
+For configuration, checkout /etc/webalizer/webalizer.conf. Full description
+of the different options is in there too. Also, the 'webalizer --help'
+command might be useful.
+
+NOTE: This package was ported to use Gettext. 
+      Option --with-language=<language> in configure script was striped.
+      If your language wasnt in webalizer, please translate .po file and
+      sent to me.
+
+NOTE: This package was linked against GD 1.3, instead of 1.2. libgd-1.3's
+      copyright is fairly different compared to libgd-1.2's. In fact,
+      version 1.3 of this graphics library is DFSG compliant. So the
+      copyright mentioned in the COPYRIGHT file that comes with the source
+      package of webalizer, doesn't apply to the binary package (at least,
+      the GD-stuff in the COPYRIGHT file doesn't).
+
+
+About webalizer cron.d script.
+-----------------------------------
+Since webalizer (2.01.10-30) version, cron.d script (/etc/cron.daily/webalizer)
+Was changed to read /etc/webalizer/*.conf files instead of just one 
+/etc/webalizer.conf config file.
+If you want to create .conf files to multiple domains or vhost, just create
+your .conf file in /etc/webalizer and cron.d script will run all days.
+
+
+FAQ:
+ Q:
+   Debian Bug report logs - #81918
+   Webalizer doesn't run properly but display some sort of error messages:
+
+   $ webalizer -q -n www.linuxtag.de -t Web Statistik -o \
+     /var/lib/webspace/service.ffis.de/stats/www.linuxtag.de \
+     /var/lib/webspace/etc/www.linuxtag.de/2001-01-10.log
+   Error: Unable to restore run data (99)
+ A:
+   Any error that says it failed to load the data file indicates a corrupt
+   data file. The one mentioned in the bug report is an exception (error 99),
+   which means that the data file being read was from a previous version and
+   is incompatible with the version being run.
+
+ Q: 
+   Debian Bug report logs - #299260 
+   Webalizer: fails to operate on squid-logs if locales is set to de_DE@euro
+   due to bad date
+ A:
+   The webalizer requires the date field to be confirmant to RFC specs..
+   You can change that in apache, but it breaks RFC conformance.
+ Q:
+   Debian Bug report logs - #114768
+   I've switched off the URL report (it's a collated log file of multiple
+   sites, so there ain't much info in there).
+   But the "Top URLs By KBytes" still appears, only the listing by # of hits is
+   gone.
+   It does work for all the other tables I've switched off (both Referrer
+   tables, for example).
+ A:
+   There are 2 URL tables: one by hits, and one by KBytes. Setting TopURLs to 
+   zero suppresses the one by hits.  Setting TopKURLs to zero suppresses the
+   one by KBytes.
+ Q:
+   Debian Bug report logs - #258058
+   Webalizer generates html reports that have badly encoded polish special
+   signs, i.e. they display as "?".
+ A:
+   Problem with browser not generating polish, possible fix is to add
+   a charset tag via the HTMLHead config option for the correct charset.
+ Q:
+   Debian Bug report logs - #98749
+   Webalizer can't handle spaces in URLs at all, the URL is cut at the
+   first space and the statistics are generated accordingly.
+   For example "Test File" is handled as if it were "Test"
+ A:
+   True.  According to the RFC, space characters are considered 'unsafe'
+   and should not be used in URLs.  In addition, space characters are
+   used for field terminators in web logs.  Leave it to Microsoft to
+   encourage their use and subvert the RFC.
+ Q:
+   Debian Bug report logs - #298823
+   "Warning: String exceeds storage size" problem
+   I'm *regularily* getting the following notorious messages:
+   [new_unode] Warning: String exceeds storage size (261)
+ A:
+   These are simply warnings and do not effect the program.  Same with
+   the 'Truncating...' messages.  If it really bugs someone, they can
+   increase the buffer sizes in webalizer.h, but can otherwise be safely
+   ignored.
+
+Remco van de Meent <remco@debian.org>, Wed, 10 Jun 1998 20:07:55 +0200
+Jose Carlos Medeiros <debian@psabs.com.br>  Tue, 20 Dec 2005 19:19:45 -0200
+Julien Viard de Galbert <julien@vdg.blogsite.org>  Wed, 06 Oct 2010 10:27:33 +0200
+Felipe Augusto van de Wiel (faw) <faw@debian.org>  Sun, 05 Feb 2012 16:01:12 -0200
diff --git a/debian/changelog b/debian/changelog
new file mode 100644 (file)
index 0000000..11874da
--- /dev/null
@@ -0,0 +1,789 @@
+webalizer (2.23.05-1) unstable; urgency=low
+
+  [ Julien Viard de Galbert ]
+  * New upstream release. Closes: #491200, #452259, #405699, #557038, #411482,
+    #411847, #558751, #400256
+  * Adopted package with maintainers consent.
+  * Acknowledge all NUMs, thanks guys!
+  * Repackaged using format 3.0 (quilt)
+  * Converted debian/copyright to DEP-5 format
+  * Converted patches from dpatch to quilt with DEP-3 header format
+    - 01_basic_patch: dropped, most changes were integrated upstream.
+      changes for consistency with previous version.
+    - 02_64bit: dropped, already applied upstream.
+    - 03_history: dropped, new version already have a 10 year history.
+      Also this patch was not really compatible with 05_apache_logio in
+      previous version, the summary page did not have the logio columns
+      for the extra lines added by this history patch resulting in wrong
+      array layout, as nobody complained on the BTS I assume nobody used
+      the feature, so I remove it ;)
+    - 04_geolizer: dropped, GeoIP already integrated upstream.
+    - 05_apache_logio: ported to new version. 
+      Integrating fix for the total calculation. Closes: #482771
+      While porting I rewrote part of code that Closes: #558749
+    - 06_UserColor: dropped, already integrated upstream.
+    - 07_w3c-v4: dropped, already integrated upstream.
+    - 08_symlink_vulnerability: dropped, already integrated upstream.
+    - 09_ipv6_support: dropped, already implemented upstream.
+    - 10_remove_db1_dependence: dropped, no longer needed.
+    - 11_various_buffer_overflows: dropped, already integrated upstream.
+    - 12_recognize_Opera_browsers: dropped, already integrated upstream.
+    - 13_add_NoFollow_feature: dropped, upstream LinkReferrer option does it.
+    - 14_add_search_engines: Modified to also uncomment the SearchEngine
+      directives from the sample configuration.
+    - 15_ignore_localhost: refreshed.
+    - 16_fix_typos_webalizer.1: dropped, already integrated upstream.
+    - 18_ttf_support_throught_libgd: refreshed.
+    - 19_add_PagePrefix_feature: dropped, already integrated upstream.
+    - 20_fix_capital_letter_option: dropped, already implemented upstream.
+    - 21_remove_-v_option: dropped, upstream changed -v to verbose.
+    - 22_php_as_htm_in_sample.conf: refreshed.
+    - 17_gettext: imported and converted in three patches:
+      + 23_gettext_first_part, 24_gettext_generated and 25_gettext_po_files
+      + Fix month translations, thanks Gerome Fournier. Closes: #520408
+      + Fix some encodings: cs.po (Closes: #409454), ko.po (Closes: #461176)
+      + Restored ReportTitle and -t options.
+  * Added new patches:
+    - 01_symlink_vulnerability.diff fixing the symlink vulnerability for
+      the .htaccess file (similar to previous 08_symlink_vulnerability)
+    - 02_fix_a_spelling_error.diff fix a spelling error in wcmgr.c
+    - 06_apache_logio_optional.diff this patch affect the apache_logio patch
+      It adds a InOutKb option to make the In/Out KByte data optional.
+      There are no command line option, but it can detect if logio data are
+      available. So this should be fine to Closes: #399017
+    - 07_apache_logio_color_config.diff this patch affect the two previous
+      apache_logio patches. It adds options to configure the color for the
+      new data.
+  * Fixed cron job script in case all .conf are removed. Closes: #419717
+  * Updated Catalan translation of debconf templates (Jordi Mallach).
+
+  [ Christian Perrier ]
+  * Fix pending l10n issues. Debconf translations:
+    - Korean (강민지).  Closes: #632014, #632021
+    - Dutch (Jeroen Schot).  Closes: #650645
+    - Bokmål (Bjørn Steensrud).  Closes: #654801
+
+  [ Felipe Augusto van de Wiel (faw) ]
+  * Fix some spell errors in doc files.
+  * Updated Policy to 3.9.2 without changes.
+
+ -- Felipe Augusto van de Wiel (faw) <faw@debian.org>  Sun, 05 Feb 2012 16:21:18 -0200
+
+webalizer (2.01.10-32.7) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Fix typo in cron.daily script. Closes: #491198
+  * Bump debhelper compatibility from obsolete 4 to modern 7
+  * As a consequence, replace calls to "dh_clean -k" to "dh_prep"
+  * Add ${misc:Depends} to packages dependencies to properly
+    cope with dependencies triggerred by debhelper
+  * No longer ignore make errors in the clean target
+  * Fix pending l10n issues. Debconf translations:
+    - Basque (Piarres Beobide).  Closes: #503919
+
+ -- Christian Perrier <bubulle@debian.org>  Sun, 28 Feb 2010 12:02:27 +0100
+
+webalizer (2.01.10-32.6) unstable; urgency=low
+
+  * NMU
+  * Switch build dependency to libdb-dev (>= 4.7).  closes: #517286.
+
+ -- Clint Adams <schizo@debian.org>  Fri, 25 Sep 2009 23:48:55 -0400
+
+webalizer (2.01.10-32.5) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Actually enable nofollow in 13_add_NoFollow_feature.dpatch.
+    (Closes: #293794)
+
+ -- Robert Millan <rmh@aybabtu.com>  Sun, 05 Apr 2009 23:29:37 +0000
+
+webalizer (2.01.10-32.4) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Fix pending l10n issues. Debconf translations:
+    - Vietnamese. Closes: #500029
+    - Traditional Chinese. Closes: #503166
+
+ -- Christian Perrier <bubulle@debian.org>  Mon, 27 Oct 2008 20:45:54 +0100
+
+webalizer (2.01.10-32.3) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Move Homepage to dedicated field in debian/control
+  * Fix pending l10n issues
+  * Debconf translations:
+    - Russian. Closes: #481779
+    - Swedish. Closes: #491787
+    - Basque. Closes: #494797
+    - Italian. Closes: #494837
+    - Finnish. Closes: #495314
+
+ -- Christian Perrier <bubulle@debian.org>  Tue, 19 Aug 2008 09:59:34 +0200
+
+webalizer (2.01.10-32.2) unstable; urgency=low
+
+  * Non-maintainer upload with maintainer consent.
+  * Deprecate Freetype 1 (Closes: #476320)
+
+ -- Moritz Muehlenhoff <jmm@debian.org>  Thu, 08 May 2008 22:10:10 +0200
+
+webalizer (2.01.10-32.1) unstable; urgency=high
+
+  * Non-maintainer upload during BSP.
+  * Fix unconditional use of debconf in postrm (Closes: #417141).
+  * Update Berkeley DB build dependency to libdbd4.5-dev (Closes: #421949).
+  * Add Galician debconf translation (Closes: #412791).
+  * Update Portuguese debconf translation (Closes: #420365).
+
+ -- Luk Claes <luk@debian.org>  Fri, 18 May 2007 17:34:17 +0200
+
+webalizer (2.01.10-32) unstable; urgency=low
+
+  * New Maintainer. (Closes: #407676).
+  * Acknowledge NMU (2.01.10-31.1), thanks Christian. (Closes: #403415,
+    #404180, #398840, #399063, #399081, #401621, #401805).
+
+ -- Felipe Augusto van de Wiel (faw) <faw@debian.org>  Sun, 21 Jan 2007 02:19:53 -0200
+
+webalizer (2.01.10-31.1) unstable; urgency=low
+
+  * Non-maintainer upload to fix longstanding l10n issues
+  * Debconf templates translation updates:
+    - Spanish. Closes: #403415
+    - Finnish (encoding fixed). Closes: #404180
+    - German. Closes: #398840
+    - Czech. Closes: #399063
+    - Japanese. Closes: #399081
+    - Danish. Closes: #401621
+    - French. Closes: #401805
+
+ -- Christian Perrier <bubulle@debian.org>  Fri, 19 Jan 2007 20:13:41 +0100
+
+webalizer (2.01.10-31) unstable; urgency=low
+
+  * Better write webalizer/upgrade2011030 message in template file. 
+    (Closes: #383820, #397193)
+  * Changed cron script to dont abort, and continue when occour error with
+    just one .conf file. Now it continue and just print a error message.
+    (Closes: #384214)
+  * 22_php_as_htm_in_sample.conf.dpatch. (Closes: #247124)
+    - Enable Pagetype option to manage php files as htm.
+  * Move actual configuration of the package to the postinst script.  The
+    config script now only contains the questions (Closes: #397383, #383984).
+    Thanks to Julien Danjou <acid@debian.org>.
+  * Parse the configuration file in the config script, if it exists, and
+    register the information in the debconf database.  This way, the
+    postinst will respect local changes, and dpkg-reconfigure can actually
+    be used (which wasn't possible in the old setup).
+  * Create /etc/webalizer directory if it does not exist. (Closes: #382023)
+  * Added configure option to force webalizer read conf files from
+    /etc/webalizer (Closes: #396309). thanks to Frank Küster
+    <frank@kuesterei.ch>
+  * Solved a bug in 17_gettext patch, thanks to Diego Chaparro
+    <dchaparro@acm.org>. (Closes: #380060)
+  * Added a debconf option to enable DNSCache. (Closes: #389572)
+
+  [ Debconf Translations ]
+  * Portuguese by Rui Branco (Closes: #396645).
+  * Japanese by Hideki Yamane (Closes: #396145).
+  * Czech by Miroslav Kure (Closes: #384763).
+
+ -- Jose Carlos Medeiros <debian@psabs.com.br>  Wed,  1 Nov 2006 19:43:33 -0200
+
+webalizer (2.01.10-30.1) unstable; urgency=medium
+
+  * Non-maintainer upload for RC bug.
+
+  * Fix RC build failure: add autoconf to the build-dependencies.
+    Thanks Martin Braure de Calignon, closes: #379584.
+
+  [ Debconf Translations ]
+  * Portuguese by Rui Branco (Closes: #381383).
+  * French by Gregory Colpart (Closes: #382792).
+
+ -- Thijs Kinkhorst <thijs@debian.org>  Mon, 14 Aug 2006 17:07:07 +0200
+
+webalizer (2.01.10-30) unstable; urgency=low
+
+  * Added dpatch support, changed and ordered old changes to dpatch.
+  * 01_basic_patch. Thanks to Landon Curt Noll.
+     - Ability to process very large log files (> 2GB in size).
+     - Added some missing locations from the ISO UN codes and from GeoIP's list.
+     - Some location names have been corrected or changed to their official name.
+     - Added some more TLDs.
+     - Let the DNS cache exist for at least a month.
+     - Avoid referrer spamming, turns the "top N referrer" table into just values.
+     - Correctly process log entries made during a leap second.
+    02_64bit. Thanks to Landon Curt Noll.
+     - Avoid 32 bit counter overflow.
+    03_history. Thanks to Landon Curt Noll.
+     - Extend the summary page for longer than 12 months.
+     - Added track_hist bash script.
+    04_geolizer. Thanks to Landon Curt Noll.
+     - Added support to geolizer. (Closes: #285434)
+     - Added libgeoip-dev as Build-depends.
+    05_apache_logio.
+     - Added logio support for new apache2 mod_logio logfiles.
+    06_UserColor. Thanks to Benoît Rouits. <brouits@free.fr.
+     - Allow one to customize the colors of the charts.
+    07_w3c-v4. Thanks to Klaus Reimer <k@ailis.de>.
+     - Implement W3C extended log file format support.
+    08_symlink_vulnerability. Thanks to Julien Danjou <acid@debian.org>.
+     - Converted patch that solve a "symlink vulnerability".
+    09_ipv6_support. Thanks to Arkadiusz Mi¶kiewicz <misiek@pldorg.pl>
+     - Added IPV6 support.
+    10_remove_db1_dependence
+     - Removed db1_* dependence.
+    11_various_buffer_overflows. Thanks to Torsten <torsten.hilbrich@gmx.net>,
+       Timo Sirainen <tss@iki.fi> and  Ulf Harnhammar <metaur@telia.com>.
+     - Fixed buffer overflow while parsing squid logs.
+     - Fixed several "potential" buffer overflows.
+     - Fixed ftp parser overflowing timestamp from log file.
+     - Fixed buffer overflow when parsing FTP xfer log files.
+     - Fixed buffer overflow when parsing webalizer.conf.
+     - Fixed off-by-one bug in the DNS handling.
+    12_recognize_Opera_browsers. Thanks to 
+       Steinar H. Gunderson <sgunderson@bigfoot.com>
+     - Webalizer now recognizes Opera browsers.
+    13_add_NoFollow_feature. Thanks to Robert Cheramy <robert@cheramy.net>.
+     - Add "Nofollow" option.
+    14_add_search_engines. Thanks to Gavin Rogers <grogers@vk6hgr.echidna.id.au>
+       and Cyril Bouthors <cyb@debian.org>.
+     - Added more search engines in sample.conf file.
+    15_ignore_localhost. Thanks to 
+       Norbert Bottlaender-Prier <norbert@globenet.org>
+     - Ignore localhost by default in sample.conf file.
+    16_fix_typos_webalizer.1
+     - Fix typo errors in webalizer.1 man file.
+    17_gettext
+     - German po translation, thanks to Florian Zumbiehl <florz@gmx.de>.
+       (Closes: #364086)
+     - Changed wrong country name in no.po file. (Closes: #351753)
+     - Added support to "string context" with gettext, this solve problem
+       with equal strings that have different mean. (Closes: #295219)
+     - Added a little text about this patch in README.Debian.(Closes: #334984)
+    18_ttf_support_throught_libgd. Thanks to Tatsuki Sugiura <sugi@nemui.org>.
+     - make possible to use TrueTypeFont throught libgd. (Closes: #201723)
+    19_add_PagePrefix_feature. Thanks to 
+       Remco van de Meent <remco@vandemeent.net>
+     - Added new PagePrefix feature. (Closes: #149183)
+    20_fix_capital_letter_option. Thanks to 
+       Frank IJskes <frank@debbie.xs4all.nl> (Closes: #358764)
+    21_remove_-v_option. (Closes: #308190)
+       Remove -v option to follows common and already established guidelines.
+  * Removed debian/cron-multiple-config file.
+  * Recreated a new daily cron file (webalizer.cron.daily) with support to
+    many .conf files. (Closes: #229179)
+  * Add msfree.png and webalizer.png to package. (Closes: #352366)
+  * Changed Build-Dependence from libpng3-dev to libpng12-dev.
+  * Added Homepage: in debian/control and updated Long Description.
+  * Added autotools-dev as build dependence, and always run autoconf in rules
+    file.
+  * Standards-Version: 3.7.2.
+  * Updated Descriptions in debian/templates file to complain with Policy.
+  * Updated debian/config script to check if webalizer is older than this
+    release and if yes move /etc/webalizer.conf to new place.
+  * Suggests apache2's log file on installation. (Closes: #232564)
+  * Remove /var/www/webalizer directory after purge, remove output for
+    /dev/null in mkdir command and change exit code to 1 instead -1. 
+    (Closes: #349594)
+  * Updated pt_BR debconf translation.
+
+ -- Jose Carlos Medeiros <debian@psabs.com.br>  Fri, 3 Jun 2006 20:23:36 -0300
+
+webalizer (2.01.10-29) unstable; urgency=low
+
+  * Solved "symlink vulnerability", Thanks to Julien Danjou <acid@debian.org>.
+    (Closes: #359745)
+
+ -- Jose Carlos Medeiros <debian@psabs.com.br>  Fri,  2 Jun 2006 15:35:35 -0300
+
+webalizer (2.01.10-28) unstable; urgency=low
+
+  * Added a simple FAQ with Questions and Answers in README.Debian.
+    (closes: #81918, #114768, #258058, #98749, #298823)
+  * Portuguese po-debconf translation, thanks to Miguel Figueiredo
+    <elmig@debianpt.org>. (closes: #338067)
+  * Added more information about DNS lookups in DNS.README file (line 160 to
+    162). (closes: #309359)
+  * Changed webalizer.cron.daily to run webalizer even when current log file
+    is empty. (closes: #252816)
+  * Solved various buffer overflows, thanks to: Ulf Harnhammar
+    <metaur@telia.com>. (closes: #343877)
+  * Removed unused file "x".
+  * Added "sensis.com.au" as SearchEngine in sample.conf. (closes: #327496)
+  * Deleted CVS directory to solve "source-contains-CVS-dir CVS" lintian
+    error.
+  * Added patch with new "Nofollow" option. Thanks to Robert Cheramy
+    <robert@cheramy.net> (Closes: #293794)
+
+ -- Jose Carlos Medeiros <debian@psabs.com.br>  Fri, 20 Jan 2006 15:59:42 -0200
+
+webalizer (2.01.10-27) unstable; urgency=low
+
+  * New maintainer (closes: #332235)
+  * Added compat, watch, examples and links files in debian directory.
+  * Deleted debian/conffiles, there were one that was changed to use dh_installcron.
+  * Deleted po.old and templates.old, they are not necessary.
+  * Updated copyright, docs, postinst, postrm and rules files in debian directory.
+    (closes: #207943)
+  * Conforms to Standards version 3.6.2.
+  * Added debconf-2.0 as pre-depends. (closes: #332143)
+  * Updated debian/webalizer.cron.daily. Thanks to Nicolas François
+    <nicolas.francois@centraliens.net> (closes: #308279)
+  * Formatting issue in the webalizer.1 man page. Thanks to Nicolas François
+    <nicolas.francois@centraliens.net>(closes: #272583)
+  * Added Brazilian po-debconf translation, thanks to Tiago Bortoletto Vaz
+    <tiagovaz@gmail.com>. (closes: #269359, #269358)
+  * Added Swedish po-debconf translation, thanks to Daniel Nylander
+    <yeager@lidkoping.net>. (closes: #330766)
+  * Added Vietnamese po-debconf translation, thanks to Clytie Siddall
+    <clytie@riverland.net.au>. (closes: #324088)
+  * Added Czech po-debconf translation, thanks to Miroslav Kure
+    <kurem@upcase.inf.upol.cz>. (closes: #314944)
+  * Finnish po-debconf translation, thanks to Matti Pöllä <mpo@iki.fi>.
+    (closes: #303807)
+  * Danish po-debconf translation, thanks to Morten Bo Johansen
+    <mojo@mbjnet.dk>. (closes: #286094)
+  * Catalan po-debconf updated and changed from ca_ES.po to ca.po, thanks to
+    Guillem Jover <guillem@debian.org> and Christian Perrier
+    <bubulle@debian.org>. (closes: #272316, #275288)
+  * German po-debconf translation, thanks to Erik Schanze
+    <schanzi_usenet@gmx.de>. (closes: #265070)
+  * po/pl.po: Bad encoding, changed to ISO-8859-2, thanks to Pawel
+    Jarosz <pj@rsi.pl>. (closes: #297928)
+  * po/ru.po: Bad encoding, changed to KOI8-R, thanks to Dmitry Baryshkov
+    <mitya@school.ioffe.ru>. (closes: #293333)
+  * Deleted CVS and lang/CVS folders to complain with lintian.
+
+ -- Jose Carlos Medeiros <debian@psabs.com.br>  Mon, 10 Oct 2005 17:12:55 -0300
+
+webalizer (2.01.10-26) unstable; urgency=low
+
+  * Closes: #261046: "Warning: Skipping oversized log record" is not
+    suppressed by Quiet or ReallyQuiet   (changed to verbose>1  in
+    webalizer.c)
+  * Upgraded to libdb4.2
+
+ -- Remco van de Meent <remco@debian.org>  Sun, 25 Jul 2004 21:10:54 +0200
+
+webalizer (2.01.10-25) unstable; urgency=low
+
+  * By popular request: oversized log records (e.g. because of viruses
+    trying to access the web server, causing extremely long records) no
+    longer result in a error, but instead in a warning (closes: #258059)
+  * Display (locale) language name in output (closes: #202293, #202295)
+  * Fix ISO C99 problem with locale initialization, preventing
+    compilation on older gcc versions (closes: #252541)
+  * Add Catalan debconf translation (closes: #254869)
+  * Add Spanish debconf translation (closes: #251464)
+  * Add Dutch debconf translation (closes: #216937)
+  * Add some local Google sites to SearchEngine list (closes: #253830)
+
+ -- Remco van de Meent <remco@debian.org>  Fri,  9 Jul 2004 15:00:58 +0200
+
+webalizer (2.01.10-24) unstable; urgency=low
+
+  * Add Japanese debconf template translation, thanks to Hideki Yamane
+    (closes: #223454)
+  * DNS resolving works again (closes: #236321)
+  * Fix race condition which might cause webalizer to miss some entries
+    in the access.log (closes: #239831)
+  * Fix a possible buffer overflow causing incorrect xfer sizes in
+    output (closes: #218889)
+
+ -- Remco van de Meent <remco@debian.org>  Wed, 28 Apr 2004 20:24:12 +0200
+
+webalizer (2.01.10-23) unstable; urgency=low
+
+  * Added French debconf template translation, thanks to Christian
+    Perrier (closes: #220802)
+  * Fix debconf templates file for non-translatable strings (closes:
+    #220028)
+
+ -- Remco van de Meent <remco@debian.org>  Mon, 24 Nov 2003 21:05:03 +0100
+
+webalizer (2.01.10-22) unstable; urgency=low
+
+  * Upgraded to Standards-Version: 3.6.1
+  * Added po-debconf to build depends
+  * Fix problems with debconf, by "re-gettextizeing" the templates file
+    (closes: #218006, #215531, #215532)
+
+ -- Remco van de Meent <remco@debian.org>  Tue,  4 Nov 2003 14:39:31 +0100
+
+webalizer (2.01.10-21) unstable; urgency=low
+
+  * Add gettext to build depends to fix hppa port
+
+ -- Remco van de Meent <remco@debian.org>  Tue,  7 Oct 2003 23:28:22 +0200
+
+webalizer (2.01.10-20) unstable; urgency=low
+
+  * Remove German translation, is it was actually Danish (closes:
+    #202404)
+  * Update configuration template (closes: #203496)
+  * Updated Japanese translation, thanks to Tatsuki Sugiura (closes:
+    #201710)
+  * Fix problem with list of months, thanks to Brad Roberts  (closes:
+    #206171)
+
+ -- Remco van de Meent <remco@debian.org>  Tue,  7 Oct 2003 14:30:38 +0200
+
+webalizer (2.01.10-19) unstable; urgency=low
+
+  * Updated to Standards-Version 3.6.0
+  * List all months correctly again in index; applied patch from Tatsuki
+    Sugiura (closes: #200592, #201697)
+
+ -- Remco van de Meent <remco@debian.org>  Tue,  5 Aug 2003 12:51:56 +0200
+
+webalizer (2.01.10-18) unstable; urgency=low
+
+  * Fix trailing space error in cron job (closes: #199640)
+  * Added French translation of the debconf templates, thanks to Michel
+    Grentzinger (closes: #199980)
+  * Add gettext support for webalizer, thanks to Cyril Bouthors and
+    Johan Poirier
+
+ -- Remco van de Meent <remco@debian.org>  Sun,  6 Jul 2003 16:17:49 +0200
+
+webalizer (2.01.10-17) unstable; urgency=low
+
+  * Switch to gettext format for the debconf templates (closes: #199038)
+
+ -- Remco van de Meent <remco@debian.org>  Mon, 30 Jun 2003 21:16:19 +0200
+
+webalizer (2.01.10-16) unstable; urgency=low
+
+  * Updated standards-version to 3.5.10
+  * Change call from cron to include conf file (closes: #198084)
+  * Change cron files to test for logfile in configuration (closes:
+    #187029)
+
+ -- Remco van de Meent <remco@debian.org>  Sun, 22 Jun 2003 09:16:54 +0200
+
+webalizer (2.01.10-15) unstable; urgency=low
+
+  * Webalizer now recognizes Opera browsers (closes: #182980)
+
+ -- Remco van de Meent <remco@debian.org>  Fri,  7 Mar 2003 17:29:24 +0100
+
+webalizer (2.01.10-14) unstable; urgency=low
+
+  * Increase URL size in webalizer.h; hopefully this results in less
+    "oversized request field" warnings
+
+ -- Remco van de Meent <remco@debian.org>  Sun,  2 Feb 2003 21:23:26 +0100
+
+webalizer (2.01.10-13) unstable; urgency=low
+
+  * Fix MAXAGENT typo (closes: #177543)
+
+ -- Remco van de Meent <remco@debian.org>  Mon, 20 Jan 2003 12:44:50 +0100
+
+webalizer (2.01.10-12) unstable; urgency=low
+
+  * Include IPv6 support (patch from PLD) (closes: #128158)
+
+ -- Remco van de Meent <remco@debian.org>  Mon,  6 Jan 2003 13:52:34 +0100
+
+webalizer (2.01.10-11) unstable; urgency=low
+
+  * Redone debconf'ization
+  * Increased MAXAGENT in webalizer.h to 128 (closes: #171266)
+  * Old and already fixed bugs. Closes: #172382,#173589,#173652
+  * LFS support to cater for large log files (closes: #174394)
+  * Add localhost to Ignore lists (closes: #168418)
+  * Fix some possible buffer overflows (only exploitable with some weird
+    settings that require recompilation) (closes: #166126)
+
+ -- Remco van de Meent <remco@debian.org>  Sat, 28 Dec 2002 13:58:16 +0000
+
+webalizer (2.01.10-10) unstable; urgency=low
+
+  * Fix build dependencies (closes: #167074)
+
+ -- Remco van de Meent <remco@debian.org>  Thu, 31 Oct 2002 10:20:22 +0000
+
+webalizer (2.01.10-9) unstable; urgency=low
+
+  * Add example cron script for multiple configuration files to
+    documentation.
+  * Both cron.daily and cron.weekly scripts. Defaults should work fine
+    with apache. (closes: #162757)
+  * Check for logfile existence in cron scripts (closes: #148794)
+  * Fixed spelling errors in manual page (closes: #148711)
+
+ -- Remco van de Meent <remco@debian.org>  Tue, 29 Oct 2002 09:06:43 +0000
+
+webalizer (2.01.10-8) unstable; urgency=low
+
+  * Force the use of newer libgd2 to solve libpng issues (closes: #157917,
+    #157820)
+
+ -- Remco van de Meent <remco@debian.org>  Fri, 23 Aug 2002 08:44:26 +0000
+
+webalizer (2.01.10-7) unstable; urgency=low
+
+  * Recompile (closes: #157377)
+
+ -- Remco van de Meent <remco@debian.org>  Tue, 20 Aug 2002 10:58:38 +0000
+
+webalizer (2.01.10-6) unstable; urgency=low
+
+  * No longer use db1 (closes: #155871)
+
+ -- Remco van de Meent <remco@debian.org>  Fri,  9 Aug 2002 12:59:34 +0000
+
+webalizer (2.01.10-5) unstable; urgency=low
+
+  * Darn. Same fix. but now for real
+  * Add check for zero-sized logfiles (closes: #147445)
+
+ -- Remco van de Meent <remco@debian.org>  Sun, 26 May 2002 14:27:11 +0000
+
+webalizer (2.01.10-4) unstable; urgency=low
+
+  * Add check for zero-sized logfiles (closes: #147445)
+
+ -- Remco van de Meent <remco@debian.org>  Sun, 26 May 2002 13:19:39 +0000
+
+webalizer (2.01.10-3) unstable; urgency=medium
+
+  * Don't read config file twice in cron job (now really fixed) (closes:
+    #138097)
+  * Add debconf question to determine where the rotated logfile is
+    (closes: #117355, #145752, #144645)
+
+ -- Remco van de Meent <remco@debian.org>  Wed, 15 May 2002 18:30:53 +0200
+
+webalizer (2.01.10-2) unstable; urgency=medium
+
+  * Changed exit 1 into exit 0 in cron.daily scripts (closes: #143990)
+
+ -- Remco van de Meent <remco@debian.org>  Mon, 22 Apr 2002 09:51:16 +0200
+
+webalizer (2.01.10-1) unstable; urgency=high
+
+  * SECURITY New upstream release (closes: #143019)
+  * Upstream fix for weird crashes on certain logfiles (closes: #106164, #106165)
+  * Old bug on dns cache, fixed in earlier version (closes: #115099)
+  * Fixes for webalizer.conf generation (closes: #70559)
+  * Closing old bug that was already fixed (closes: #72875)
+  * Webalizer uses correct logfile (access.log.0) thus no information is
+    lost (closes: #95126, #117355)
+  * Another DNS cache problem fixed (closes: #106632)
+  * Webalizer now uses debconf (closes: #127904)
+  * Webalizer now uses libgd2, dependencies fixed (closes: #134793)
+  * Upgraded to Standards-Version: 3.5.6
+  * Webalizer now only reads the config file once in the cronjob
+    (closes: #138097)
+  * Spelling error in Description fixed (closes: #125474)
+
+ -- Remco van de Meent <remco@debian.org>  Wed, 17 Apr 2002 10:32:40 +0200
+
+webalizer (2.01.9-1) unstable; urgency=high
+
+  * SECURITY: New upstream release  (see upstream changelog for details)
+
+ -- Remco van de Meent <remco@debian.org>  Wed, 24 Oct 2001 12:17:54 +0200
+
+webalizer (2.01.6-7) unstable; urgency=low
+
+  * Incorporating changes from 2.01.6-6.1 NMU (closes: #95621)
+  * Changed build-depends on freetype2-dev to libttf-dev
+  * Changed build-depends on libdb2-dev to libdb3-dev
+  * Made sure that /usr/doc/webalizer -> ../share/doc/webalizer is made
+    (closes: #102455)
+
+ -- Remco van de Meent <remco@debian.org>  Mon,  9 Jul 2001 20:58:07 +0200
+
+webalizer (2.01.6-6.1) unstable; urgency=low
+
+  * NMU with permission of Remco van de Meent <remco@debian.org>.
+  * Added the missing build dependency on libdb2-dev and improved
+    the clean target in debian/rules. (closes: #95621)
+
+ -- Adrian Bunk <bunk@fs.tum.de>  Mon,  4 Jun 2001 11:40:02 +0200
+
+webalizer (2.01.6-6) unstable; urgency=low
+
+  * Removed INSTALL file from docs (closes: #94049)
+  * Added cron.daily script (closes: #83563)
+  * Included better sample.conf file (closes: #93631)
+  * Upgraded Standards-Version to 3.1.0
+
+ -- Remco van de Meent <remco@debian.org>  Fri, 20 Apr 2001 10:43:39 +0200
+
+webalizer (2.01.6-5) unstable; urgency=low
+
+  * Fixed postinst, closes: #85108
+
+ -- Remco van de Meent <remco@debian.org>  Tue,  6 Mar 2001 15:49:58 +0100
+
+webalizer (2.01.6-4) unstable; urgency=low
+
+  * Closing 'old' bug about DNS resolving (again) (closes: #78769)
+  * Fixed reference to README.FIRST in postinst (closes: #78861)
+  * Smoother upgrade (closes: #80920)
+  * Closing 'old' bug about webalizer manpage (closes: #78768)
+
+ -- Remco van de Meent <remco@debian.org>  Sat,  4 Jan 2001 11:59:21 +0100
+
+webalizer (2.01.6-3) unstable; urgency=low
+
+  * Closing 'old' bug about DNS resolving (closes: #78769)
+  * Made manpage for webazolver pointing the the webalizer.1 manpage
+    (closes: #78768)
+
+ -- Remco van de Meent <remco@debian.org>  Mon,  4 Dec 2000 16:49:52 +0100
+
+webalizer (2.01.6-2) unstable; urgency=low
+
+  * Compile with DNS options
+  * Closing not-so-relevant bugreport about problems on potato
+    (closes: #78486)
+
+ -- Remco van de Meent <remco@debian.org>  Mon,  4 Dec 2000 13:37:18 +0100
+
+webalizer (2.01.6-1) unstable; urgency=low
+
+  * New upstream release. Closes: Bug#74597
+  * Cleaning up old bugreports. Closes: Bug#69571, Bug#69900, Bug#67137,
+    Bug#68449, Bug#72082, Bug#60254, Bug#74138, Bug#72915
+
+ -- Remco van de Meent <remco@debian.org>  Tue, 28 Nov 2000 16:13:46 +0100
+
+webalizer (1.30.4-4.3) unstable; urgency=medium
+
+  * NMU to fix library dependencies. (Fixes: #67137, #68449, #69571, #69900)
+  * Added Build-Depends: field to control file. (Fixes: #72082)
+
+ -- Gerfried Fuchs <alfie@debian.org>  Thu, 21 Sep 2000 12:15:34 +0200
+
+webalizer (1.30.4-4.2) unstable; urgency=medium
+
+  * NMU at Remco's request to fix library dependencies. (Fixes: #67137)
+  * linked against libgd1
+
+ -- J.H.M. Dassen (Ray) <alfie@debian.org>  Wed, 20 Sep 2000 09:16:07 +0200
+
+webalizer (1.30.4-4.1) unstable; urgency=low
+
+  * NMU to coordinate with libgd
+
+ -- Frank Belew (Myth) <frb@debian.org>  Tue, 11 Jul 2000 14:46:53 -0700
+
+webalizer (1.30.4-4) unstable; urgency=low
+
+  * Fix in postinst, closes: Bug#60130
+  * Addresses Bug#60254, which has been forwarded upstream
+  * Package now lintian-clean.
+
+ -- Remco van de Meent <remco@debian.org>  Mon, 29 May 2000 12:28:24 +0200
+
+webalizer (1.30.4-3) unstable; urgency=low
+
+  * Updated to Standards-Version: 3.0.1.1
+
+ -- Remco van de Meent <remco@debian.org>  Tue, 26 Oct 1999 19:52:05 +0200
+
+webalizer (1.30.4-2) unstable; urgency=low
+
+  * Due to the new libgd1g, webalizer now uses PNG instead of GIF formatted.
+    The upstream author will put PNG support in webalizer in a next version
+    as well.
+
+ -- Remco van de Meent <remco@debian.org>  Sun,  5 Sep 1999 13:48:56 +0200
+
+webalizer (1.30.4-1) unstable; urgency=low
+
+  * New upstream version (closes: Bug#41097)
+  * Removes webalizer.conf on purge, closes: Bug#39570
+
+ -- Remco van de Meent <remco@debian.org>  Sun, 18 Jul 1999 14:19:58 +0200
+
+webalizer (1.22.3-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Remco van de Meent <remco@debian.org>  Tue,  6 Apr 1999 09:38:14 +0200
+
+webalizer (1.22.2-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Remco van de Meent <remco@debian.org>  Sun, 28 Mar 1999 13:08:15 +0200
+
+webalizer (1.22.1-1) unstable; urgency=low
+
+  * New upstream release
+  * Updated postinst with latest configuration directives
+
+ -- Remco van de Meent <remco@debian.org>  Wed, 24 Mar 1999 11:29:28 +0100
+
+webalizer (1.21.10-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Remco van de Meent <remco@debian.org>  Sun, 21 Mar 1999 15:29:32 +0100
+
+webalizer (1.21.7b-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Remco van de Meent <remco@debian.org>  Sat, 13 Mar 1999 12:14:36 +0100
+
+webalizer (1.21.6-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Remco van de Meent <remco@debian.org>  Tue,  9 Mar 1999 23:10:19 +0100
+
+webalizer (1.20.11-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Remco van de Meent <remco@debian.org>  Fri, 15 Jan 1999 02:01:34 +0100
+
+webalizer (1.20-4) unstable; urgency=low
+
+  * Converted debian/rules to dh_* style
+  * Fixed Architecture line in the control file, fixing bug #27452
+  * Little change in postinst to to support 'recursive' mkdir
+
+ -- Remco van de Meent <remco@debian.org>  Mon, 5 Oct 1998 21:57:58 +0200
+
+webalizer (1.20-3) unstable; urgency=low
+
+  * Changed the way the configuration file is generated
+  * Changes to postinst
+
+ -- Remco van de Meent <remco@debian.org>  Fri, 24 Jul 1998 00:42:06 +0200
+
+webalizer (1.20-2) unstable; urgency=low
+
+  * Fixed wrong placement of sample.conf
+
+ -- Remco van de Meent <remco@debian.org>  Thu, 23 Jul 1998 23:28:59 +0200
+
+webalizer (1.20-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Remco van de Meent <remco@debian.org>  Thu, 23 Jul 1998 19:39:59 +0200
+
+webalizer (1.12-2) unstable; urgency=low
+
+  * Added postinst script that asks some things about configuration of
+    webalizer
+
+ -- Remco van de Meent <remco@debian.org>  Sat, 20 Jun 1998 19:37:37 +0200
+
+webalizer (1.12-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Remco van de Meent <remco@debian.org>  Wed, 10 Jun 1998 20:07:55 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644 (file)
index 0000000..7f8f011
--- /dev/null
@@ -0,0 +1 @@
+7
diff --git a/debian/config b/debian/config
new file mode 100644 (file)
index 0000000..d3a549a
--- /dev/null
@@ -0,0 +1,86 @@
+#! /bin/sh
+# config script for webalizer
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# bogus - though necessary - rule
+. /usr/share/debconf/confmodule
+db_version 2.0
+
+case "$1" in
+    configure|reconfigure)
+      if [ "$2" ] && dpkg --compare-versions $2 lt 2.01.6-1; then
+        db_input high webalizer/upgrading || true
+        db_go
+      fi
+      
+      if [ "$2" ] && dpkg --compare-versions $2 lt 2.01.10-30; then
+        db_input high webalizer/upgrade2011030 || true
+        db_go
+      fi
+
+      if [ -f "/etc/webalizer.conf" ] && [ ! -f "/etc/webalizer/webalizer.conf" ]; then
+        [ -d /etc/webalizer/ ] || mkdir /etc/webalizer/;
+        mv /etc/webalizer.conf /etc/webalizer/webalizer.conf;
+      fi
+
+      conffile="/etc/webalizer/webalizer.conf"
+      OUTPUTDIR=""
+      REPORTTITLE=""
+      LOGFILE=""
+      if [ -f $conffile ]; then
+       # parse existing configuration.  This code happily
+       # concatenates multiple occurences of a configuration item,
+       # but that should never occur <frank@debian.org>.
+       OUTPUTDIR=`sed -ne '/^OutputDir/ {s@OutputDir[[:space:]]\([^[:space:]]*\)@\1@;p}' $conffile`
+       REPORTTITLE=`sed -ne '/^ReportTitle/ {s@ReportTitle[[:space:]]\([^[:space:]]*\)@\1@;p}' $conffile`
+       LOGFILE=`sed -ne '/^LogFile/ {s@LogFile[[:space:]]\([^[:space:]]*\)@\1@;p}' $conffile`
+      fi
+      # assign default values
+      [ -n "$OUTPUTDIR" ] || OUTPUTDIR="/var/www/webalizer"
+      [ -n "$REPORTTITLE" ] || REPORTTITLE="Usage statistics for"
+      if [ -z "$LOGFILE" ]; then
+        # apache2 found?
+       if [ -f /var/log/apache2/access.log.1 ] || [ -f /var/log/apache2/access.log ]; then
+          LOGFILE="/var/log/apache2/access.log.1";
+       else
+          LOGFILE="/var/log/apache/access.log.1";
+       fi
+      fi
+
+      # now preseed the debconf questions with what we found
+      db_set webalizer/directory "$OUTPUTDIR" || true
+      db_set webalizer/doc_title "$REPORTTITLE" || true
+      db_set webalizer/logfile "$LOGFILE" || true
+
+      # Ask for the directory the output should be put in
+      db_input medium webalizer/directory || true
+      db_go
+
+      # At this point, ask the user what the title of webalizer's reports should be
+      db_input medium webalizer/doc_title || true
+      db_go
+
+      # Ask for the rotated logfile
+      # by default  is access log file of apache, but if I found apache2 log file,
+      # I changed default to this one.
+      db_input medium webalizer/logfile || true
+      db_go
+
+      # Ask for enable DNSCache option
+      db_input medium webalizer/dnscache || true
+      db_go
+    ;;
+    *)
+        echo "config called with unknown argument \`$1'" >&2;
+        exit 1;
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+exit 0
+
diff --git a/debian/control b/debian/control
new file mode 100644 (file)
index 0000000..0e3c1e1
--- /dev/null
@@ -0,0 +1,25 @@
+Source: webalizer
+Priority: optional
+Section: web
+Maintainer: Julien Viard de Galbert <julien@vdg.blogsite.org>
+Uploaders: Felipe Augusto van de Wiel (faw) <faw@debian.org>
+Build-Depends: debhelper (>= 7.0.50~), libgd2-noxpm-dev | libgd2-xpm-dev, libfreetype6-dev, libpng12-dev, libdb-dev (>= 4.7), libgd2-noxpm | libgd2-xpm, libfreetype6, zlib1g-dev, gettext, po-debconf, autotools-dev, libgeoip-dev, autoconf, dh-autoreconf
+Standards-Version: 3.9.2
+Homepage: http://www.mrunix.net/webalizer/
+Vcs-Git: git://git.debian.org/collab-maint/webalizer.git
+Vcs-Browser: http://git.debian.org/?p=collab-maint/webalizer.git;a=summary
+
+Package: webalizer
+Architecture: any
+Suggests: httpd
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Pre-Depends: debconf (>= 1.4.58) | debconf-2.0
+Description: web server log analysis program
+ The Webalizer was designed to scan web server log files in various formats
+ and produce usage statistics in HTML format for viewing through a browser.
+ The Webalizer produces yearly, monthly, daily and hourly statistics.  In
+ the monthly reports, various statistics may be produced to show overall
+ usage, usage by day and hour, usage by visiting sites, URLs, user agents
+ (browsers), referrers and country.  The Webalizer is highly configurable by
+ use of either command line options or a configuration file, allowing the
+ program to be tailored to individual needs easily.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644 (file)
index 0000000..6b81307
--- /dev/null
@@ -0,0 +1,36 @@
+Format: http://dep.debian.net/deps/dep5/
+Upstream-Name: webalizer
+Upstream-Contact: Bradford L. Barrett <brad@mrunix.net>
+Source: http://www.mrunix.net/webalizer/
+
+Files: *
+Copyright: 1997-2009 Bradford L. Barrett <brad@mrunix.net>
+License: GPL-2+
+
+Files: debian/*
+Copyright: 1998-2005 Remco van de Meent <remco@debian.org>
+           2005-2006 Jose Carlos Medeiros <debian@psabs.com.br>
+           2007-2012 Felipe Augusto van de Wiel (faw) <faw@debian.org>
+           2010-2011 Julien Viard de Galbert <julien@vdg.blogsite.org>
+License: GPL-2+
+
+License: GPL-2+
+ 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, and provided that the above
+ copyright and permission notice is included with all distributed
+ copies of this or derived software.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
+
diff --git a/debian/dirs b/debian/dirs
new file mode 100644 (file)
index 0000000..310593a
--- /dev/null
@@ -0,0 +1,3 @@
+usr/bin
+etc/webalizer
+usr/share/man/man1
diff --git a/debian/docs b/debian/docs
new file mode 100644 (file)
index 0000000..3929ce2
--- /dev/null
@@ -0,0 +1,6 @@
+country-codes.txt
+DNS.README
+README
+README.FIRST
+msfree.png
+webalizer.png
diff --git a/debian/patches/01_symlink_vulnerability.diff b/debian/patches/01_symlink_vulnerability.diff
new file mode 100644 (file)
index 0000000..af6a8db
--- /dev/null
@@ -0,0 +1,33 @@
+From: Julien Viard de Galbert <julien@vdg.blogsite.org>
+Date: Tue, 23 Nov 2010 23:29:54 +0100
+Subject: Solve a symlink vulnerability
+
+In the same spirit as previous 08_symlink_vulnerability patch for #359745
+The .htaccess file creation did not test the symlink.
+
+Index: webalizer/output.c
+===================================================================
+--- webalizer.orig/output.c    2010-11-24 14:34:36.000000000 +0100
++++ webalizer/output.c 2010-11-24 14:36:56.000000000 +0100
+@@ -2408,6 +2408,21 @@
+    /* .htaccess file needed? */
+    if (htaccess)
+    {
++      struct stat out_stat;
++
++      /* stat the file */
++      if ( !(lstat(".htaccess", &out_stat)) )
++      {
++         /* check if the file a symlink */
++         if ( S_ISLNK(out_stat.st_mode) )
++         {
++            if (verbose)
++          fprintf(stderr,"%s %s (symlink)\n",msg_no_open,".htaccess");
++            return NULL;
++         }
++      }
++
++      /* open the file... */
+       if ((out_fp=fopen(".htaccess","wx")) != NULL)
+       {
+          fprintf(out_fp,"DirectoryIndex %s\n",index_fname);
diff --git a/debian/patches/02_fix_a_spelling_error.diff b/debian/patches/02_fix_a_spelling_error.diff
new file mode 100644 (file)
index 0000000..01b02b4
--- /dev/null
@@ -0,0 +1,28 @@
+From: Julien Viard de Galbert <julien@vdg.blogsite.org>
+Date: Wed, 24 Nov 2010 00:16:20 +0100
+Subject: Fix a spelling error
+
+Thank you lintian ;)
+
+Index: webalizer/wcmgr.c
+===================================================================
+--- webalizer.orig/wcmgr.c     2010-11-24 00:17:21.000000000 +0100
++++ webalizer/wcmgr.c  2010-11-24 00:20:19.000000000 +0100
+@@ -683,7 +683,7 @@
+    }
+    dns_db->close(dns_db, 0);
+    if (verbose)
+-      printf("%s sucessfully deleted from cache file\n",addr);
++      printf("%s successfully deleted from cache file\n",addr);
+ }
+ /*********************************************/
+@@ -761,7 +761,7 @@
+          if (db_put(addr, name, (strcmp(name,addr))?0:1, runtime)==0)
+             dns_db->close(dns_db,0);
+          if (verbose)
+-            printf("%s sucessfully added to cache file\n",addr);
++            printf("%s successfully added to cache file\n",addr);
+       }
+    }
+ }
diff --git a/debian/patches/05_apache_logio.diff b/debian/patches/05_apache_logio.diff
new file mode 100644 (file)
index 0000000..d442aa5
--- /dev/null
@@ -0,0 +1,3109 @@
+From: Jose Carlos Medeiros <debian@psabs.com.br>
+Subject: Added logio support for new apache2 mod_logio logfiles
+
+Origin: http://www.rexursive.com/software/apache.html
+
+This is based on previous patch [1] already adapted from the original patch [2]
+to integrate with other patches in debian package.
+A fix for upstream patch [3] is integrated.
+The patch was ported to webalizer 2.21-02
+by Julien Viard de Galbert <julien@vdg.blogsite.org>
+And later adapted to webalizer 2.23-03 with the help
+from Pim van den Berg <pim@nethuis.nl>, Thanks !
+
+ 1: 05_apache_logio.dpatch by Jose Carlos Medeiros <debian@psabs.com.br>
+ 2: ftp://ftp.rexursive.com/pub/webalizer/webalizer-in-out.patch.gz
+ 3: ftp://ftp.rexursive.com/pub/webalizer/webalizer-in-out-fix.patch.gz
+
+Index: webalizer/README.FIRST
+===================================================================
+--- webalizer.orig/README.FIRST        2011-04-18 23:54:32.000000000 +0200
++++ webalizer/README.FIRST     2011-04-18 23:56:44.000000000 +0200
+@@ -19,3 +19,12 @@
+ in the subject. Please do not send HTML formatted e-mails or e-mail
+ containing HTML tags as my mail server will reject them.  Thanks!
++###################  SUMMARY 05_apache_logio  ##########################
++
++##################
++# This Webalizer 2.01-10 patch intoduces necessary logic for presenting the
++# numbers collected by mod_logio in the reports. There are no special
++# configuration options required, just patch the Webalizer, configure it 
++# with the options you prefer, build it, install it and use it.
++##################
++
+Index: webalizer/graphs.c
+===================================================================
+--- webalizer.orig/graphs.c    2011-04-18 23:54:32.000000000 +0200
++++ webalizer/graphs.c 2011-04-18 23:56:44.000000000 +0200
+@@ -51,6 +51,8 @@
+ #define FILECOLOR  file_or_blue            /* files               */
+ #define SITECOLOR  site_or_orange          /* sites               */
+ #define KBYTECOLOR kbyte_or_red            /* KBytes              */
++#define IKBYTECOLOR file_or_blue           /* In KBytes           */
++#define OKBYTECOLOR hit_or_green           /* Out KBytes          */
+ #define PAGECOLOR  page_or_cyan            /* Files               */
+ #define VISITCOLOR visit_or_yellow         /* Visits              */
+@@ -106,7 +108,7 @@
+ {
+    /* local variables */
+-   int i,j,x1,y1,x2;
++   int i,j,k,x1,y1,x2;
+    int s_mth,s_year=0;
+    float cw,cs,co,ci;
+@@ -139,10 +141,24 @@
+    {
+       /* Kbytes Legend */
+       i = (strlen(msg_h_xfer)*6);
+-      gdImageString(im,gdFontSmall,491-i,237,
++      j = (strlen(msg_h_ixfer)*6);
++      k = (strlen(msg_h_oxfer)*6);
++      gdImageString(im,gdFontSmall,491-i-j-k-24,237,
+                     (unsigned char *)msg_h_xfer,dkgrey);
+-      gdImageString(im,gdFontSmall,490-i,236,
++      gdImageString(im,gdFontSmall,490-i-j-k-24,236,
+                     (unsigned char *)msg_h_xfer,KBYTECOLOR);
++      gdImageString(im,gdFontSmall,491-k-j-21,237,"/",dkgrey);
++      gdImageString(im,gdFontSmall,490-k-j-21,236,"/",black);
++      gdImageString(im,gdFontSmall,491-k-j-12,237,
++                    (unsigned char *)msg_h_ixfer,dkgrey);
++      gdImageString(im,gdFontSmall,490-k-j-12,236,
++                    (unsigned char *)msg_h_ixfer,IKBYTECOLOR);
++      gdImageString(im,gdFontSmall,491-k-9,237,"/",dkgrey);
++      gdImageString(im,gdFontSmall,490-k-9,236,"/",black);
++      gdImageString(im,gdFontSmall,491-k,237,
++                    (unsigned char *)msg_h_oxfer,dkgrey);
++      gdImageString(im,gdFontSmall,490-k,236,
++                    (unsigned char *)msg_h_oxfer,OKBYTECOLOR);
+       /* Sites/Visits Legend */
+       i = (strlen(msg_h_visits)*6);
+@@ -303,28 +319,56 @@
+    }
+    fmaxval=0.0;
+-   for (i=s_mth; i<HISTSIZE; i++)
++   for (i=s_mth; i<HISTSIZE; i++){
+        if (data[i].xfer > fmaxval) fmaxval = data[i].xfer;
++       if (data[i].ixfer > fmaxval) fmaxval = data[i].ixfer;
++       if (data[i].oxfer > fmaxval) fmaxval = data[i].oxfer;
++   }
+    if (fmaxval <= 0.0) fmaxval = 1.0;
+    sprintf(maxvaltxt, "%.0f", fmaxval);
+    gdImageStringUp(im, gdFontSmall,493,130+(strlen(maxvaltxt)*6),
+                    (unsigned char *)maxvaltxt,black);
+-   cs = 180.0/graph_mths; cw = (cs/2)+(co/2);
+-   ci = 308+((cw-co)/2);
++   cs = 180.0/graph_mths; cw = (cs/2);
++   co = (36/graph_mths<1)?1:36/graph_mths;
++   ci = 308+((cw-2*co)/2);
+    /* xfer */
+    for (i=s_mth; i<HISTSIZE; i++)
+    {
+       percent = ((float)data[i].xfer / (float)fmaxval);
+       if (percent <= 0.0) continue;
+-      x1 = ci+ ((i-s_mth)*cs);
++      x1 = ci + ((i-s_mth)*cs);
+       x2 = x1 + cw;
+       y1 = 232 - (percent * 98);
+       gdImageFilledRectangle(im, x1, y1, x2, 232, KBYTECOLOR);
+       if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
+    }
++   /* ixfer */
++   for (i=s_mth; i<HISTSIZE; i++)
++   {
++      percent = ((float)data[i].ixfer / (float)fmaxval);
++      if (percent <= 0.0) continue;
++      x1 = ci + co + ((i-s_mth)*cs);
++      x2 = x1 + cw;
++      y1 = 232 - (percent * 98);
++      gdImageFilledRectangle(im, x1, y1, x2, 232, IKBYTECOLOR);
++      if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
++   }
++
++   /* oxfer */
++   for (i=s_mth; i<HISTSIZE; i++)
++   {
++      percent = ((float)data[i].oxfer / (float)fmaxval);
++      if (percent <= 0.0) continue;
++      x1 = ci + co + co + ((i-s_mth)*cs);
++      x2 = x1 + cw;
++      y1 = 232 - (percent * 98);
++      gdImageFilledRectangle(im, x1, y1, x2, 232, OKBYTECOLOR);
++      if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
++   }
++
+    /* stat the file */
+    if ( !(lstat(fname, &out_stat)) )
+    {
+@@ -365,8 +409,10 @@
+                  u_int64_t  data2[31],     /* data2 (files)      */
+                  u_int64_t  data3[31],     /* data3 (sites)      */
+                  double     data4[31],     /* data4 (kbytes)     */
+-                 u_int64_t  data5[31],     /* data5 (views)      */
+-                 u_int64_t  data6[31])     /* data6 (visits)     */
++                 double     data5[31],     /* data4 (kbytes)     */
++                 double     data6[31],     /* data4 (kbytes)     */
++                 u_int64_t  data7[31],     /* data5 (views)      */
++                 u_int64_t  data8[31])     /* data6 (visits)     */
+ {
+    /* local variables */
+@@ -415,7 +461,7 @@
+    {
+        if (data1[i] > maxval) maxval = data1[i];           /* get max val    */
+        if (data2[i] > maxval) maxval = data2[i];
+-       if (data5[i] > maxval) maxval = data5[i];
++       if (data7[i] > maxval) maxval = data7[i];
+    }
+    if (maxval <= 0) maxval = 1;
+    sprintf(maxvaltxt, "%llu", maxval);
+@@ -425,22 +471,36 @@
+    if (graph_legend)                           /* Print color coded legends? */
+    {
+       /* Kbytes Legend */
++      i=(strlen(msg_h_xfer)*6);
++      j=(strlen(msg_h_ixfer)*6);
+       gdImageStringUp(im,gdFontSmall,494,376,
+                       (unsigned char *)msg_h_xfer,dkgrey);
+       gdImageStringUp(im,gdFontSmall,493,375,
+                       (unsigned char *)msg_h_xfer,KBYTECOLOR);
++      gdImageStringUp(im,gdFontSmall,494,376-i-3,"/",dkgrey);
++      gdImageStringUp(im,gdFontSmall,493,375-i-3,"/",black);
++      gdImageStringUp(im,gdFontSmall,494,376-i-12,
++                      (unsigned char *)msg_h_ixfer,dkgrey);
++      gdImageStringUp(im,gdFontSmall,493,375-i-12,
++                      (unsigned char *)msg_h_ixfer,IKBYTECOLOR);
++      gdImageStringUp(im,gdFontSmall,494,376-i-j-15,"/",dkgrey);
++      gdImageStringUp(im,gdFontSmall,493,375-i-j-15,"/",black);
++      gdImageStringUp(im,gdFontSmall,494,376-i-j-24,
++                      (unsigned char *)msg_h_oxfer,dkgrey);
++      gdImageStringUp(im,gdFontSmall,493,375-i-j-24,
++                      (unsigned char *)msg_h_oxfer,OKBYTECOLOR);
+       /* Sites/Visits Legend */
+       i = (strlen(msg_h_sites)*6);
+-      gdImageStringUp(im,gdFontSmall,494,276,
++      gdImageStringUp(im,gdFontSmall,494,256,
+                       (unsigned char *)msg_h_sites,dkgrey);
+-      gdImageStringUp(im,gdFontSmall,493,275,
++      gdImageStringUp(im,gdFontSmall,493,255,
+                       (unsigned char *)msg_h_sites,SITECOLOR);
+-      gdImageStringUp(im,gdFontSmall,494,276-i-3,(unsigned char *)"/",dkgrey);
+-      gdImageStringUp(im,gdFontSmall,493,275-i-3,(unsigned char *)"/",black);
+-      gdImageStringUp(im,gdFontSmall,494,276-i-12,
++      gdImageStringUp(im,gdFontSmall,494,256-i-3,(unsigned char *)"/",dkgrey);
++      gdImageStringUp(im,gdFontSmall,493,255-i-3,(unsigned char *)"/",black);
++      gdImageStringUp(im,gdFontSmall,494,256-i-12,
+                       (unsigned char *)msg_h_visits,dkgrey);
+-      gdImageStringUp(im,gdFontSmall,493,275-i-12,
++      gdImageStringUp(im,gdFontSmall,493,255-i-12,
+                       (unsigned char *)msg_h_visits,VISITCOLOR);
+       /* Pages/Files/Hits Legend */
+@@ -489,11 +549,11 @@
+       gdImageRectangle(im, x1, y1, x2, 176, black);
+    }
+-   /* data5 */
++   /* data7 */
+    for (i=0; i<31; i++)
+    {
+-      if (data5[i]==0) continue;
+-      percent = ((float)data5[i] / (float)maxval);
++      if (data7[i]==0) continue;
++      percent = ((float)data7[i] / (float)maxval);
+       if (percent <= 0.0) continue;
+       x1 = 29 + (i*15);
+       x2 = x1 + 7;
+@@ -507,7 +567,7 @@
+    for (i=0; i<31; i++)
+    {
+       if (data3[i]>maxval) maxval = data3[i];
+-      if (data6[i]>maxval) maxval = data6[i];
++      if (data8[i]>maxval) maxval = data8[i];
+    }
+    if (maxval <= 0) maxval = 1;
+    sprintf(maxvaltxt, "%llu", maxval);
+@@ -517,7 +577,7 @@
+    /* data 6 */
+    for (i=0; i<31; i++)
+    {
+-      percent = ((float)data6[i] / (float)maxval);
++      percent = ((float)data8[i] / (float)maxval);
+       if (percent <= 0.0) continue;
+       x1 = 25 + (i*15);
+       x2 = x1 + 8;
+@@ -538,26 +598,55 @@
+       gdImageRectangle(im, x1, y1, x2, 276, black);
+    }
+-   /* data4 */
++   /* xfer */
+    fmaxval=0.0;
+-   for (i=0; i<31; i++)
++   for (i=0; i<31; i++){
+       if (data4[i]>fmaxval) fmaxval = data4[i];
++      if (data5[i]>fmaxval) fmaxval = data5[i];
++      if (data6[i]>fmaxval) fmaxval = data6[i];
++   }
+    if (fmaxval <= 0.0) fmaxval = 1.0;
+    sprintf(maxvaltxt, "%.0f", fmaxval/1024);
+    gdImageStringUp(im, gdFontSmall,8,280+(strlen(maxvaltxt)*6),
+                    (unsigned char *)maxvaltxt, black);
+    
++   /* data4 */
+    for (i=0; i<31; i++)
+    {
+       percent = data4[i] / fmaxval;
+       if (percent <= 0.0) continue;
+-      x1 = 26 + (i*15);
+-      x2 = x1 + 10;
++      x1 = 25 + (i*15);
++      x2 = x1 + 7;
+       y1 = 375 - ( percent * 91 );
+       gdImageFilledRectangle(im, x1, y1, x2, 375, KBYTECOLOR);
+       gdImageRectangle(im, x1, y1, x2, 375, black);
+    }
++   /* data5 */
++   for (i=0; i<31; i++)
++   {
++      percent = data5[i] / fmaxval;
++      if (percent <= 0.0) continue;
++      x1 = 27 + (i*15);
++      x2 = x1 + 7;
++      y1 = 375 - ( percent * 91 );
++      gdImageFilledRectangle(im, x1, y1, x2, 375, IKBYTECOLOR);
++      gdImageRectangle(im, x1, y1, x2, 375, black);
++   }
++
++   /* data6 */
++   for (i=0; i<31; i++)
++   {
++      percent = data6[i] / fmaxval;
++      if (percent <= 0.0) continue;
++      x1 = 29 + (i*15);
++      x2 = x1 + 7;
++      y1 = 375 - ( percent * 91 );
++      gdImageFilledRectangle(im, x1, y1, x2, 375, OKBYTECOLOR);
++      gdImageRectangle(im, x1, y1, x2, 375, black);
++   }
++
++
+    /* stat the file */
+    if ( !(lstat(fname, &out_stat)) )
+    {
+Index: webalizer/graphs.h
+===================================================================
+--- webalizer.orig/graphs.h    2011-04-18 23:54:32.000000000 +0200
++++ webalizer/graphs.h 2011-04-18 23:56:44.000000000 +0200
+@@ -2,7 +2,8 @@
+ #define _GRAPHS_H
+ extern int  month_graph6(char *, char *, int, int, u_int64_t *,
+-             u_int64_t *, u_int64_t *, double *, u_int64_t *, u_int64_t *);
++             u_int64_t *, u_int64_t *, double *, double *, double *, u_int64_t *,
++             u_int64_t *);
+ extern int  year_graph6x(char *, char *, struct hist_rec *);
+ extern int  day_graph3(char *, char *, u_int64_t *, u_int64_t *, u_int64_t *);
+ extern int  pie_chart(char *, char *, u_int64_t, u_int64_t *, char **);
+Index: webalizer/hashtab.c
+===================================================================
+--- webalizer.orig/hashtab.c   2011-04-18 23:54:39.000000000 +0200
++++ webalizer/hashtab.c        2011-04-18 23:56:44.000000000 +0200
+@@ -155,6 +155,8 @@
+                u_int64_t count, /* hit count */
+                u_int64_t file,  /* File flag */
+                double    xfer,  /* xfer size */
++               double    ixfer, /* in xfer size */
++               double    oxfer, /* out xfer size */
+                u_int64_t *ctr,  /* counter   */
+                u_int64_t visit, /* visits    */
+                u_int64_t tstamp,/* timestamp */
+@@ -177,6 +179,8 @@
+          nptr->count = count;
+          nptr->files = file;
+          nptr->xfer  = xfer;
++         nptr->ixfer = ixfer;
++         nptr->oxfer = oxfer;
+          nptr->next  = NULL;
+          htab[hval] = nptr;
+          if (type!=OBJ_GRP) (*ctr)++;
+@@ -219,9 +223,11 @@
+             if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP)))
+             {
+                /* found... bump counter */
+-               cptr->count+=count;
+-               cptr->files+=file;
+-               cptr->xfer +=xfer;
++               cptr->count +=count;
++               cptr->files +=file;
++               cptr->xfer  +=xfer;
++               cptr->ixfer +=ixfer;
++               cptr->oxfer +=oxfer;
+                if (ispage(log_rec.url))
+                {
+@@ -253,6 +259,8 @@
+          nptr->count = count;
+          nptr->files = file;
+          nptr->xfer  = xfer;
++         nptr->ixfer = ixfer;
++         nptr->oxfer = oxfer;
+          nptr->next  = htab[hval];
+          htab[hval]=nptr;
+          if (type!=OBJ_GRP) (*ctr)++;
+@@ -361,6 +369,7 @@
+ /*********************************************/
+ int put_unode(char *str, int type, u_int64_t count, double xfer,
++              double ixfer, double oxfer,
+               u_int64_t *ctr, u_int64_t entry, u_int64_t exit, UNODEPTR *htab)
+ {
+    UNODEPTR cptr,nptr;
+@@ -378,6 +387,8 @@
+          nptr->flag = type;
+          nptr->count= count;
+          nptr->xfer = xfer;
++         nptr->ixfer= ixfer;
++         nptr->oxfer= oxfer;
+          nptr->next = NULL;
+          nptr->entry= entry;
+          nptr->exit = exit;
+@@ -395,8 +406,10 @@
+             if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP)))
+             {
+                /* found... bump counter */
+-               cptr->count+=count;
+-               cptr->xfer += xfer;
++               cptr->count +=count;
++               cptr->xfer  += xfer;
++               cptr->ixfer += ixfer;
++               cptr->oxfer += oxfer;
+                return 0;
+             }
+          }
+@@ -408,6 +421,8 @@
+          nptr->flag = type;
+          nptr->count= count;
+          nptr->xfer = xfer;
++         nptr->ixfer= ixfer;
++         nptr->oxfer= oxfer;
+          nptr->next = htab[hval];
+          nptr->entry= entry;
+          nptr->exit = exit;
+@@ -846,6 +861,8 @@
+                u_int64_t count, /* hit count */
+                u_int64_t file,  /* File flag */
+                double    xfer,  /* xfer size */
++               double    ixfer, /* in xfer size */
++               double    oxfer, /* out xfer size */
+                u_int64_t *ctr,  /* counter   */
+                u_int64_t visit, /* visits    */
+                u_int64_t tstamp,/* timestamp */
+@@ -867,6 +884,8 @@
+          nptr->count = count;
+          nptr->files = file;
+          nptr->xfer  = xfer;
++         nptr->ixfer = ixfer;
++         nptr->oxfer = oxfer;
+          nptr->next  = NULL;
+          htab[hval] = nptr;
+          if (type!=OBJ_GRP) (*ctr)++;
+@@ -893,9 +912,11 @@
+             if ((type==cptr->flag)||((type!=OBJ_GRP)&&(cptr->flag!=OBJ_GRP)))
+             {
+                /* found... bump counter */
+-               cptr->count+=count;
+-               cptr->files+=file;
+-               cptr->xfer +=xfer;
++               cptr->count +=count;
++               cptr->files +=file;
++               cptr->xfer  +=xfer;
++               cptr->ixfer +=ixfer;
++               cptr->oxfer +=oxfer;
+                if (ispage(log_rec.url))
+                {
+@@ -915,6 +936,8 @@
+          nptr->count = count;
+          nptr->files = file;
+          nptr->xfer  = xfer;
++         nptr->ixfer = ixfer;
++         nptr->oxfer = oxfer;
+          nptr->next  = htab[hval];
+          htab[hval]  = nptr;
+          if (type!=OBJ_GRP) (*ctr)++;
+Index: webalizer/hashtab.h
+===================================================================
+--- webalizer.orig/hashtab.h   2011-04-18 23:54:32.000000000 +0200
++++ webalizer/hashtab.h        2011-04-18 23:56:44.000000000 +0200
+@@ -32,6 +32,8 @@
+            u_int64_t tstamp;
+                 char *lasturl;
+               double xfer;
++              double ixfer;
++              double oxfer;
+               struct hnode *next; };
+ struct unode {  char *string;              /* url hash table structure     */
+@@ -41,6 +43,8 @@
+            u_int64_t entry;                /* entry page counter           */
+            u_int64_t exit;                 /* exit page counter            */
+               double xfer;                 /* xfer size in bytes           */
++              double ixfer;                /* in xfer size in bytes        */
++              double oxfer;                /* out xfer size in bytes       */
+               struct unode *next; };       /* pointer to next node         */
+ struct rnode {  char *string;              /* referrer hash table struct   */
+@@ -64,6 +68,8 @@
+            u_int64_t visit;
+            u_int64_t tstamp;
+               double xfer;
++              double ixfer;
++              double oxfer;
+               struct inode *next; };
+ extern HNODEPTR sm_htab[MAXHASH];             /* hash tables               */
+@@ -77,11 +83,11 @@
+ extern DNODEPTR host_table[MAXHASH];          /* DNS resolver table        */
+ #endif
+-extern int    put_hnode(char *, int, u_int64_t, u_int64_t, double,
++extern int    put_hnode(char *, int, u_int64_t, u_int64_t, double, double, double,
+                         u_int64_t *, u_int64_t, u_int64_t, char *, HNODEPTR *);
+-extern int    put_unode(char *, int, u_int64_t, double, u_int64_t *,
++extern int    put_unode(char *, int, u_int64_t, double, double, double, u_int64_t *,
+                         u_int64_t, u_int64_t, UNODEPTR *);
+-extern int    put_inode(char *, int, u_int64_t, u_int64_t, double,
++extern int    put_inode(char *, int, u_int64_t, u_int64_t, double, double, double,
+                         u_int64_t *, u_int64_t, u_int64_t, INODEPTR *);
+ extern int    put_rnode(char *, int, u_int64_t, u_int64_t *, RNODEPTR *);
+ extern int    put_anode(char *, int, u_int64_t, u_int64_t *, ANODEPTR *);
+Index: webalizer/lang.h
+===================================================================
+--- webalizer.orig/lang.h      2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang.h   2011-04-18 23:56:44.000000000 +0200
+@@ -108,6 +108,8 @@
+ extern char *msg_h_files ;
+ extern char *msg_h_sites ;
+ extern char *msg_h_xfer  ;
++extern char *msg_h_ixfer ;
++extern char *msg_h_oxfer ;
+ extern char *msg_h_hname ;
+ extern char *msg_h_url   ;
+ extern char *msg_h_agent ;
+@@ -132,6 +134,8 @@
+ extern char *msg_mtot_th ;
+ extern char *msg_mtot_tf ;
+ extern char *msg_mtot_tx ;
++extern char *msg_mtot_ix ;
++extern char *msg_mtot_ox ;
+ extern char *msg_mtot_us ;
+ extern char *msg_mtot_ur ;
+ extern char *msg_mtot_ua ;
+@@ -144,6 +148,8 @@
+ extern char *msg_mtot_msd;
+ extern char *msg_mtot_mvd;
+ extern char *msg_mtot_mkd;
++extern char *msg_mtot_ikd;
++extern char *msg_mtot_okd;
+ extern char *msg_mtot_rc ;
+ extern char *msg_dtot_ds ;
+Index: webalizer/lang/webalizer_lang.catalan
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.catalan 2011-04-18 23:54:39.000000000 +0200
++++ webalizer/lang/webalizer_lang.catalan      2011-04-18 23:56:44.000000000 +0200
+@@ -224,7 +224,9 @@
+ char *msg_h_visits= "Visites";
+ char *msg_h_files = "Fitxers";
+ char *msg_h_sites = "Navegadors";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Visitant";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Navegador";
+@@ -251,6 +253,8 @@
+ char *msg_mtot_th = "Accessos totals";
+ char *msg_mtot_tf = "Fitxers totals";
+ char *msg_mtot_tx = "KBytes totals";
++char *msg_mtot_ix = "In KBytes totals";
++char *msg_mtot_ox = "Out KBytes totals";
+ char *msg_mtot_us = "Servidors totals";
+ char *msg_mtot_ur = "Referents totals";
+ char *msg_mtot_ua = "Navegadors totals";
+@@ -263,6 +267,8 @@
+ char *msg_mtot_msd= "Servidors per dia";
+ char *msg_mtot_mvd= "Visites per dia";
+ char *msg_mtot_mkd= "KBytes per dia";
++char *msg_mtot_ikd= "In KBytes per dia";
++char *msg_mtot_okd= "Out KBytes per dia";
+ char *msg_mtot_rc = "Accessos segons codi de resposta";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.chinese
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.chinese 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.chinese      2011-04-18 23:56:44.000000000 +0200
+@@ -218,7 +218,9 @@
+ char *msg_h_visits= "Visits";
+ char *msg_h_files = "ÀÉ®×";
+ char *msg_h_sites = "ºô¯¸¼Æ";
+-char *msg_h_xfer  = "¶Ç°e¶q¡]KB¡^";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "¥D¾÷¦WºÙ";
+ char *msg_h_url   = "ºô­¶¸ô®|";
+ char *msg_h_agent = "ÂsÄý¾¹";
+@@ -245,6 +247,8 @@
+ char *msg_mtot_th = "Á`Ū¨ú¼Æ";
+ char *msg_mtot_tf = "Á`ÀÉ®×¼Æ";
+ char *msg_mtot_tx = "Á`¶Ç°e¶q¡]KB¡^";
++char *msg_mtot_ix = "Total kB In";
++char *msg_mtot_ox = "Total kB Out";
+ char *msg_mtot_us = "¨Ó·½ºô¯¸Á`¼Æ¡]¤£¥]§t­«ÂЪ̡^";
+ char *msg_mtot_ur = "¨Ó·½ºô­¶Á`¼Æ¡]¤£¥]§t­«ÂЪ̡^";
+ char *msg_mtot_ua = "¨Ó·½ÂsÄý¾¹Á`¼Æ¡]¤£¥]§t­«ÂЪ̡^";
+@@ -256,7 +260,9 @@
+ char *msg_mtot_mpd= "Pages per Day";
+ char *msg_mtot_msd= "Sites per Day";
+ char *msg_mtot_mvd= "Visits per Day";
+-char *msg_mtot_mkd= "KBytes per Day";
++char *msg_mtot_mkd= "kB Files per Day";
++char *msg_mtot_ikd= "kB In per Day";
++char *msg_mtot_okd= "kB Out per Day";
+ char *msg_mtot_rc = "ºô­¶Åª¨ú®É¤§¦^À³¥N½X";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.croatian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.croatian        2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.croatian     2011-04-18 23:56:44.000000000 +0200
+@@ -215,7 +215,9 @@
+ char *msg_h_visits= "Posjeta";
+ char *msg_h_files = "Datoteka";
+ char *msg_h_sites = "Kompjutera";
+-char *msg_h_xfer  = "KB";
++char *msg_h_xfer  = "kB D";
++char *msg_h_ixfer = "kB U";
++char *msg_h_oxfer = "kB Van";
+ char *msg_h_hname = "Kompjuter";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Korisnicki program";
+@@ -241,7 +243,9 @@
+ char *msg_mtot_ms = "Mjesecna statistika za";
+ char *msg_mtot_th = "Ukupno pristupa";
+ char *msg_mtot_tf = "Ukupno datoteka";
+-char *msg_mtot_tx = "Ukupno KBajta";
++char *msg_mtot_tx = "Ukupno kB datoteka";
++char *msg_mtot_ix = "Ukupno kB unutra";
++char *msg_mtot_ox = "Ukupno kB van";
+ char *msg_mtot_us = "Ukupno razlicitih kompjutera";
+ char *msg_mtot_ur = "Ukupno razlicitih referiranja";
+ char *msg_mtot_ua = "Ukupno razlicitih browsera";
+@@ -253,7 +257,9 @@
+ char *msg_mtot_mpd= "Datoteka na sat";
+ char *msg_mtot_msd= "Kompjutera na dan";
+ char *msg_mtot_mvd= "Posjeta na dan";
+-char *msg_mtot_mkd= "KBajta na dan";
++char *msg_mtot_mkd= "kB Datatoka na dan";
++char *msg_mtot_ikd= "kB Unutra na dan";
++char *msg_mtot_okd= "kB Van na dan";
+ char *msg_mtot_rc = "Pristupa po kodu";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.czech
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.czech   2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.czech        2011-04-18 23:56:44.000000000 +0200
+@@ -226,7 +226,9 @@
+ char *msg_h_visits= "Náv¹tìv";
+ char *msg_h_files = "Souborù";
+ char *msg_h_sites = "Míst";
+-char *msg_h_xfer  = "KBytù";
++char *msg_h_xfer  = "kB S";
++char *msg_h_oxfer = "kB In";
++char *msg_h_ixfer = "kB Out";
+ char *msg_h_hname = "Poèítaè";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Prohlí¾eè";
+@@ -252,7 +254,9 @@
+ char *msg_mtot_ms = "Mìsíèní statistiky za";
+ char *msg_mtot_th = "Celkem náv¹tìv";
+ char *msg_mtot_tf = "Celkem souborù";
+-char *msg_mtot_tx = "Celkem KBytù";
++char *msg_mtot_tx = "Celkem kB souborù";
++char *msg_mtot_ix = "Celkem kB In";
++char *msg_mtot_ox = "Celkem kB Out";
+ char *msg_mtot_us = "Celkem jedineèných míst";
+ char *msg_mtot_ur = "Celkem jedineèných odkazovaèù";
+ char *msg_mtot_ua = "Celkem jedineèných Prohlí¾eèù";
+@@ -265,6 +269,8 @@
+ char *msg_mtot_msd= "Míst za den";
+ char *msg_mtot_mvd= "Náv¹tìv za den";
+ char *msg_mtot_mkd= "KBytù za den";
++char *msg_mtot_ikd= "kBytù In za den";
++char *msg_mtot_okd= "kBytù Out za den";
+ char *msg_mtot_rc = "Náv¹tìvy podle kódu odpovìdi";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.danish
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.danish  2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.danish       2011-04-18 23:56:44.000000000 +0200
+@@ -218,7 +218,9 @@
+ char *msg_h_visits= "Besøg";
+ char *msg_h_files = "Filer";
+ char *msg_h_sites = "Gæster";
+-char *msg_h_xfer  = "kB";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Navn/IP-adresse";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Browser";
+@@ -244,7 +246,9 @@
+ char *msg_mtot_ms = "Månedlig statistik for";
+ char *msg_mtot_th = "Forespørgsler";
+ char *msg_mtot_tf = "Filer";
+-char *msg_mtot_tx = "kB";
++char *msg_mtot_tx = "kB Filer";
++char *msg_mtot_ix = "kB In";
++char *msg_mtot_ox = "kB Out";
+ char *msg_mtot_us = "Unikke gæster";
+ char *msg_mtot_ur = "Unikke henvisende sider";
+ char *msg_mtot_ua = "Unikke browsere";
+@@ -256,7 +260,9 @@
+ char *msg_mtot_mpd= "Sider pr. dag";
+ char *msg_mtot_msd= "Gæster pr. dag";
+ char *msg_mtot_mvd= "Besøg pr. dag";
+-char *msg_mtot_mkd= "kB pr. dag";
++char *msg_mtot_mkd= "kB Filer pr. dag";
++char *msg_mtot_ikd= "kB Out pr. dag";
++char *msg_mtot_okd= "kB In pr. dag";
+ char *msg_mtot_rc = "Forespørgsler fordelt på svarkoder";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.dutch
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.dutch   2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.dutch        2011-04-18 23:56:44.000000000 +0200
+@@ -234,7 +234,9 @@
+ char *msg_h_visits= "Bezoeken";
+ char *msg_h_files = "Bestanden";
+ char *msg_h_sites = "Hosts";
+-char *msg_h_xfer  = "kB"; /* afgekort i.v.m. onderschrift grafiek */
++char *msg_h_xfer  = "kB B"; /* afgekort i.v.m. onderschrift grafiek */
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Host(naam)";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Browser";
+@@ -260,7 +262,9 @@
+ char *msg_mtot_ms = "Maandoverzicht -";
+ char *msg_mtot_th = "Totaal hits";
+ char *msg_mtot_tf = "Totaal bestanden";
+-char *msg_mtot_tx = "Totaal kilobytes";
++char *msg_mtot_tx = "Totaal kB bestanden";
++char *msg_mtot_ix = "Totaal kB In";
++char *msg_mtot_ox = "Totaal kB Out";
+ char *msg_mtot_us = "Totaal verschillende hosts";
+ char *msg_mtot_ur = "Totaal verschillende verwijzers";
+ char *msg_mtot_ua = "Totaal verschillende browsers";
+@@ -272,7 +276,9 @@
+ char *msg_mtot_mpd= "Pagina's per dag";
+ char *msg_mtot_msd= "Hosts per dag";
+ char *msg_mtot_mvd= "Bezoeken per dag";
+-char *msg_mtot_mkd= "Kilobytes per dag";
++char *msg_mtot_mkd= "kB Bestanden per dag";
++char *msg_mtot_ikd= "kB In per dag";
++char *msg_mtot_okd= "kB Out per dag";
+ char *msg_mtot_rc = "Hits per 'Response Code'";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.english
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.english 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.english      2011-04-18 23:56:44.000000000 +0200
+@@ -219,7 +219,9 @@
+ char *msg_h_visits= "Visits";
+ char *msg_h_files = "Files";
+ char *msg_h_sites = "Sites";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Hostname";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "User Agent";
+@@ -245,7 +247,9 @@
+ char *msg_mtot_ms = "Monthly Statistics for";
+ char *msg_mtot_th = "Total Hits";
+ char *msg_mtot_tf = "Total Files";
+-char *msg_mtot_tx = "Total KBytes";
++char *msg_mtot_tx = "Total kB Files";
++char *msg_mtot_ix = "Total kB In";
++char *msg_mtot_ox = "Total kB Out";
+ char *msg_mtot_us = "Total Unique Sites";
+ char *msg_mtot_ur = "Total Unique Referrers";
+ char *msg_mtot_ua = "Total Unique User Agents";
+@@ -257,7 +261,9 @@
+ char *msg_mtot_mpd= "Pages per Day";
+ char *msg_mtot_msd= "Sites per Day";
+ char *msg_mtot_mvd= "Visits per Day";
+-char *msg_mtot_mkd= "KBytes per Day";
++char *msg_mtot_mkd= "kB Files per Day";
++char *msg_mtot_ikd= "kB In per Day";
++char *msg_mtot_okd= "kB Out per Day";
+ char *msg_mtot_rc = "Hits by Response Code";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.estonian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.estonian        2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.estonian     2011-04-18 23:56:44.000000000 +0200
+@@ -218,7 +218,9 @@
+ char *msg_h_visits= "Külastusi";
+ char *msg_h_files = "Faile";
+ char *msg_h_sites = "Arvuteid";
+-char *msg_h_xfer  = "KBaite";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Server";
+ char *msg_h_url   = "Aadress";
+ char *msg_h_agent = "Lehitseja";
+@@ -244,7 +246,9 @@
+ char *msg_mtot_ms = "Kuu statistika";
+ char *msg_mtot_th = "Kokku Pöördumisi";
+ char *msg_mtot_tf = "Kokku Faile";
+-char *msg_mtot_tx = "Kokku KBaite";
++char *msg_mtot_tx = "Kokku kB Faile";
++char *msg_mtot_ix = "Kokku kB In";
++char *msg_mtot_ox = "Kokku kB Out";
+ char *msg_mtot_us = "Kokku Erinevaid Kasutajaid";
+ char *msg_mtot_ur = "Kokku Erinevaid Viitajaid";
+ char *msg_mtot_ua = "Kokku Erinevaid Lehitsejaid";
+@@ -256,7 +260,9 @@
+ char *msg_mtot_mpd= "Lehekülgi Päevas";
+ char *msg_mtot_msd= "Külastajaarvutist Päevas";
+ char *msg_mtot_mvd= "Visiite Päevas";
+-char *msg_mtot_mkd= "KBaite Päevas";
++char *msg_mtot_mkd= "kB Faile Päevas";
++char *msg_mtot_ikd= "kB In Päevas";
++char *msg_mtot_okd= "kB Out Päevas";
+ char *msg_mtot_rc = "Pöördumisi vastusetüüpide kaupa";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.finnish
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.finnish 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.finnish      2011-04-18 23:56:44.000000000 +0200
+@@ -226,7 +226,9 @@
+ char *msg_h_visits= "vierailuja";
+ char *msg_h_files = "tiedostoja";
+ char *msg_h_sites = "koneita";
+-char *msg_h_xfer  = "kilotavuja";
++char *msg_h_xfer  = "kB T";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Välityspalvelin";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Käytetyt selaimet";
+@@ -252,7 +254,9 @@
+ char *msg_mtot_ms = "Kuukausitilastot";
+ char *msg_mtot_th = "Osumia yhteensä";
+ char *msg_mtot_tf = "Tiedostoja yhteensä";
+-char *msg_mtot_tx = "Kilotavuja yhteensä";
++char *msg_mtot_tx = "kB Tiedostoja yhteensä";
++char *msg_mtot_ix = "kB In yhteensä";
++char *msg_mtot_ox = "kB Out yhteensä";
+ char *msg_mtot_us = "Yhteensä erilaisia koneita";
+ char *msg_mtot_ur = "Yhteensä erilaisia hakupalvelimia";
+ char *msg_mtot_ua = "Yhteensä erilaisia selaimia";
+@@ -264,7 +268,9 @@
+ char *msg_mtot_mpd= "Sivuja / päivä";
+ char *msg_mtot_msd= "Koneita / päivä";
+ char *msg_mtot_mvd= "Vierailuja / päivä";
+-char *msg_mtot_mkd= "Kilotavuja / päivä";
++char *msg_mtot_mkd= "kB Tiedostoja / päivä";
++char *msg_mtot_ikd= "kB In / päivä";
++char *msg_mtot_okd= "kB Out / päivä";
+ char *msg_mtot_rc = "Osumien vastauskoodit";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.french
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.french  2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.french       2011-04-18 23:56:44.000000000 +0200
+@@ -253,7 +253,9 @@
+ char *msg_h_visits= "Visites";
+ char *msg_h_files = "Fichiers";
+ char *msg_h_sites = "Sites";
+-char *msg_h_xfer  = "Ko";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Nom d'h&ocirc;te";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Navigateur";
+@@ -279,7 +281,9 @@
+ char *msg_mtot_ms = "Statistiques mensuelles pour";
+ char *msg_mtot_th = "Total des Hits";
+ char *msg_mtot_tf = "Total des Fichiers";
+-char *msg_mtot_tx = "Total des Ko";
++char *msg_mtot_tx = "Total des kB Fichiers";
++char *msg_mtot_ix = "Total des kB In";
++char *msg_mtot_ox = "Total des kB Out";
+ char *msg_mtot_us = "Total des Sites uniques";
+ char *msg_mtot_ur = "Total des R&eacute;f&eacute;rents uniques";
+ char *msg_mtot_ua = "Total des Navigateurs";
+@@ -291,7 +295,9 @@
+ char *msg_mtot_mpd= "Pages par Jour";
+ char *msg_mtot_msd= "Sites par Jour";
+ char *msg_mtot_mvd= "Visites par Jour";
+-char *msg_mtot_mkd= "KOctets par Jour";
++char *msg_mtot_mkd= "kB Fichiers par Jour";
++char *msg_mtot_ikd= "kB In par Jour";
++char *msg_mtot_okd= "kB Out par Jour";
+ char *msg_mtot_rc = "Hits par code de r&eacute;ponse";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.galician
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.galician        2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.galician     2011-04-18 23:56:44.000000000 +0200
+@@ -223,7 +223,9 @@
+ char *msg_h_visits= "Visitas";
+ char *msg_h_files = "Arquivos";
+ char *msg_h_sites = "Clientes";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB A";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Máquina";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Programa cliente";
+@@ -249,7 +251,9 @@
+ char *msg_mtot_ms = "Estatísticas mensuais de";
+ char *msg_mtot_th = "Total Accesos";
+ char *msg_mtot_tf = "Total Arquivos";
+-char *msg_mtot_tx = "Total KBytes";
++char *msg_mtot_tx = "Total kB Arquivos";
++char *msg_mtot_ix = "Total kB In";
++char *msg_mtot_ox = "Total kB Out";
+ char *msg_mtot_us = "Total Clientes";
+ char *msg_mtot_ur = "Total Ligazóns orixe";
+ char *msg_mtot_ua = "Total Programas visores";
+@@ -261,7 +265,9 @@
+ char *msg_mtot_mpd= "Páxinas por Día";
+ char *msg_mtot_msd= "Clientes por Día";
+ char *msg_mtot_mvd= "Visitas por Día";
+-char *msg_mtot_mkd= "KBytes por Día";
++char *msg_mtot_mkd= "kB Arquivos por Día";
++char *msg_mtot_ikd= "kB In por Día";
++char *msg_mtot_okd= "kB Out por Día";
+ char *msg_mtot_rc = "Accesos por código de resposta";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.german
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.german  2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.german       2011-04-18 23:56:44.000000000 +0200
+@@ -243,7 +243,9 @@
+ char *msg_h_visits= "Besuche";
+ char *msg_h_files = "Dateien";
+ char *msg_h_sites = "Rechner";
+-char *msg_h_xfer  = "kb";
++char *msg_h_xfer  = "kB D";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Rechnername";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Anwenderprogramm";
+@@ -269,7 +271,9 @@
+ char *msg_mtot_ms = "Monats-Statistik f&uuml;r";
+ char *msg_mtot_th = "Summe der Anfragen";
+ char *msg_mtot_tf = "Summe der Dateien";
+-char *msg_mtot_tx = "Summe in kb";
++char *msg_mtot_tx = "Summe kB Dateien";
++char *msg_mtot_ix = "Summe kB In";
++char *msg_mtot_ox = "Summe kB Out";
+ char *msg_mtot_us = "Summe der unterschiedlichen Rechner (IP-Adressen)";
+ char *msg_mtot_ur = "Summe der unterschiedlichen Verweise";
+ char *msg_mtot_ua = "Summe der unterschiedlichen Anwenderprogramme";
+@@ -281,7 +285,9 @@
+ char *msg_mtot_mpd= "Seiten pro Tag";
+ char *msg_mtot_msd= "Rechner (IP-Adressen) pro Tag";
+ char *msg_mtot_mvd= "Besuche pro Tag";
+-char *msg_mtot_mkd= "kb pro Tag";
++char *msg_mtot_mkd= "kB Dateien pro Tag";
++char *msg_mtot_ikd= "kB In pro Tag";
++char *msg_mtot_okd= "kB Out pro Tag";
+ char *msg_mtot_rc = "Anfragen nach Status-Codes";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.greek
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.greek   2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.greek        2011-04-18 23:56:44.000000000 +0200
+@@ -217,7 +217,9 @@
+ char *msg_h_visits= "ÅðéóêÝøåéò";
+ char *msg_h_files = "Áñ÷åßá";
+ char *msg_h_sites = "ÓõóôÞìáôá";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Óýóôçìá";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Ðñüãñáììá";
+@@ -243,7 +245,9 @@
+ char *msg_mtot_ms = "ÓõãêåíôñùôéêÜ óôïé÷åßá ãéá ôï ìÞíá";
+ char *msg_mtot_th = "ÓõíïëéêÜ Hits";
+ char *msg_mtot_tf = "Óýíïëï áñ÷åßùí";
+-char *msg_mtot_tx = "Óýíïëï KBytes";
++char *msg_mtot_tx = "Óýíïëï kB áñ÷åßùí";
++char *msg_mtot_ix = "Óýíïëï kB In";
++char *msg_mtot_ox = "Óýíïëï kB Out";
+ char *msg_mtot_us = "Óýíïëï äéáöïñåôéêþí óõóôçìÜôùí";
+ char *msg_mtot_ur = "Óýíïëï äéáöïñåôéêþí áíáöåñüíôùí";
+ char *msg_mtot_ua = "Óýíïëï äéáöïñåôéêþí ðñïãñáììÜôùí";
+@@ -255,7 +259,9 @@
+ char *msg_mtot_mpd= "Óåëßäåò áíÜ çìÝñá";
+ char *msg_mtot_msd= "Sites per Day";
+ char *msg_mtot_mvd= "ÅðéóêÝøåéò áíÜ çìÝñá";
+-char *msg_mtot_mkd= "KBytes áíÜ çìÝñá";
++char *msg_mtot_mkd= "kB Áñ÷åßá áíÜ çìÝñá";
++char *msg_mtot_ikd= "kB In áíÜ çìÝñá";
++char *msg_mtot_okd= "kB Out áíÜ çìÝñá";
+ char *msg_mtot_rc = "Hits áðü ôï áðïôÝëåóìá";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.hungarian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.hungarian       2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.hungarian    2011-04-18 23:56:44.000000000 +0200
+@@ -224,7 +224,9 @@
+ char *msg_h_visits= "Látogatók";
+ char *msg_h_files = "File-ok";
+ char *msg_h_sites = "Oldalak";
+-char *msg_h_xfer  = "KByte";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Hostnév";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Felhasználó böngészõje";
+@@ -250,7 +252,9 @@
+ char *msg_mtot_ms = "Havi Statisztika:";
+ char *msg_mtot_th = "Összes Találat";
+ char *msg_mtot_tf = "Összes File";
+-char *msg_mtot_tx = "Összes KByte";
++char *msg_mtot_tx = "Összes kB File";
++char *msg_mtot_ix = "Összes kB In";
++char *msg_mtot_ox = "Összes kB Out";
+ char *msg_mtot_us = "Összes különbözõ Oldal";
+ char *msg_mtot_ur = "Összes különbözõ Hivatkozás";
+ char *msg_mtot_ua = "Összes különbözõ Felhasználó böngészõje";
+@@ -262,7 +266,9 @@
+ char *msg_mtot_mpd= "Lap/nap";
+ char *msg_mtot_msd= "Oldal/nap";
+ char *msg_mtot_mvd= "Látogató/nap";
+-char *msg_mtot_mkd= "KByte/nap";
++char *msg_mtot_mkd= "kB File/nap";
++char *msg_mtot_ikd= "kB In/nap";
++char *msg_mtot_okd= "kB Out/nap";
+ char *msg_mtot_rc = "Válaszkódok általi találatok";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.icelandic
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.icelandic       2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.icelandic    2011-04-18 23:56:44.000000000 +0200
+@@ -226,7 +226,9 @@
+ char *msg_h_visits= "Heimsóknir";
+ char *msg_h_files = "Skrár";
+ char *msg_h_sites = "Sites";
+-char *msg_h_xfer  = "KBæti";
++char *msg_h_xfer  = "kB S";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Host nafn";
+ char *msg_h_url   = "Slóð";
+ char *msg_h_agent = "User Agent";
+@@ -252,7 +254,9 @@
+ char *msg_mtot_ms = "Mánaðar Samtölur fyrir";
+ char *msg_mtot_th = "Samtals Beiðnir";
+ char *msg_mtot_tf = "Samtals Skrár";
+-char *msg_mtot_tx = "Samtals KBæti";
++char *msg_mtot_tx = "Samtals kB Skrár";
++char *msg_mtot_ix = "Samtals kB In";
++char *msg_mtot_ox = "Samtals kB Out";
+ char *msg_mtot_us = "Samtals Einstakar Síður";
+ char *msg_mtot_ur = "Samtals Unique Referrers";
+ char *msg_mtot_ua = "Samtals Unique User Agents";
+@@ -264,7 +268,9 @@
+ char *msg_mtot_mpd= "Síður á Dag";
+ char *msg_mtot_msd= "Síður (sites) á Dag";
+ char *msg_mtot_mvd= "Heimsóknir á Dag";
+-char *msg_mtot_mkd= "KBæti á Dag";
++char *msg_mtot_mkd= "kB Skrár á Dag";
++char *msg_mtot_ikd= "kB In á Dag";
++char *msg_mtot_okd= "kB Out á Dag";
+ char *msg_mtot_rc = "Hits by Response Code";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.indonesian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.indonesian      2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.indonesian   2011-04-18 23:56:44.000000000 +0200
+@@ -222,7 +222,9 @@
+ char *msg_h_visits= "Kunjungan";
+ char *msg_h_files = "File";
+ char *msg_h_sites = "Situs";
+-char *msg_h_xfer  = "KByte";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Nama Host";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Browser/User Agent";
+@@ -248,7 +250,9 @@
+ char *msg_mtot_ms = "Statistik bulanan untuk";
+ char *msg_mtot_th = "Jumlah Hit";
+ char *msg_mtot_tf = "Jumlah File";
+-char *msg_mtot_tx = "Jumlah KByte";
++char *msg_mtot_tx = "Jumlah kB File";
++char *msg_mtot_ix = "Jumlah kB In";
++char *msg_mtot_ox = "Jumlah kB Out";
+ char *msg_mtot_us = "Jumlah Situs unik";
+ char *msg_mtot_ur = "Jumlah Acuan unik";
+ char *msg_mtot_ua = "Jumlah Browser unik";
+@@ -260,7 +264,9 @@
+ char *msg_mtot_mpd= "Halaman per hari";
+ char *msg_mtot_msd= "Situs per hari";
+ char *msg_mtot_mvd= "Kunjungan per hari";
+-char *msg_mtot_mkd= "KByte per hari";
++char *msg_mtot_mkd= "kB File per hari";
++char *msg_mtot_ikd= "kB In per hari";
++char *msg_mtot_okd= "kB Out per hari";
+ char *msg_mtot_rc = "Hit oleh kode respon";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.italian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.italian 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.italian      2011-04-18 23:56:44.000000000 +0200
+@@ -221,7 +221,9 @@
+ char *msg_h_visits= "Visite";
+ char *msg_h_files = "File";
+ char *msg_h_sites = "Siti";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Nomi di Host";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Browser";
+@@ -247,7 +249,9 @@
+ char *msg_mtot_ms = "Statistiche Mensili per";
+ char *msg_mtot_th = "Contatti";
+ char *msg_mtot_tf = "File";
+-char *msg_mtot_tx = "KBytes";
++char *msg_mtot_tx = "kB File";
++char *msg_mtot_ix = "kB In";
++char *msg_mtot_ox = "kB Out";
+ char *msg_mtot_us = "Nomi di Host";
+ char *msg_mtot_ur = "Referrer";
+ char *msg_mtot_ua = "Browser";
+@@ -259,7 +263,9 @@
+ char *msg_mtot_mpd= "Pagine Giornaliere";
+ char *msg_mtot_msd= "Host Giornaliere";
+ char *msg_mtot_mvd= "Visite Giornaliere";
+-char *msg_mtot_mkd= "KBytes Giornalieri";
++char *msg_mtot_mkd= "kB File Giornalieri";
++char *msg_mtot_ikd= "kB In Giornalieri";
++char *msg_mtot_okd= "kB Out Giornalieri";
+ char *msg_mtot_rc = "Contatti per Codice di Risposta";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.japanese
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.japanese        2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.japanese     2011-04-18 23:56:44.000000000 +0200
+@@ -215,7 +215,9 @@
+ char *msg_h_visits= "Visits";
+ char *msg_h_files = "Files";
+ char *msg_h_sites = "Sites";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "¥Û¥¹¥È̾";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "¥æ¡¼¥¶¥¨¡¼¥¸¥§¥ó¥È";
+@@ -242,6 +244,8 @@
+ char *msg_mtot_th = "Á´¥Ò¥Ã¥È¿ô";
+ char *msg_mtot_tf = "Á´¥Õ¥¡¥¤¥ë¿ô";
+ char *msg_mtot_tx = "Á´ KBytes¿ô";
++char *msg_mtot_ix = "Total kB In";
++char *msg_mtot_ox = "Total kB Out";
+ char *msg_mtot_us = "¸ÄÊÌ¥µ¥¤¥È¿ô";
+ char *msg_mtot_ur = "¸ÄÊÌ¥ê¥Õ¥¡¥é¡¼¿ô";
+ char *msg_mtot_ua = "¸ÄÊ̥桼¥¶¥¨¡¼¥¸¥§¥ó¥È¿ô";
+@@ -254,6 +258,8 @@
+ char *msg_mtot_msd= "Sites per Day";
+ char *msg_mtot_mvd= "°ìÆü¤¢¤¿¤ê¤ÎˬÌä¼Ô¿ô";
+ char *msg_mtot_mkd= "°ìÆü¤¢¤¿¤ê¤ÎKBytes¿ô";
++char *msg_mtot_ikd= "kB In per day";
++char *msg_mtot_okd= "kB Out per day";
+ char *msg_mtot_rc = "¥ì¥¹¥Ý¥ó¥¹¥³¡¼¥É¤´¤È¤Î¥Ò¥Ã¥È¿ô";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.korean
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.korean  2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.korean       2011-04-18 23:56:44.000000000 +0200
+@@ -219,7 +219,9 @@
+ char *msg_h_visits= "Visits";
+ char *msg_h_files = "Files";
+ char *msg_h_sites = "Sites";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "È£½ºÆ®¸í";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "¿¡ÀÌÀüÆ®";
+@@ -245,7 +247,9 @@
+ char *msg_mtot_ms = "¿ùº° Åë°è";
+ char *msg_mtot_th = "ÃÑ È÷Æ®¼ö";
+ char *msg_mtot_tf = "ÃÑ ÆÄÀϼö";
+-char *msg_mtot_tx = "ÃÑ KByte";
++char *msg_mtot_tx = "ÃÑ kB ÆÄÀϼö";
++char *msg_mtot_ix = "ÃÑ kB In";
++char *msg_mtot_ox = "ÃÑ kB Out";
+ char *msg_mtot_us = "ÃÑ °³º° »çÀÌÆ®";
+ char *msg_mtot_ur = "ÃÑ °³º° ·¹ÆÛ·²";
+ char *msg_mtot_ua = "ÃÑ °³º° ¿¡ÀÌÀüÆ®";
+@@ -257,7 +261,9 @@
+ char *msg_mtot_mpd= "Pages per Day";
+ char *msg_mtot_msd= "Sites per Day";
+ char *msg_mtot_mvd= "Visits per Day";
+-char *msg_mtot_mkd= "KBytes per Day";
++char *msg_mtot_mkd= "kB Files per Day";
++char *msg_mtot_ikd= "kB In per Day";
++char *msg_mtot_okd= "kB Out per Day";
+ char *msg_mtot_rc = "ÀÀ´ä Äڵ庰 È÷Æ®¼ö";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.latvian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.latvian 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.latvian      2011-04-18 23:56:44.000000000 +0200
+@@ -220,7 +220,9 @@
+ char *msg_h_visits= "Apmeklçjumi";
+ char *msg_h_files = "Faili";
+ char *msg_h_sites = "Sites";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Hostname";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Lietotâja programma";
+@@ -246,7 +248,9 @@
+ char *msg_mtot_ms = "Mçneðu pârskats pâr";
+ char *msg_mtot_th = "Kopçjie Apmeklçjumi";
+ char *msg_mtot_tf = "Kopçjie Faili";
+-char *msg_mtot_tx = "Kopçjie KBaiti";
++char *msg_mtot_tx = "Kopçjie kB Faili";
++char *msg_mtot_ix = "Kopçjie kB In";
++char *msg_mtot_ox = "Kopçjie kB Out";
+ char *msg_mtot_us = "Kopçjâs Unikâlâs Saites";
+ char *msg_mtot_ur = "Kopçjie Unikâlie Referreri";
+ char *msg_mtot_ua = "Kopçjâs Unikâlâs Lietotâju Programmas";
+@@ -258,7 +262,9 @@
+ char *msg_mtot_mpd= "Lapas Dienâ";
+ char *msg_mtot_msd= "Saites Dienâ";
+ char *msg_mtot_mvd= "Apmeklçjumi Dienâ";
+-char *msg_mtot_mkd= "KBaiti Dienâ";
++char *msg_mtot_mkd= "kB Faili dienâ";
++char *msg_mtot_ikd= "kB In dienâ";
++char *msg_mtot_okd= "kB Out dienâ";
+ char *msg_mtot_rc = "Hits by Response Code";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.malay
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.malay   2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.malay        2011-04-18 23:56:44.000000000 +0200
+@@ -220,7 +220,9 @@
+ char *msg_h_visits= "Lawatan";
+ char *msg_h_files = "Fail";
+ char *msg_h_sites = "Halaman";
+-char *msg_h_xfer  = "KBait";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Nama Hos";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Agen Pengguna";
+@@ -246,7 +248,9 @@
+ char *msg_mtot_ms = "Statistik Bulanan Untuk";
+ char *msg_mtot_th = "Jumlah Capaian";
+ char *msg_mtot_tf = "Jumlah Fail";
+-char *msg_mtot_tx = "Jumlah KBait";
++char *msg_mtot_tx = "Jumlah kB Fail";
++char *msg_mtot_ix = "Jumlah kB In";
++char *msg_mtot_ox = "Jumlah kB Out";
+ char *msg_mtot_us = "Jumlah Halaman Unik";
+ char *msg_mtot_ur = "Jumlah Perujuk Unik";
+ char *msg_mtot_ua = "Jumlah Agen Pengguna Unik";
+@@ -258,7 +262,9 @@
+ char *msg_mtot_mpd= "Purata Halaman Sehari";
+ char *msg_mtot_msd= "Sites per Day";
+ char *msg_mtot_mvd= "Purata Lawatan Sehari";
+-char *msg_mtot_mkd= "Purata KBait Sehari";
++char *msg_mtot_mkd= "Purata kB Sehari Fail";
++char *msg_mtot_ikd= "Purata kB Sehari In";
++char *msg_mtot_okd= "Purata kB Sehari Out";
+ char *msg_mtot_rc = "Purata Capaian mengikut Kod Respon";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.norwegian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.norwegian       2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.norwegian    2011-04-18 23:56:44.000000000 +0200
+@@ -231,7 +231,9 @@
+ char *msg_h_visits= "Besøk";
+ char *msg_h_files = "Filer";
+ char *msg_h_sites = "Klientadresser";
+-char *msg_h_xfer  = "kilobyte";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Servernavn";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Klienttype";
+@@ -257,7 +259,9 @@
+ char *msg_mtot_ms = "Månedlig statistikk for";
+ char *msg_mtot_th = "Totalt antall treff";
+ char *msg_mtot_tf = "Totalt antall filer";
+-char *msg_mtot_tx = "Totalt antall kilobytes";
++char *msg_mtot_tx = "Totalt antall kB filer";
++char *msg_mtot_ix = "Totalt antall kB in";
++char *msg_mtot_ox = "Totalt antall kB out";
+ char *msg_mtot_us = "Totalt antall unike klientadresser";
+ char *msg_mtot_ur = "Totalt antall unike henvisninger";
+ char *msg_mtot_ua = "Totalt antall unike klienttyper";
+@@ -269,7 +273,9 @@
+ char *msg_mtot_mpd= "Sider per dag";
+ char *msg_mtot_msd= "Klientadresser per dag";
+ char *msg_mtot_mvd= "Besök per dag";
+-char *msg_mtot_mkd= "Kilobytes per dag";
++char *msg_mtot_mkd= "kB Filer per dag";
++char *msg_mtot_ikd= "kB In per dag";
++char *msg_mtot_okd= "kB Out per dag";
+ char *msg_mtot_rc = "Treff sortert etter responskode";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.polish
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.polish  2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.polish       2011-04-18 23:56:44.000000000 +0200
+@@ -226,7 +226,9 @@
+ char *msg_h_visits= "Wizyty";
+ char *msg_h_files = "Pliki";
+ char *msg_h_sites = "Lokalizacje";
+-char *msg_h_xfer  = "KB";
++char *msg_h_xfer  = "kB P";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Nazwa hosta";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Przegl±darka";
+@@ -252,7 +254,9 @@
+ char *msg_mtot_ms = "Statystyka w miesi±cu:";
+ char *msg_mtot_th = "Ca³kowita liczba wywo³añ";
+ char *msg_mtot_tf = "Ca³kowita liczba plików";
+-char *msg_mtot_tx = "Ca³kowita liczba KB";
++char *msg_mtot_tx = "Ca³kowita liczba kB plików";
++char *msg_mtot_ix = "Ca³kowita liczba kB in";
++char *msg_mtot_ox = "Ca³kowita liczba kB out";
+ char *msg_mtot_us = "Ca³kowita liczba unikalnych lokalizacji";
+ char *msg_mtot_ur = "Ca³kowita liczba unikalnych odno¶ników";
+ char *msg_mtot_ua = "Ca³kowita liczba unikalnych przegl±darek";
+@@ -264,7 +268,9 @@
+ char *msg_mtot_mpd= "Stron dziennie";
+ char *msg_mtot_msd= "Lokalizacji dziennie";
+ char *msg_mtot_mvd= "Wizyt dziennie";
+-char *msg_mtot_mkd= "Kilobajtów dziennie";
++char *msg_mtot_mkd= "kB Plików dziennie";
++char *msg_mtot_ikd= "kB In dziennie";
++char *msg_mtot_okd= "kB Out dziennie";
+ char *msg_mtot_rc = "Wywo³ania wed³ug kodu odpowiedzi";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.portuguese
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.portuguese      2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.portuguese   2011-04-18 23:56:44.000000000 +0200
+@@ -225,7 +225,9 @@
+ char *msg_h_visits= "Visitas";
+ char *msg_h_files = "Ficheiros";
+ char *msg_h_sites = "Sites";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Hostname";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "User Agent";
+@@ -251,7 +253,9 @@
+ char *msg_mtot_ms = "Estatística Mensal de";
+ char *msg_mtot_th = "Total de Hits";
+ char *msg_mtot_tf = "Total de Ficheiros";
+-char *msg_mtot_tx = "Total de KBytes";
++char *msg_mtot_tx = "Total de kB Ficheiros";
++char *msg_mtot_ix = "Total de kB In";
++char *msg_mtot_ox = "Total de kB Out";
+ char *msg_mtot_us = "Total de Sites Únicos";
+ char *msg_mtot_ur = "Total de Referrers Únicos";
+ char *msg_mtot_ua = "Total de User Agents Únicos";
+@@ -263,7 +267,9 @@
+ char *msg_mtot_mpd= "Paginas por Dia";
+ char *msg_mtot_msd= "Sites por Dia";
+ char *msg_mtot_mvd= "Visitas por Dia";
+-char *msg_mtot_mkd= "KBytes por Dia";
++char *msg_mtot_mkd= "kB Files por Dia";
++char *msg_mtot_ikd= "kB In por Dia";
++char *msg_mtot_okd= "kB Out por Dia";
+ char *msg_mtot_rc = "Hits por Código de Resposta";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.portuguese_brazil
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.portuguese_brazil       2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.portuguese_brazil    2011-04-18 23:56:44.000000000 +0200
+@@ -226,7 +226,9 @@
+ char *msg_h_visits= "Visitas";
+ char *msg_h_files = "Arquivos";
+ char *msg_h_sites = "Endereços";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB A";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Servidores";
+ char *msg_h_url   = "URLs";
+ char *msg_h_agent = "Programa cliente";
+@@ -252,7 +254,9 @@
+ char *msg_mtot_ms = "Estatísticas Mensais para";
+ char *msg_mtot_th = "Total de hits";
+ char *msg_mtot_tf = "Total de arquivos";
+-char *msg_mtot_tx = "Total de KBytes";
++char *msg_mtot_tx = "Total de kB arquivos";
++char *msg_mtot_ix = "Total de kB in";
++char *msg_mtot_ox = "Total de kB out";
+ char *msg_mtot_us = "Total de servidores";
+ char *msg_mtot_ur = "Total de refer&ecirc;ncias";
+ char *msg_mtot_ua = "Total de programas clientes";
+@@ -264,7 +268,9 @@
+ char *msg_mtot_mpd= "Páginas por Dia";
+ char *msg_mtot_msd= "Servidores por Dia";
+ char *msg_mtot_mvd= "Visitas por Dia";
+-char *msg_mtot_mkd= "KBytes por Dia";
++char *msg_mtot_mkd= "kB Arquivos por Dia";
++char *msg_mtot_ikd= "kB In por Dia";
++char *msg_mtot_okd= "kB Out por Dia";
+ char *msg_mtot_rc = "Hits por código de resposta";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.romanian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.romanian        2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.romanian     2011-04-18 23:56:44.000000000 +0200
+@@ -219,7 +219,9 @@
+ char *msg_h_visits= "Vizite";
+ char *msg_h_files = "Fisiere";
+ char *msg_h_sites = "Situri";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Nume";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Navigator";
+@@ -245,7 +247,9 @@
+ char *msg_mtot_ms = "Statistici lunare pentru";
+ char *msg_mtot_th = "Total accesari";
+ char *msg_mtot_tf = "Total fisiere";
+-char *msg_mtot_tx = "Total Kbytes";
++char *msg_mtot_tx = "Total kB fisiere";
++char *msg_mtot_ix = "Total kB in";
++char *msg_mtot_ox = "Total kB out";
+ char *msg_mtot_us = "Total situri unice";
+ char *msg_mtot_ur = "Total pagini referente unice";
+ char *msg_mtot_ua = "Total navigatoare";
+@@ -257,7 +261,9 @@
+ char *msg_mtot_mpd= "Pagini pe zi";
+ char *msg_mtot_msd= "Situri pe zi";
+ char *msg_mtot_mvd= "Vizite pe zi";
+-char *msg_mtot_mkd= "KBytes pe zi";
++char *msg_mtot_mkd= "kB Fisiere pe zi";
++char *msg_mtot_ikd= "kB In pe zi";
++char *msg_mtot_okd= "kB Out pe zi";
+ char *msg_mtot_rc = "Accesari dupa codul de raspuns";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.romanian-iso-8859-2
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.romanian-iso-8859-2     2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.romanian-iso-8859-2  2011-04-18 23:56:44.000000000 +0200
+@@ -220,7 +220,9 @@
+ char *msg_h_visits= "Vizite";
+ char *msg_h_files = "Fiºiere";
+ char *msg_h_sites = "Situri";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Nume";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Navigator";
+@@ -246,7 +248,9 @@
+ char *msg_mtot_ms = "Statistici lunare pentru";
+ char *msg_mtot_th = "Total accesãri";
+ char *msg_mtot_tf = "Total fiºiere";
+-char *msg_mtot_tx = "Total Kbytes";
++char *msg_mtot_tx = "Total kB fiºiere";
++char *msg_mtot_ix = "Total kB in";
++char *msg_mtot_ox = "Total kB out";
+ char *msg_mtot_us = "Total situri unice";
+ char *msg_mtot_ur = "Total pagini referente unice";
+ char *msg_mtot_ua = "Total navigatoare";
+@@ -258,7 +262,9 @@
+ char *msg_mtot_mpd= "Pagini pe zi";
+ char *msg_mtot_msd= "Situri pe zi";
+ char *msg_mtot_mvd= "Vizite pe zi";
+-char *msg_mtot_mkd= "KBytes pe zi";
++char *msg_mtot_mkd= "kB Fiºiere pe zi";
++char *msg_mtot_ikd= "kB In pe zi";
++char *msg_mtot_okd= "kB Out pe zi";
+ char *msg_mtot_rc = "Accesãri dupã codul de rãspuns";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.russian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.russian 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.russian      2011-04-18 23:56:44.000000000 +0200
+@@ -232,7 +232,9 @@
+ char *msg_h_visits= "ÐÏÓÅÝÅÎÉÊ";
+ char *msg_h_files = "ÆÁÊÌÏ×";
+ char *msg_h_sites = "ÓÁÊÔÏ×";
+-char *msg_h_xfer  = "ëÂÁÊÔ";
++char *msg_h_xfer  = "kB Æ";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "éÍÑ ÈÏÓÔÁ";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "âÒÏÕÚÅÒ";
+@@ -258,7 +260,9 @@
+ char *msg_mtot_ms = "óÔÁÔÉÓÔÉËÁ ÚÁ ÍÅÓÑàÎÁ";
+ char *msg_mtot_th = "÷ÓÅÇÏ ÚÁÐÒÏÓÏ×";
+ char *msg_mtot_tf = "÷ÓÅÇÏ ÆÁÊÌÏ×";
+-char *msg_mtot_tx = "÷ÓÅÇÏ ËÉÌÏÂÁÊÔ";
++char *msg_mtot_tx = "÷ÓÅÇÏ kB ÆÁÊÌÏ×";
++char *msg_mtot_ix = "÷ÓÅÇÏ kB In";
++char *msg_mtot_ox = "÷ÓÅÇÏ kB Out";
+ char *msg_mtot_us = "÷ÓÅÇÏ ÕÎÉËÁÌØÎÙÈ ÓÁÊÔÏ×";
+ char *msg_mtot_ur = "÷ÓÅÇÏ ÕÎÉËÁÌØÎÙÈ ÓÓÙÌÁÀÝÉÈÓÑ ÓÔÒÁÎÉÃ";
+ char *msg_mtot_ua = "÷ÓÅÇÏ ÕÎÉËÁÌØÎÙÈ ÂÒÏÕÚÅÒÏ×";
+@@ -271,6 +275,8 @@
+ char *msg_mtot_msd= "Sites per Day";
+ char *msg_mtot_mvd= "ðÏÓÅÝÅÎÉÊ × ÄÅÎØ";
+ char *msg_mtot_mkd= "ïÂߣ͠נÄÅÎØ (ëÂÁÊÔ)";
++char *msg_mtot_ikd= "kB In per day";
++char *msg_mtot_okd= "kB Out per day";
+ char *msg_mtot_rc = "úÁÐÒÏÓÙ ÐÏ ËÏÄÁÍ ÏÔ×ÅÔÁ";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.serbian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.serbian 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.serbian      2011-04-18 23:56:44.000000000 +0200
+@@ -215,7 +215,9 @@
+ char *msg_h_visits= "Poseta";
+ char *msg_h_files = "Fajlova";
+ char *msg_h_sites = "Racunara";
+-char *msg_h_xfer  = "KB";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB U";
++char *msg_h_oxfer = "kB Van";
+ char *msg_h_hname = "Racunar";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Korisnicki program";
+@@ -241,7 +243,9 @@
+ char *msg_mtot_ms = "Mesecna statistika za";
+ char *msg_mtot_th = "Ukupno pristupa";
+ char *msg_mtot_tf = "Ukupno fajlova";
+-char *msg_mtot_tx = "Ukupno KBajta";
++char *msg_mtot_tx = "Ukupno kB fajlova";
++char *msg_mtot_ix = "Ukupno kB unutra";
++char *msg_mtot_ox = "Ukupno kB van";
+ char *msg_mtot_us = "Ukupno razlicitih racunara";
+ char *msg_mtot_ur = "Ukupno razlicitih referisanja";
+ char *msg_mtot_ua = "Ukupno razlicitih browsera";
+@@ -253,7 +257,9 @@
+ char *msg_mtot_mpd= "Fajlova na sat";
+ char *msg_mtot_msd= "Racunara na dan";
+ char *msg_mtot_mvd= "Poseta na dan";
+-char *msg_mtot_mkd= "KBajta na dan";
++char *msg_mtot_mkd= "kB Fajlova na dan";
++char *msg_mtot_ikd= "kB unutra na dan";
++char *msg_mtot_okd= "kB van na dan";
+ char *msg_mtot_rc = "Pristupa po kodu";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.simplified_chinese
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.simplified_chinese      2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.simplified_chinese   2011-04-18 23:56:44.000000000 +0200
+@@ -214,7 +214,9 @@
+ char *msg_h_visits= "·ÃÎÊ";
+ char *msg_h_files = "Îļþ";
+ char *msg_h_sites = "Õ¾µã";
+-char *msg_h_xfer  = "ǧ×Ö½Ú";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Ö÷»úÃû";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Óû§´úÀí";
+@@ -241,6 +243,8 @@
+ char *msg_mtot_th = "×ܵã»÷Êý";
+ char *msg_mtot_tf = "×ÜÎļþÊý";
+ char *msg_mtot_tx = "×Üǧ×Ö½ÚÊý";
++char *msg_mtot_ix = "Total kB In";
++char *msg_mtot_ox = "Total kB Out";
+ char *msg_mtot_us = "×ÜÕ¾µãÊý£¨²»°üÀ¨Öظ´Õ¾µã£©";
+ char *msg_mtot_ur = "×ÜÒýÓÃÕßÊý£¨²»°üÀ¨Öظ´ÒýÓÃÕߣ©";
+ char *msg_mtot_ua = "×ÜÓû§´úÀíÊý£¨²»°üÀ¨Öظ´Óû§´úÀí£©";
+@@ -253,6 +257,8 @@
+ char *msg_mtot_msd= "Sites per Day";
+ char *msg_mtot_mvd= "ÿÌì·ÃÎÊÊý";
+ char *msg_mtot_mkd= "ÿÌìÁ÷Á¿Êý£¨µ¥Î»£ºÇ§×Ö½Ú£©";
++char *msg_mtot_ikd= "kB In per day";
++char *msg_mtot_okd= "kB Out per day";
+ char *msg_mtot_rc = "°´ÏìÓ¦ÂëµÄµã»÷Êý";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.slovak
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.slovak  2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.slovak       2011-04-18 23:56:44.000000000 +0200
+@@ -224,7 +224,9 @@
+ char *msg_h_visits= "náv¹tev";
+ char *msg_h_files = "súborov";
+ char *msg_h_sites = "miest";
+-char *msg_h_xfer  = "kBytov";
++char *msg_h_xfer  = "kB S";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "poèítaè";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "prehliadaè";
+@@ -250,7 +252,9 @@
+ char *msg_mtot_ms = "Mesaèné ¹tatistiky za";
+ char *msg_mtot_th = "Celkom zásahov";
+ char *msg_mtot_tf = "Celkom súborov";
+-char *msg_mtot_tx = "Celkom kBytov";
++char *msg_mtot_tx = "Celkom kB súborov";
++char *msg_mtot_ix = "Celkom kB in";
++char *msg_mtot_ox = "Celkom kB out";
+ char *msg_mtot_us = "Celkom jedineèných miest";
+ char *msg_mtot_ur = "Celkom jedineèných odkazovaèov";
+ char *msg_mtot_ua = "Celkom jedineèných Browsrov";
+@@ -262,7 +266,9 @@
+ char *msg_mtot_mpd= "Stránok za deò";
+ char *msg_mtot_msd= "Miest za deò";
+ char *msg_mtot_mvd= "Náv¹tev za deò";
+-char *msg_mtot_mkd= "kBytov za deò";
++char *msg_mtot_mkd= "kB Súborov za deò";
++char *msg_mtot_ikd= "kB In za deò";
++char *msg_mtot_okd= "kB Out za deò";
+ char *msg_mtot_rc = "Zásahy podµa kódu odpovede";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.slovene
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.slovene 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.slovene      2011-04-18 23:56:44.000000000 +0200
+@@ -215,7 +215,9 @@
+ char *msg_h_visits= "Obiskov";
+ char *msg_h_files = "Datotek";
+ char *msg_h_sites = "Po podroèjih";
+-char *msg_h_xfer  = "KB";
++char *msg_h_xfer  = "kB D";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Gostitelj";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Brskalnik";
+@@ -241,7 +243,9 @@
+ char *msg_mtot_ms = "Meseèno poroèilo za";
+ char *msg_mtot_th = "Skupaj zahtevkov";
+ char *msg_mtot_tf = "Skupaj datotek";
+-char *msg_mtot_tx = "Skupaj KB";
++char *msg_mtot_tx = "Skupaj kB datotek";
++char *msg_mtot_ix = "Skupaj kB in";
++char *msg_mtot_ox = "Skupaj kB out";
+ char *msg_mtot_us = "Skupaj enkr. podroèij";
+ char *msg_mtot_ur = "Skupaj enkr. napotiteljev";
+ char *msg_mtot_ua = "Skupaj enkr. brskalnikov";
+@@ -253,7 +257,9 @@
+ char *msg_mtot_mpd= "Strani dnevno";
+ char *msg_mtot_msd= "Podroèij dnevno";
+ char *msg_mtot_mvd= "Obiskov dnevno";
+-char *msg_mtot_mkd= "KB dnevno";
++char *msg_mtot_mkd= "kB Datotek dnevno";
++char *msg_mtot_ikd= "kB In dnevno";
++char *msg_mtot_okd= "kB Out dnevno";
+ char *msg_mtot_rc = "Zahtevki po odzivnih kodah";
+ /* daily Skupaj table */
+Index: webalizer/lang/webalizer_lang.spanish
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.spanish 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.spanish      2011-04-18 23:56:44.000000000 +0200
+@@ -232,7 +232,9 @@
+ char *msg_h_visits= "Visitas";
+ char *msg_h_files = "Archivos";
+ char *msg_h_sites = "Clientes";
+-char *msg_h_xfer  = "KBytes";
++char *msg_h_xfer  = "kB A";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Máquina";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Navegador";
+@@ -258,7 +260,9 @@
+ char *msg_mtot_ms = "Estadísticas mensuales de";
+ char *msg_mtot_th = "Total Accesos";
+ char *msg_mtot_tf = "Total Archivos";
+-char *msg_mtot_tx = "Total KBytes";
++char *msg_mtot_tx = "Total kB Archivos";
++char *msg_mtot_ix = "Total kB In";
++char *msg_mtot_ox = "Total kB Out";
+ char *msg_mtot_us = "Total Clientes";
+ char *msg_mtot_ur = "Total Enlaces origen";
+ char *msg_mtot_ua = "Total Navegadores";
+@@ -270,7 +274,9 @@
+ char *msg_mtot_mpd= "Páginas por Día";
+ char *msg_mtot_msd= "Clientes por Día";
+ char *msg_mtot_mvd= "Visitas por Día";
+-char *msg_mtot_mkd= "KBytes por Día";
++char *msg_mtot_mkd= "kB Archivos por Día";
++char *msg_mtot_ikd= "kB In por Día";
++char *msg_mtot_okd= "kB Out por Día";
+ char *msg_mtot_rc = "Accesos por código de respuesta";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.swedish
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.swedish 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.swedish      2011-04-18 23:56:44.000000000 +0200
+@@ -243,7 +243,9 @@
+ char *msg_h_visits= "Besök."; //      GD
+ char *msg_h_files = "Filer";
+ char *msg_h_sites = "Klient.";
+-char *msg_h_xfer  = "kilobyte";
++char *msg_h_xfer  = "kB F";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Ut";
+ //    char *msg_h_hname = "V&auml;rdnamn";    //      HTML
+ char *msg_h_hname = "Värdnamn";       //      GD
+ char *msg_h_url   = "URL";
+@@ -272,7 +274,9 @@
+ char *msg_mtot_ms = "M&aring;natlig statistik f&ouml;r";
+ char *msg_mtot_th = "Totalt antal tr&auml;ffar";
+ char *msg_mtot_tf = "Totalt antal filer";
+-char *msg_mtot_tx = "Totalt antal kilobytes";
++char *msg_mtot_tx = "Totalt antal kB filer";
++char *msg_mtot_ix = "Totalt antal kB in";
++char *msg_mtot_ox = "Totalt antal kB ut";
+ char *msg_mtot_us = "Totalt antal unika klientadresser";
+ char *msg_mtot_ur = "Totalt antal unika h&auml;nvisningar";
+ char *msg_mtot_ua = "Totalt antal unika klienttyper";
+@@ -284,7 +288,9 @@
+ char *msg_mtot_mpd= "Sidor per dag";
+ char *msg_mtot_msd= "Klientadresser per dag";
+ char *msg_mtot_mvd= "Bes&ouml;k per dag";
+-char *msg_mtot_mkd= "Kilobytes per dag";
++char *msg_mtot_mkd= "kB Filer per dag";
++char *msg_mtot_ikd= "kB In per dag";
++char *msg_mtot_okd= "kB Ut per dag";
+ char *msg_mtot_rc = "Tr&auml;ffar sorterade efter svarskod";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.turkish
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.turkish 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/lang/webalizer_lang.turkish      2011-04-18 23:56:44.000000000 +0200
+@@ -220,7 +220,9 @@
+ char *msg_h_visits= "Ziyaret";
+ char *msg_h_files = "Dosya";
+ char *msg_h_sites = "Istemci";
+-char *msg_h_xfer  = "KBayt'a Gore";
++char *msg_h_xfer  = "kB D";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "Makine Adi";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "Kullanici Ajani";
+@@ -246,7 +248,9 @@
+ char *msg_mtot_ms = "Aylik Istatistikler:";
+ char *msg_mtot_th = "Toplam HIT'ler";
+ char *msg_mtot_tf = "Toplam Dosyalar";
+-char *msg_mtot_tx = "Toplam KBaytlar";
++char *msg_mtot_tx = "Toplam kB Dosyalar";
++char *msg_mtot_ix = "Toplam kB In";
++char *msg_mtot_ox = "Toplam kB Out";
+ char *msg_mtot_us = "Toplam Ayni Istemciler";
+ char *msg_mtot_ur = "Toplam Ayni Referanslar";
+ char *msg_mtot_ua = "Toplam Ayni Kullanici Ajanlari";
+@@ -258,7 +262,9 @@
+ char *msg_mtot_mpd= "Gunluk Sayfalar";
+ char *msg_mtot_msd= "Gunluk Istemciler";
+ char *msg_mtot_mvd= "Gunluk Ziyaretler";
+-char *msg_mtot_mkd= "Gunluk KBaytlar";
++char *msg_mtot_mkd= "Gunluk kB Dosyalar";
++char *msg_mtot_ikd= "Gunluk kB In";
++char *msg_mtot_okd= "Gunluk kB Out";
+ char *msg_mtot_rc = "Cevap Koduna Gore HIT";
+ /* daily total table */
+Index: webalizer/lang/webalizer_lang.ukrainian
+===================================================================
+--- webalizer.orig/lang/webalizer_lang.ukrainian       2011-04-18 23:54:39.000000000 +0200
++++ webalizer/lang/webalizer_lang.ukrainian    2011-04-18 23:56:44.000000000 +0200
+@@ -224,7 +224,9 @@
+ char *msg_h_visits= "צÄצÄ.";
+ char *msg_h_files = "ÆÁÊ̦×";
+ char *msg_h_sites = "ÓÁÊÔ¦×";
+-char *msg_h_xfer  = "ëâÁÊÔ";
++char *msg_h_xfer  = "kB Æ";
++char *msg_h_ixfer = "kB In";
++char *msg_h_oxfer = "kB Out";
+ char *msg_h_hname = "¦Í'Ñ ÈÏÓÔÁ";
+ char *msg_h_url   = "URL";
+ char *msg_h_agent = "ÁÇÅÎÔ ËÏÒÉÓÔÕ×ÁÞÁ";
+@@ -251,6 +253,8 @@
+ char *msg_mtot_th = "÷ÓØÏÇÏ ÚÁÐÉÔ¦×";
+ char *msg_mtot_tf = "÷ÓØÏÇÏ ÆÁÊ̦×";
+ char *msg_mtot_tx = "÷ÓØÏÇÏ ëâÁÊÔ";
++char *msg_mtot_ix = "÷ÓØÏÇÏ ëâÁÊÔ In";
++char *msg_mtot_ox = "÷ÓØÏÇÏ ëâÁÊÔ Out";
+ char *msg_mtot_us = "÷ÓØÏÇÏ ÕΦËÁÌØÎÉÈ ÓÁÊÔ¦×";
+ char *msg_mtot_ur = "÷ÓØÏÇÏ ÕΦËÁÌØÎÉÈ ÐÏÓÉÌÁÎØ";
+ char *msg_mtot_ua = "÷ÓØÏÇÏ ÕΦËÁÌØÎÉÈ ÁÇÅÎԦנËÏÒÉÓÔÕ×ÁÞÁ";
+@@ -262,7 +266,9 @@
+ char *msg_mtot_mpd= "óÔÏÒ¦ÎÏË ÚÁ ÄÅÎØ";
+ char *msg_mtot_msd= "Sites per Day";
+ char *msg_mtot_mvd= "÷¦ÄצÄÕ×ÁÎØ ÚÁ ÄÅÎØ";
+-char *msg_mtot_mkd= "KâÁÊÔ ÚÁ ÄÅÎØ";
++char *msg_mtot_mkd= "KâÁÊÔ æÁÊ̦נÚÁ ÄÅÎØ";
++char *msg_mtot_ikd= "KâÁÊÔ In ÚÁ ÄÅÎØ";
++char *msg_mtot_okd= "KâÁÊÔ Out ÚÁ ÄÅÎØ";
+ char *msg_mtot_rc = "ú×ÅÒÔÁÎØ ÚÁ ËÏÄÏ͠צÄÐÏצĦ";
+ /* daily total table */
+Index: webalizer/output.c
+===================================================================
+--- webalizer.orig/output.c    2011-04-18 23:56:42.000000000 +0200
++++ webalizer/output.c 2011-04-18 23:56:44.000000000 +0200
+@@ -308,8 +308,10 @@
+                       tm_file,             /* data 2 (files)    */
+                       tm_site,             /* data 3 (sites)    */
+                       tm_xfer,             /* data 4 (kbytes)   */
+-                      tm_page,             /* data 5 (pages)    */
+-                      tm_visit);           /* data 6 (visits)   */
++                      tm_ixfer,            /* data 5 (kbytes)   */
++                      tm_oxfer,            /* data 6 (kbytes)   */
++                      tm_page,             /* data 7 (pages)    */
++                      tm_visit);           /* data 8 (visits)   */
+    }
+    if (hourly_graph)
+@@ -507,7 +509,7 @@
+ {
+    int i,days_in_month;
+    u_int64_t max_files=0,max_hits=0,max_visits=0,max_pages=0,max_sites=0;
+-   double max_xfer=0.0;
++   double max_xfer=0.0,max_ixfer=0.0,max_oxfer=0.0;
+    days_in_month=(l_day-f_day)+1;
+    for (i=0;i<31;i++)
+@@ -518,6 +520,8 @@
+       if (tm_visit[i]>max_visits) max_visits= tm_visit[i];
+       if (tm_site[i]>max_sites)   max_sites = tm_site[i];
+       if (tm_xfer[i]>max_xfer)    max_xfer  = tm_xfer[i];
++      if (tm_ixfer[i]>max_ixfer)  max_ixfer = tm_ixfer[i];
++      if (tm_oxfer[i]>max_oxfer)  max_oxfer = tm_oxfer[i];
+    }
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+@@ -545,6 +549,12 @@
+    fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
+       "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%.0f</B>"              \
+       "</FONT></TD></TR>\n",msg_mtot_tx,t_xfer/1024);
++   fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
++      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%.0f</B>"              \
++      "</FONT></TD></TR>\n",msg_mtot_ix,t_ixfer/1024);
++   fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
++      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%.0f</B>"              \
++      "</FONT></TD></TR>\n",msg_mtot_ox,t_oxfer/1024);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    /**********************************************/
+    /* Unique Sites */
+@@ -629,6 +639,18 @@
+       "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%.0f</B>"                   \
+       "</FONT></TD></TR>\n",msg_mtot_mkd,
+       (t_xfer/1024)/days_in_month,max_xfer/1024);
++   fprintf(out_fp,"<TR>"                                                     \
++      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
++      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%.0f</B>"                   \
++      "</FONT></TD></TR>\n",msg_mtot_ikd,
++      (t_ixfer/1024)/days_in_month,max_ixfer/1024);
++   fprintf(out_fp,"<TR>"                                                     \
++      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
++      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%.0f</B>"                   \
++      "</FONT></TD></TR>\n",msg_mtot_okd,
++      (t_oxfer/1024)/days_in_month,max_oxfer/1024);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    /**********************************************/
+    /* response code totals */
+@@ -662,7 +684,7 @@
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    /* Daily statistics for ... */
+-   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=13 ALIGN=center>"          \
++   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=17 ALIGN=center>"          \
+            "%s %s %d</TH></TR>\n",
+            GREY,msg_dtot_ds,l_month[cur_month-1], cur_year);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -679,6 +701,10 @@
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"               \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                       \
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"               \
++                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                       \
++                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"               \
++                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                       \
++                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"               \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+                   GREY,       msg_h_day,
+                   HITCOLOR,   msg_h_hits,
+@@ -686,7 +712,9 @@
+                   PAGECOLOR,  msg_h_pages,
+                   VISITCOLOR, msg_h_visits,
+                   SITECOLOR,  msg_h_sites,
+-                  KBYTECOLOR, msg_h_xfer);
++                  KBYTECOLOR, msg_h_xfer,
++                  LTBLUE,  msg_h_ixfer,
++                  GREEN,   msg_h_oxfer);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    /* skip beginning blank days in a month */
+@@ -722,8 +750,16 @@
+               tm_site[i],PCENT(tm_site[i],t_site));
+       fprintf(out_fp,"<TD ALIGN=right>"                                      \
+               "<FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"                  \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD></TR>\n",
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+               tm_xfer[i]/1024,PCENT(tm_xfer[i],t_xfer));
++      fprintf(out_fp,"<TD ALIGN=right>"                                      \
++              "<FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"                  \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
++              tm_ixfer[i]/1024,PCENT(tm_ixfer[i],t_ixfer));
++      fprintf(out_fp,"<TD ALIGN=right>"                                      \
++              "<FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"                  \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD></TR>\n",
++              tm_oxfer[i]/1024,PCENT(tm_oxfer[i],t_oxfer));
+    }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"</TABLE>\n");
+@@ -738,14 +774,14 @@
+ {
+    int       i,days_in_month;
+    u_int64_t avg_file=0;
+-   double    avg_xfer=0.0;
++   double    avg_xfer=0.0,avg_ixfer=0.0,avg_oxfer=0.0;
+    days_in_month=(l_day-f_day)+1;
+    /* Hourly stats */
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=13 ALIGN=center>"\
++   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=19 ALIGN=center>"\
+            "%s %s %d</TH></TR>\n",
+            GREY,msg_htot_hs,l_month[cur_month-1], cur_year);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -758,12 +794,18 @@
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"     \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"             \
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"     \
++                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n"             \
++                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"     \
++                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n"             \
++                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"     \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+                   GREY,       msg_h_hour,
+                   HITCOLOR,   msg_h_hits,
+                   FILECOLOR,  msg_h_files,
+                   PAGECOLOR,  msg_h_pages,
+-                  KBYTECOLOR, msg_h_xfer);
++                  KBYTECOLOR, msg_h_xfer,
++                  LTBLUE,  msg_h_ixfer,
++                  GREEN,   msg_h_oxfer);
+    fprintf(out_fp,"<TR><TH ALIGN=center BGCOLOR=\"%s\">"           \
+                   "<FONT SIZE=\"-2\">%s</FONT></TH>\n"             \
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"     \
+@@ -782,8 +824,18 @@
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"               \
+                   "<FONT SIZE=\"-2\">%s</FONT></TH>\n"             \
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"     \
+-                  "<FONT SIZE=\"-2\">%s</FONT></TH></TR>\n",
++                  "<FONT SIZE=\"-2\">%s</FONT></TH>\n",
+                   KBYTECOLOR, msg_h_avg, KBYTECOLOR, msg_h_total);
++   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"               \
++                  "<FONT SIZE=\"-2\">%s</FONT></TH>\n"             \
++                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"     \
++                  "<FONT SIZE=\"-2\">%s</FONT></TH>\n",
++                  LTBLUE, msg_h_avg, LTBLUE, msg_h_total);
++   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"               \
++                  "<FONT SIZE=\"-2\">%s</FONT></TH>\n"             \
++                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"     \
++                  "<FONT SIZE=\"-2\">%s</FONT></TH></TR>\n",
++                  GREEN, msg_h_avg, GREEN, msg_h_total);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    for (i=0;i<24;i++)
+@@ -811,11 +863,25 @@
+       fprintf(out_fp,
+          "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+          "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD></TR>\n",
++         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+          (th_xfer[i]/days_in_month)/1024,th_xfer[i]/1024,
+          PCENT(th_xfer[i],t_xfer));
++      fprintf(out_fp,
++         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
++         (th_ixfer[i]/days_in_month)/1024,th_ixfer[i]/1024,
++         PCENT(th_ixfer[i],t_ixfer));
++      fprintf(out_fp,
++         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD></TR>\n",
++         (th_oxfer[i]/days_in_month)/1024,th_oxfer[i]/1024,
++         PCENT(th_oxfer[i],t_oxfer));
+       avg_file += th_file[i]/days_in_month;
+-      avg_xfer+= (th_xfer[i]/days_in_month)/1024;
++      avg_xfer += (th_xfer[i]/days_in_month)/1024;
++      avg_ixfer+= (th_ixfer[i]/days_in_month)/1024;
++      avg_oxfer+= (th_oxfer[i]/days_in_month)/1024;
+    }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"</TABLE>\n<P>\n");
+@@ -853,11 +919,11 @@
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   if (flag) fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=10>" \
++   if (flag) fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=14>" \
+            "%s %llu %s %llu %s %s %s</TH></TR>\n",
+            GREY, msg_top_top,tot_num,msg_top_of,
+            t_site,msg_top_s,msg_h_by,msg_h_xfer);
+-   else      fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=10>" \
++   else      fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=14>" \
+            "%s %llu %s %llu %s</TH></TR>\n",
+            GREY,msg_top_top, tot_num, msg_top_of, t_site, msg_top_s);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -870,6 +936,10 @@
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",KBYTECOLOR,msg_h_xfer);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
++          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
++          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                        \
+           "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",MISCCOLOR,msg_h_hname);
+@@ -894,13 +964,19 @@
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+-              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
++               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+               "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
+               i+1,hptr->count,
+               (t_hit==0)?0:((float)hptr->count/t_hit)*100.0,hptr->files,
+               (t_file==0)?0:((float)hptr->files/t_file)*100.0,hptr->xfer/1024,
+-              (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0,hptr->visit,
++              (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0,hptr->ixfer/1024,
++              (t_ixfer==0)?0:((float)hptr->ixfer/t_ixfer)*100.0,hptr->oxfer/1024,
++              (t_oxfer==0)?0:((float)hptr->oxfer/t_oxfer)*100.0,hptr->visit,
+               (t_visit==0)?0:((float)hptr->visit/t_visit)*100.0);
+          if ((hptr->flag==OBJ_GRP)&&hlite_groups)
+@@ -921,7 +997,7 @@
+          if (all_sites_page(h_reg, h_grp))
+          {
+             fprintf(out_fp,"<TR BGCOLOR=\"%s\">",GRPCOLOR);
+-            fprintf(out_fp,"<TD COLSPAN=10 ALIGN=\"center\">\n");
++            fprintf(out_fp,"<TD COLSPAN=14 ALIGN=\"center\">\n");
+             fprintf(out_fp,"<FONT SIZE=\"-1\">");
+             fprintf(out_fp,"<A HREF=\"./site_%04d%02d.%s\">",
+                     cur_year,cur_month,html_ext);
+@@ -958,9 +1034,12 @@
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+-   fprintf(out_fp," %12s      %12s      %12s      %12s      %s\n",
+-           msg_h_hits, msg_h_files, msg_h_xfer, msg_h_visits, msg_h_hname);
++   fprintf(out_fp," %12s      %12s      %12s      %12s      %12s"          \
++                  "      %12s      %s\n",
++           msg_h_hits, msg_h_files, msg_h_xfer, msg_h_ixfer, msg_h_oxfer,
++           msg_h_visits, msg_h_hname);
+    fprintf(out_fp,"----------------  ----------------  ----------------  " \
++                  "----------------  ----------------  "                   \
+                   "----------------  --------------------\n\n");
+    /* Do groups first (if any) */
+@@ -972,11 +1051,13 @@
+       {
+          fprintf(out_fp,
+             "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  "            \
+-            "%8llu %6.02f%%  %s\n",
++            "%8.0f %6.02f%%  %8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
+             hptr->count,
+             (t_hit==0)?0:((float)hptr->count/t_hit)*100.0,hptr->files,
+             (t_file==0)?0:((float)hptr->files/t_file)*100.0,hptr->xfer/1024,
+-            (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0,hptr->visit,
++            (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0,hptr->ixfer/1024,
++            (t_ixfer==0)?0:((float)hptr->ixfer/t_ixfer)*100.0,hptr->oxfer/1024,
++            (t_oxfer==0)?0:((float)hptr->oxfer/t_oxfer)*100.0,hptr->visit,
+             (t_visit==0)?0:((float)hptr->visit/t_visit)*100.0,
+             hptr->string);
+          h_grp--;
+@@ -994,11 +1075,13 @@
+       {
+          fprintf(out_fp,
+             "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  "            \
+-            "%8llu %6.02f%%  %s\n",
++            "%8.0f %6.02f%%  %8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
+             hptr->count,
+             (t_hit==0)?0:((float)hptr->count/t_hit)*100.0,hptr->files,
+             (t_file==0)?0:((float)hptr->files/t_file)*100.0,hptr->xfer/1024,
+-            (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0,hptr->visit,
++            (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0,hptr->ixfer/1024,
++            (t_ixfer==0)?0:((float)hptr->ixfer/t_ixfer)*100.0,hptr->oxfer/1024,
++            (t_oxfer==0)?0:((float)hptr->oxfer/t_oxfer)*100.0,hptr->visit,
+             (t_visit==0)?0:((float)hptr->visit/t_visit)*100.0,
+             hptr->string);
+          h_reg--;
+@@ -1042,11 +1125,11 @@
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   if (flag) fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=6>"  \
++   if (flag) fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=10>"  \
+            "%s %llu %s %llu %s %s %s</TH></TR>\n",
+            GREY,msg_top_top,tot_num,msg_top_of,
+            t_url,msg_top_u,msg_h_by,msg_h_xfer);
+-   else fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=6>"   \
++   else fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=10>"   \
+            "%s %llu %s %llu %s</TH></TR>\n",
+            GREY,msg_top_top,tot_num,msg_top_of,t_url,msg_top_u);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -1058,6 +1141,12 @@
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+                   KBYTECOLOR,msg_h_xfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
++                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
++                  LTBLUE,msg_h_ixfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
++                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
++                  GREEN,msg_h_oxfer);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                      \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+                   MISCCOLOR,msg_h_url);
+@@ -1080,11 +1169,19 @@
+             "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+             "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
+             "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
++            "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
++            "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
++            "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
++            "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+             "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
+             i+1,uptr->count,
+             (t_hit==0)?0:((float)uptr->count/t_hit)*100.0,
+             uptr->xfer/1024,
+-            (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0);
++            (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0,
++            uptr->ixfer/1024,
++            (t_ixfer==0)?0:((float)uptr->ixfer/t_ixfer)*100.0,
++            uptr->oxfer/1024,
++            (t_oxfer==0)?0:((float)uptr->oxfer/t_oxfer)*100.0);
+          if (uptr->flag==OBJ_GRP)
+          {
+@@ -1130,7 +1227,7 @@
+          if (all_urls_page(u_reg, u_grp))
+          {
+             fprintf(out_fp,"<TR BGCOLOR=\"%s\">",GRPCOLOR);
+-            fprintf(out_fp,"<TD COLSPAN=6 ALIGN=\"center\">\n");
++            fprintf(out_fp,"<TD COLSPAN=10 ALIGN=\"center\">\n");
+             fprintf(out_fp,"<FONT SIZE=\"-1\">");
+             fprintf(out_fp,"<A HREF=\"./url_%04d%02d.%s\">",
+                     cur_year,cur_month,html_ext);
+@@ -1167,10 +1264,10 @@
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+-   fprintf(out_fp," %12s      %12s      %s\n",
+-           msg_h_hits,msg_h_xfer,msg_h_url);
+-   fprintf(out_fp,"----------------  ----------------  " \
+-                  "--------------------\n\n");
++   fprintf(out_fp," %12s      %12s      %12s      %12s      %s\n",
++           msg_h_hits,msg_h_xfer,msg_h_ixfer,msg_h_oxfer,msg_h_url);
++   fprintf(out_fp,"----------------  ----------------  ----------------  " \
++                  "----------------  --------------------\n\n");
+    /* do groups first (if any) */
+    pointer=u_array;
+@@ -1179,11 +1276,16 @@
+       uptr=*pointer++;
+       if (uptr->flag == OBJ_GRP)
+       {
+-         fprintf(out_fp,"%-8llu %6.02f%%  %8.0f %6.02f%%  %s\n",
++         fprintf(out_fp,"%-8llu %6.02f%%  %8.0f %6.02f%%  %8.0f %6.02f%%  "  \
++                        "%8.0f %6.02f%%  %s\n",
+             uptr->count,
+             (t_hit==0)?0:((float)uptr->count/t_hit)*100.0,
+             uptr->xfer/1024,
+             (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0,
++            uptr->ixfer/1024,
++            (t_ixfer==0)?0:((float)uptr->ixfer/t_ixfer)*100.0,
++            uptr->oxfer/1024,
++            (t_oxfer==0)?0:((float)uptr->oxfer/t_oxfer)*100.0,
+             uptr->string);
+          u_grp--;
+       }
+@@ -1198,11 +1300,16 @@
+       uptr=*pointer++;
+       if (uptr->flag == OBJ_REG)
+       {
+-         fprintf(out_fp,"%-8llu %6.02f%%  %8.0f %6.02f%%  %s\n",
++         fprintf(out_fp,"%-8llu %6.02f%%  %8.0f %6.02f%%  %8.0f %6.02f%%  "  \
++                        "%8.0f %6.02f%%  %s\n",
+             uptr->count,
+             (t_hit==0)?0:((float)uptr->count/t_hit)*100.0,
+             uptr->xfer/1024,
+             (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0,
++            uptr->ixfer/1024,
++            (t_ixfer==0)?0:((float)uptr->ixfer/t_ixfer)*100.0,
++            uptr->oxfer/1024,
++            (t_oxfer==0)?0:((float)uptr->oxfer/t_oxfer)*100.0,
+             uptr->string);
+          u_reg--;
+       }
+@@ -1780,7 +1887,7 @@
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=10>" \
++   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=14>" \
+            "%s %llu %s %llu %s</TH></TR>\n",
+            GREY,msg_top_top, tot_num, msg_top_of, t_user, msg_top_i);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -1793,6 +1900,10 @@
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",KBYTECOLOR,msg_h_xfer);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
++          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
++          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                       \
+           "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",MISCCOLOR,msg_h_uname);
+@@ -1817,13 +1928,19 @@
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+               "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
+               i+1,iptr->count,
+               (t_hit==0)?0:((float)iptr->count/t_hit)*100.0,iptr->files,
+               (t_file==0)?0:((float)iptr->files/t_file)*100.0,iptr->xfer/1024,
+-              (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0,iptr->visit,
++              (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0,iptr->ixfer/1024,
++              (t_ixfer==0)?0:((float)iptr->ixfer/t_ixfer)*100.0,iptr->oxfer/1024,
++              (t_oxfer==0)?0:((float)iptr->oxfer/t_oxfer)*100.0,iptr->visit,
+               (t_visit==0)?0:((float)iptr->visit/t_visit)*100.0);
+          if ((iptr->flag==OBJ_GRP)&&hlite_groups)
+@@ -1842,7 +1959,7 @@
+       if (all_users_page(i_reg, i_grp))
+       {
+          fprintf(out_fp,"<TR BGCOLOR=\"%s\">",GRPCOLOR);
+-         fprintf(out_fp,"<TD COLSPAN=10 ALIGN=\"center\">\n");
++         fprintf(out_fp,"<TD COLSPAN=14 ALIGN=\"center\">\n");
+          fprintf(out_fp,"<FONT SIZE=\"-1\">");
+          fprintf(out_fp,"<A HREF=\"./user_%04d%02d.%s\">",
+             cur_year,cur_month,html_ext);
+@@ -1876,9 +1993,12 @@
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+-   fprintf(out_fp," %12s      %12s      %12s      %12s      %s\n",
+-           msg_h_hits, msg_h_files, msg_h_xfer, msg_h_visits, msg_h_uname);
++   fprintf(out_fp," %12s      %12s      %12s      %12s      %12s      %12s"\
++                  "      %s\n",
++           msg_h_hits, msg_h_files, msg_h_xfer, msg_h_ixfer, msg_h_oxfer,
++           msg_h_visits, msg_h_uname);
+    fprintf(out_fp,"----------------  ----------------  ----------------  " \
++                  "----------------  ----------------  "                   \
+                   "----------------  --------------------\n\n");
+    /* Do groups first (if any) */
+@@ -1889,11 +2009,14 @@
+       if (iptr->flag == OBJ_GRP)
+       {
+          fprintf(out_fp,
+-      "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
++            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  %8.0f %6.02f%%  "\
++            "%8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
+             iptr->count,
+             (t_hit==0)?0:((float)iptr->count/t_hit)*100.0,iptr->files,
+             (t_file==0)?0:((float)iptr->files/t_file)*100.0,iptr->xfer/1024,
+-            (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0,iptr->visit,
++            (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0,iptr->ixfer/1024,
++            (t_ixfer==0)?0:((float)iptr->ixfer/t_ixfer)*100.0,iptr->oxfer/1024,
++            (t_oxfer==0)?0:((float)iptr->oxfer/t_oxfer)*100.0,iptr->visit,
+             (t_visit==0)?0:((float)iptr->visit/t_visit)*100.0,
+             iptr->string);
+          i_grp--;
+@@ -1910,11 +2033,14 @@
+       if (iptr->flag == OBJ_REG)
+       {
+          fprintf(out_fp,
+-      "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
++            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  %8.0f %6.02f%%  "\
++            "%8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
+             iptr->count,
+             (t_hit==0)?0:((float)iptr->count/t_hit)*100.0,iptr->files,
+             (t_file==0)?0:((float)iptr->files/t_file)*100.0,iptr->xfer/1024,
+-            (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0,iptr->visit,
++            (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0,iptr->ixfer/1024,
++            (t_ixfer==0)?0:((float)iptr->ixfer/t_ixfer)*100.0,iptr->oxfer/1024,
++            (t_oxfer==0)?0:((float)iptr->oxfer/t_oxfer)*100.0,iptr->visit,
+             (t_visit==0)?0:((float)iptr->visit/t_visit)*100.0,
+             iptr->string);
+          i_reg--;
+@@ -2016,6 +2142,8 @@
+                      ctry[j].count+=hptr->count;
+                      ctry[j].files+=hptr->files;
+                      ctry[j].xfer +=hptr->xfer;
++                     ctry[j].ixfer+=hptr->ixfer;
++                     ctry[j].oxfer+=hptr->oxfer;
+                      ctry_fnd=1;
+                      break;
+                   }
+@@ -2026,6 +2154,8 @@
+                ctry[0].count+=hptr->count;
+                ctry[0].files+=hptr->files;
+                ctry[0].xfer +=hptr->xfer;
++             ctry[0].ixfer+=hptr->ixfer;
++             ctry[0].oxfer+=hptr->oxfer;
+             }
+          }
+          hptr=hptr->next;
+@@ -2081,7 +2211,7 @@
+    for (i=0;i<ntop_ctrys;i++) if (top_ctrys[i]->count!=0) tot_num++;
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=8>"         \
++   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=12>"         \
+            "%s %d %s %d %s</TH></TR>\n",
+            GREY,msg_top_top,tot_num,msg_top_of,tot_ctry,msg_top_c);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -2093,6 +2223,10 @@
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",FILECOLOR,msg_h_files);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",KBYTECOLOR,msg_h_xfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
++          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
++          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                       \
+           "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",MISCCOLOR,msg_h_ctry);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -2120,6 +2254,10 @@
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+               "<TD ALIGN=left NOWRAP>%s<FONT SIZE=\"-1\">%s</FONT>"        \
+               "</TD></TR>\n",
+               i+1,top_ctrys[i]->count,
+@@ -2128,6 +2266,10 @@
+               (t_file==0)?0:((float)top_ctrys[i]->files/t_file)*100.0,
+               top_ctrys[i]->xfer/1024,
+               (t_xfer==0)?0:((float)top_ctrys[i]->xfer/t_xfer)*100.0,
++              top_ctrys[i]->ixfer/1024,
++              (t_ixfer==0)?0:((float)top_ctrys[i]->ixfer/t_ixfer)*100.0,
++              top_ctrys[i]->oxfer/1024,
++              (t_oxfer==0)?0:((float)top_ctrys[i]->oxfer/t_oxfer)*100.0,
+               flag_buf,top_ctrys[i]->desc);
+    }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -2155,8 +2297,9 @@
+    /* need a header? */
+    if (dump_header)
+    {
+-      fprintf(out_fp,"%s\t%s\t%s\t%s\t%s\n",
+-       msg_h_hits,msg_h_files,msg_h_xfer,msg_h_visits,msg_h_hname); 
++      fprintf(out_fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
++       msg_h_hits,msg_h_files,msg_h_xfer,msg_h_ixfer,msg_h_oxfer,msg_h_visits,
++       msg_h_hname); 
+    }
+    /* dump 'em */
+@@ -2167,8 +2310,9 @@
+       if (hptr->flag != OBJ_GRP)
+       {
+          fprintf(out_fp,
+-         "%llu\t%llu\t%.0f\t%llu\t%s\n",
++         "%llu\t%llu\t%.0f\t%.0f\t%.0f\t%llu\t%s\n",
+             hptr->count,hptr->files,hptr->xfer/1024,
++          hptr->ixfer/1024,hptr->oxfer/1024,
+             hptr->visit,hptr->string);
+       }
+       cnt--;
+@@ -2198,7 +2342,8 @@
+    /* need a header? */
+    if (dump_header)
+    {
+-      fprintf(out_fp,"%s\t%s\t%s\n",msg_h_hits,msg_h_xfer,msg_h_url);
++      fprintf(out_fp,"%s\t%s\t%s\t%s\t%s\n",msg_h_hits,msg_h_xfer,msg_h_ixfer,
++                      msg_h_oxfer,msg_h_url);
+    }
+    /* dump 'em */
+@@ -2208,8 +2353,9 @@
+       uptr=*pointer++;
+       if (uptr->flag != OBJ_GRP)
+       {
+-         fprintf(out_fp,"%llu\t%.0f\t%s\n",
+-            uptr->count,uptr->xfer/1024,uptr->string);
++         fprintf(out_fp,"%llu\t%.0f\t%.0f\t%.0f\t%s\n",
++            uptr->count,uptr->xfer/1024,uptr->ixfer/1024,uptr->oxfer/1024,
++          uptr->string);
+       }
+       cnt--;
+    }
+@@ -2316,8 +2462,9 @@
+    /* need a header? */
+    if (dump_header)
+    {
+-      fprintf(out_fp,"%s\t%s\t%s\t%s\t%s\n",
+-         msg_h_hits,msg_h_files,msg_h_xfer,msg_h_visits,msg_h_uname);
++      fprintf(out_fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
++         msg_h_hits,msg_h_files,msg_h_xfer,msg_h_ixfer,msg_h_oxfer,msg_h_visits,
++         msg_h_uname);
+    }
+    /* dump 'em */
+@@ -2328,8 +2475,9 @@
+       if (iptr->flag != OBJ_GRP)
+       {
+          fprintf(out_fp,
+-         "%llu\t%llu\t%.0f\t%llu\t%s\n",
++         "%llu\t%llu\t%.0f\t%.0f\t%.0f\t%llu\t%s\n",
+             iptr->count,iptr->files,iptr->xfer/1024,
++          iptr->ixfer/1024,iptr->oxfer/1024,
+             iptr->visit,iptr->string);
+       }
+       cnt--;
+@@ -2391,10 +2539,14 @@
+    u_int64_t m_pages=0;
+    u_int64_t m_visits=0;
+    double    m_xfer=0.0;
++   double    m_ixfer=0.0;
++   double    m_oxfer=0.0;
+    double  gt_hit=0.0;
+    double  gt_files=0.0;
+    double  gt_pages=0.0;
+    double  gt_xfer=0.0;
++   double  gt_ixfer=0.0;
++   double  gt_oxfer=0.0;
+    double  gt_visits=0.0;
+    if (verbose>1) printf("%s\n",msg_gen_sum);
+@@ -2450,14 +2602,14 @@
+    /* month table */
+    fprintf(out_fp,"<TABLE WIDTH=600 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   fprintf(out_fp,"<TR><TH COLSPAN=11 BGCOLOR=\"%s\" ALIGN=center>",GREY);
++   fprintf(out_fp,"<TR><TH COLSPAN=13 BGCOLOR=\"%s\" ALIGN=center>",GREY);
+    fprintf(out_fp,"%s</TH></TR>\n",msg_main_sum);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH ALIGN=left ROWSPAN=2 BGCOLOR=\"%s\">"          \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREY,msg_h_mth);
+    fprintf(out_fp,"<TH ALIGN=center COLSPAN=4 BGCOLOR=\"%s\">"            \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREY,msg_main_da);
+-   fprintf(out_fp,"<TH ALIGN=center COLSPAN=6 BGCOLOR=\"%s\">"            \
++   fprintf(out_fp,"<TH ALIGN=center COLSPAN=8 BGCOLOR=\"%s\">"            \
+           "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",GREY,msg_main_mt);
+    fprintf(out_fp,"<TR><TH ALIGN=center BGCOLOR=\"%s\">"                  \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",HITCOLOR,msg_h_hits);
+@@ -2472,6 +2624,10 @@
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",KBYTECOLOR,msg_h_xfer);
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
++          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
++          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",PAGECOLOR,msg_h_pages);
+@@ -2501,6 +2657,10 @@
+                 GRPCOLOR,s_year);
+             fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                   "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_xfer);
++               fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
++                     "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_ixfer);
++               fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
++                     "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_oxfer);
+             fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                   "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_visits);
+             fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+@@ -2509,13 +2669,13 @@
+                   "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_files);
+             fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                   "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_hit);
+-            m_xfer=0; m_visits=0; m_pages=0; m_files=0; m_hit=0;
++            m_xfer=0; m_ixfer=0; m_oxfer=0; m_visits=0; m_pages=0; m_files=0; m_hit=0;
+          }
+  
+          /* Year Header */
+          s_year=hist[i].year;
+          if (index_mths>16 && year_hdrs)
+-            fprintf(out_fp,"<TR><TH COLSPAN=11 BGCOLOR=\"%s\" "           \
++            fprintf(out_fp,"<TR><TH COLSPAN=13 BGCOLOR=\"%s\" "           \
+                "ALIGN=center>%04d</TH></TR>\n", GREY, s_year);
+       }
+@@ -2541,6 +2701,10 @@
+                       hist[i].site);
+       fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%.0f</FONT></TD>\n",
+                       hist[i].xfer);
++      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%.0f</FONT></TD>\n",
++                      hist[i].ixfer);
++      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%.0f</FONT></TD>\n",
++                      hist[i].oxfer);
+       fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                       hist[i].visit);
+       fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+@@ -2554,12 +2718,16 @@
+       gt_files += hist[i].files;
+       gt_pages += hist[i].page;
+       gt_xfer  += hist[i].xfer;
++      gt_ixfer += hist[i].ixfer;
++      gt_oxfer += hist[i].oxfer;
+       gt_visits+= hist[i].visit;
+        m_hit   += hist[i].hit;
+        m_files += hist[i].files;
+        m_pages += hist[i].page;
+        m_visits+= hist[i].visit;
+        m_xfer  += hist[i].xfer;
++       m_ixfer += hist[i].ixfer;
++       m_oxfer += hist[i].oxfer;
+    }
+    if (index_mths>16 && year_totals)
+@@ -2569,6 +2737,10 @@
+                      GRPCOLOR,s_year);
+       fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                      "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_xfer);
++         fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
++                        "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_ixfer);
++         fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
++                        "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_oxfer);
+       fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                      "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_visits);
+       fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+@@ -2584,6 +2756,10 @@
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+           "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_xfer);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
++          "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_ixfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
++          "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_oxfer);
++   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+           "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_visits);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+           "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_pages);
+Index: webalizer/parser.c
+===================================================================
+--- webalizer.orig/parser.c    2011-04-18 23:54:32.000000000 +0200
++++ webalizer/parser.c 2011-04-18 23:56:44.000000000 +0200
+@@ -199,6 +199,9 @@
+    /* return appropriate response code */
+    log_rec.resp_code=(*(eob-2)=='i')?206:200;
++   /* don't worry about I/O bytes in FTP */
++   log_rec.ixfer_size=log_rec.oxfer_size=0;
++
+    return 1;
+ }
+@@ -365,6 +368,18 @@
+    while ( (*cp1 != '\0') && (cp1 != eos) ) *cp2++ = *cp1++;
+    *cp2 = '\0';
++   /* IN xfer size */
++   while ( (*cp1 != '\0') && (cp1 < eob) ) cp1++;
++   if (cp1 < eob) cp1++;
++   if (*cp1<'0'||*cp1>'9') log_rec.ixfer_size=0;
++   else log_rec.ixfer_size = strtoul(cp1,NULL,10);
++
++   /* OUT xfer size */
++   while ( (*cp1 != '\0') && (cp1 < eob) ) cp1++;
++   if (cp1 < eob) cp1++;
++   if (*cp1<'0'||*cp1>'9') log_rec.oxfer_size=0;
++   else log_rec.oxfer_size = strtoul(cp1,NULL,10);
++
+    return 1;     /* maybe a valid record, return with TRUE */
+ }
+@@ -501,6 +516,9 @@
+    /* strip trailing space(s) */
+    while (*cp2==' ') *cp2--='\0';
++   /* don't do this for squid */
++   log_rec.ixfer_size=log_rec.oxfer_size=0;
++
+    /* we have no interest in the remaining fields */
+    return 1;
+ }
+Index: webalizer/preserve.c
+===================================================================
+--- webalizer.orig/preserve.c  2011-04-18 23:54:32.000000000 +0200
++++ webalizer/preserve.c       2011-04-18 23:56:44.000000000 +0200
+@@ -121,7 +121,8 @@
+          if (i>=0)
+          {
+          /* month# year# requests files sites xfer firstday lastday */
+-         numfields = sscanf(buffer,"%d %d %llu %llu %llu %lf %d %d %llu %llu",
++         numfields = sscanf(buffer,
++                     "%d %d %llu %llu %llu %lf %d %d %llu %llu %lf %lf",
+                        &hist[i].month,
+                        &hist[i].year,
+                        &hist[i].hit,
+@@ -131,7 +132,9 @@
+                        &hist[i].fday,
+                        &hist[i].lday,
+                        &hist[i].page,
+-                       &hist[i].visit);
++                       &hist[i].visit,
++                       &hist[i].ixfer,
++                       &hist[i].oxfer);
+          }
+       }
+       fclose(hist_fp);
+@@ -184,7 +187,7 @@
+       for (i=HISTSIZE-1;i>=0;i--)
+       {
+-         fprintf(hist_fp,"%d %d %llu %llu %llu %.0f %d %d %llu %llu\n",
++         fprintf(hist_fp,"%d %d %llu %llu %llu %.0f %d %d %llu %llu %.0f %.0f\n",
+                          hist[i].month,
+                          hist[i].year,
+                          hist[i].hit,
+@@ -194,7 +197,9 @@
+                          hist[i].fday,
+                          hist[i].lday,
+                          hist[i].page,
+-                         hist[i].visit);
++                         hist[i].visit,
++                         hist[i].ixfer,
++                         hist[i].oxfer);
+       }
+       /* Done, close file */
+       fclose(hist_fp);
+@@ -296,6 +301,8 @@
+       hist[i].visit = t_visit;
+       hist[i].site  = t_site;
+       hist[i].xfer  = t_xfer/1024;
++      hist[i].ixfer = t_ixfer/1024;
++      hist[i].oxfer = t_oxfer/1024;
+       hist[i].fday  = f_day;
+       hist[i].lday  = l_day;
+    }
+@@ -361,9 +368,9 @@
+    if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+    /* Monthly totals for sites, urls, etc... */
+-   sprintf(buffer,"%llu %llu %llu %llu %llu %llu %.0f %llu %llu %llu\n",
++   sprintf(buffer,"%llu %llu %llu %llu %llu %llu %.0f %llu %llu %llu %.0f %.0f\n",
+         t_hit, t_file, t_site, t_url,
+-        t_ref, t_agent, t_xfer, t_page, t_visit, t_user);
++        t_ref, t_agent, t_xfer, t_page, t_visit, t_user, t_ixfer, t_oxfer);
+    if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+    /* Daily totals for sites, urls, etc... */
+@@ -374,16 +381,17 @@
+    /* Monthly (by day) total array */
+    for (i=0;i<31;i++)
+    {
+-      sprintf(buffer,"%llu %llu %.0f %llu %llu %llu\n",
+-        tm_hit[i],tm_file[i],tm_xfer[i],tm_site[i],tm_page[i],tm_visit[i]);
++      sprintf(buffer,"%llu %llu %.0f %llu %llu %llu %.0f %.0f\n",
++        tm_hit[i],tm_file[i],tm_xfer[i],tm_site[i],
++      tm_page[i],tm_visit[i],tm_ixfer[i],tm_oxfer[i]);
+       if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+    }
+    /* Daily (by hour) total array */
+    for (i=0;i<24;i++)
+    {
+-      sprintf(buffer,"%llu %llu %.0f %llu\n",
+-        th_hit[i],th_file[i],th_xfer[i],th_page[i]);
++      sprintf(buffer,"%llu %llu %.0f %llu %.0f %.0f\n",
++        th_hit[i],th_file[i],th_xfer[i],th_page[i],th_ixfer[i],th_oxfer[i]);
+       if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+    }
+@@ -402,9 +410,11 @@
+       uptr=um_htab[i];
+       while (uptr!=NULL)
+       {
+-         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu\n",
++         snprintf(buffer,sizeof(buffer),
++                "%s\n%d %llu %llu %.0f %llu %llu %.0f %.0f\n",
+                   uptr->string, uptr->flag, uptr->count, uptr->files,
+-                  uptr->xfer, uptr->entry, uptr->exit);
++                  uptr->xfer, uptr->entry, uptr->exit,
++                uptr->ixfer, uptr->oxfer);
+          if (fputs(buffer,fp)==EOF) return 1;
+          uptr=uptr->next;
+       }
+@@ -419,9 +429,10 @@
+       hptr=sm_htab[i];
+       while (hptr!=NULL)
+       {
+-         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu\n%s\n",
++         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu %.0f %.0f\n%s\n",
+                   hptr->string, hptr->flag, hptr->count, hptr->files,
+                   hptr->xfer, hptr->visit, hptr->tstamp,
++                hptr->ixfer, hptr->oxfer,
+                   (hptr->lasturl==blank_str)?"-":hptr->lasturl);
+          if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+          hptr=hptr->next;
+@@ -436,9 +447,10 @@
+       hptr=sd_htab[i];
+       while (hptr!=NULL)
+       {
+-         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu\n%s\n",
++         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu %.0f %.0f\n%s\n",
+                   hptr->string, hptr->flag, hptr->count, hptr->files,
+                   hptr->xfer, hptr->visit, hptr->tstamp,
++                hptr->ixfer, hptr->oxfer,
+                   (hptr->lasturl==blank_str)?"-":hptr->lasturl);
+          if (fputs(buffer,fp)==EOF) return 1;
+          hptr=hptr->next;
+@@ -505,9 +517,9 @@
+       iptr=im_htab[i];
+       while (iptr!=NULL)
+       {
+-         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu\n",
++         snprintf(buffer,sizeof(buffer),"%s\n%d %llu %llu %.0f %llu %llu %.0f %.0f\n",
+                   iptr->string, iptr->flag, iptr->count, iptr->files,
+-              iptr->xfer, iptr->visit, iptr->tstamp);
++              iptr->xfer, iptr->visit, iptr->tstamp, iptr->ixfer, iptr->oxfer);
+          if (fputs(buffer,fp)==EOF) return 1;  /* error exit */
+          iptr=iptr->next;
+       }
+@@ -589,9 +601,10 @@
+    /* Get monthly totals */
+    if ((fgets(buffer,BUFSIZE,fp)) != NULL)
+    {
+-      sscanf(buffer,"%llu %llu %llu %llu %llu %llu %lf %llu %llu %llu",
++      sscanf(buffer,"%llu %llu %llu %llu %llu %llu %lf %llu %llu %llu %lf %lf",
+        &t_hit, &t_file, &t_site, &t_url,
+-       &t_ref, &t_agent, &t_xfer, &t_page, &t_visit, &t_user);
++       &t_ref, &t_agent, &t_xfer, &t_page, &t_visit, 
++       &t_user, &t_ixfer, &t_oxfer);
+    } else return 3;  /* error exit */
+      
+    /* Get daily totals */
+@@ -606,9 +619,9 @@
+    {
+       if ((fgets(buffer,BUFSIZE,fp)) != NULL)
+       {
+-         sscanf(buffer,"%llu %llu %lf %llu %llu %llu",
++         sscanf(buffer,"%llu %llu %lf %llu %llu %llu %lf %lf",
+           &tm_hit[i],&tm_file[i],&tm_xfer[i],&tm_site[i],&tm_page[i],
+-          &tm_visit[i]);
++          &tm_visit[i],&tm_ixfer[i],&tm_oxfer[i]);
+       } else return 5;  /* error exit */
+    }
+@@ -617,8 +630,9 @@
+    {
+       if ((fgets(buffer,BUFSIZE,fp)) != NULL)
+       {
+-         sscanf(buffer,"%llu %llu %lf %llu",
+-          &th_hit[i],&th_file[i],&th_xfer[i],&th_page[i]);
++         sscanf(buffer,"%llu %llu %lf %llu %lf %lf",
++          &th_hit[i],&th_file[i],&th_xfer[i],
++        &th_page[i],&th_ixfer[i],&th_oxfer[i]);
+       } else return 6;  /* error exit */
+    }
+@@ -652,14 +666,15 @@
+       if (!isdigit((unsigned char)buffer[0])) return 10;  /* error exit */
+       /* load temporary node data */
+-      sscanf(buffer,"%d %llu %llu %lf %llu %llu",
++      sscanf(buffer,"%d %llu %llu %lf %llu %llu %lf %lf",
+          &t_unode.flag,&t_unode.count,
+          &t_unode.files, &t_unode.xfer,
+-         &t_unode.entry, &t_unode.exit);
++         &t_unode.entry, &t_unode.exit, &t_unode.ixfer, &t_unode.oxfer);
+       /* Good record, insert into hash table */
+       if (put_unode(tmp_buf,t_unode.flag,t_unode.count,
+-         t_unode.xfer,&ul_bogus,t_unode.entry,t_unode.exit,um_htab))
++         t_unode.xfer,t_unode.ixfer,t_unode.oxfer,&ul_bogus,t_unode.entry,
++       t_unode.exit,um_htab))
+       {
+          if (verbose)
+          /* Error adding URL node, skipping ... */
+@@ -683,10 +698,10 @@
+       if (!isdigit((unsigned char)buffer[0])) return 8;  /* error exit */
+       /* load temporary node data */
+-      sscanf(buffer,"%d %llu %llu %lf %llu %llu",
++      sscanf(buffer,"%d %llu %llu %lf %llu %llu %lf %lf",
+          &t_hnode.flag,&t_hnode.count,
+          &t_hnode.files, &t_hnode.xfer,
+-         &t_hnode.visit, &t_hnode.tstamp);
++         &t_hnode.visit, &t_hnode.tstamp, &t_hnode.ixfer, &t_hnode.oxfer);
+       /* get last url */
+       if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 8;  /* error exit */
+@@ -699,7 +714,8 @@
+       /* Good record, insert into hash table */
+       if (put_hnode(tmp_buf,t_hnode.flag,
+-         t_hnode.count,t_hnode.files,t_hnode.xfer,&ul_bogus,
++         t_hnode.count,t_hnode.files,t_hnode.xfer,t_hnode.ixfer,t_hnode.oxfer,
++         &ul_bogus,
+          t_hnode.visit+1,t_hnode.tstamp,t_hnode.lasturl,sm_htab))
+       {
+          /* Error adding host node (monthly), skipping .... */
+@@ -723,10 +739,10 @@
+       if (!isdigit((unsigned char)buffer[0])) return 9;  /* error exit */
+       /* load temporary node data */
+-      sscanf(buffer,"%d %llu %llu %lf %llu %llu",
++      sscanf(buffer,"%d %llu %llu %lf %llu %llu %lf %lf",
+           &t_hnode.flag,&t_hnode.count,
+           &t_hnode.files, &t_hnode.xfer,
+-          &t_hnode.visit, &t_hnode.tstamp);
++          &t_hnode.visit, &t_hnode.tstamp, &t_hnode.ixfer, &t_hnode.oxfer);
+       /* get last url */
+       if ((fgets(buffer,BUFSIZE,fp)) == NULL) return 9;  /* error exit */
+@@ -739,7 +755,8 @@
+       /* Good record, insert into hash table */
+       if (put_hnode(tmp_buf,t_hnode.flag,
+-         t_hnode.count,t_hnode.files,t_hnode.xfer,&ul_bogus,
++         t_hnode.count,t_hnode.files,t_hnode.xfer,t_hnode.ixfer,t_hnode.oxfer,
++         &ul_bogus,
+          t_hnode.visit+1,t_hnode.tstamp,t_hnode.lasturl,sd_htab))
+       {
+          /* Error adding host node (daily), skipping .... */
+@@ -837,14 +854,15 @@
+       if (!isdigit((unsigned char)buffer[0])) return 14;  /* error exit */
+       /* load temporary node data */
+-      sscanf(buffer,"%d %llu %llu %lf %llu %llu",
++      sscanf(buffer,"%d %llu %llu %lf %llu %llu %lf %lf",
+          &t_inode.flag,&t_inode.count,
+          &t_inode.files, &t_inode.xfer,
+-         &t_inode.visit, &t_inode.tstamp);
++         &t_inode.visit, &t_inode.tstamp, &t_inode.ixfer, &t_inode.oxfer);
+       /* Good record, insert into hash table */
+       if (put_inode(tmp_buf,t_inode.flag,
+-         t_inode.count,t_inode.files,t_inode.xfer,&ul_bogus,
++         t_inode.count,t_inode.files,t_inode.xfer,t_inode.ixfer,t_inode.oxfer,
++       &ul_bogus,
+          t_inode.visit+1,t_inode.tstamp,im_htab))
+       {
+          if (verbose)
+Index: webalizer/preserve.h
+===================================================================
+--- webalizer.orig/preserve.h  2011-04-18 23:54:32.000000000 +0200
++++ webalizer/preserve.h       2011-04-18 23:56:44.000000000 +0200
+@@ -21,6 +21,8 @@
+                   u_int64_t   page;           /* pages for month          */
+                   u_int64_t   visit;          /* visits for month         */
+                      double   xfer;           /* xfer amt for month       */
++                     double   ixfer;          /* ixfer amt for month      */
++                     double   oxfer;          /* oxfer amt for month      */
+                 };
+ extern struct hist_rec hist[HISTSIZE];        /* declare our hist array   */
+Index: webalizer/webalizer.c
+===================================================================
+--- webalizer.orig/webalizer.c 2011-04-18 23:54:39.000000000 +0200
++++ webalizer/webalizer.c      2011-04-18 23:56:44.000000000 +0200
+@@ -216,11 +216,15 @@
+ int        gz_log=COMP_NONE;                  /* gziped log? (0=no)       */
+ double     t_xfer=0.0;                        /* monthly total xfer value */
++double     t_ixfer=0.0;                       /* monthly total in xfer    */
++double     t_oxfer=0.0;                       /* monthly total out xfer   */
+ u_int64_t  t_hit=0,t_file=0,t_site=0,         /* monthly total vars       */
+            t_url=0,t_ref=0,t_agent=0,
+            t_page=0, t_visit=0, t_user=0;
+ double     tm_xfer[31];                       /* daily transfer totals    */
++double     tm_ixfer[31];                      /* daily in xfer totals     */
++double     tm_oxfer[31];                      /* daily out xfer totals    */
+ u_int64_t  tm_hit[31], tm_file[31],           /* daily total arrays       */
+            tm_site[31], tm_page[31],
+@@ -234,6 +238,8 @@
+            th_page[24];
+ double     th_xfer[24];
++double     th_ixfer[24];
++double     th_oxfer[24];
+ int        f_day,l_day;                       /* first/last day vars      */
+@@ -1202,7 +1208,8 @@
+          {
+             /* URL hash table */
+             if (put_unode(log_rec.url,OBJ_REG,(u_int64_t)1,
+-                log_rec.xfer_size,&t_url,(u_int64_t)0,(u_int64_t)0,um_htab))
++                log_rec.xfer_size,log_rec.ixfer_size,log_rec.oxfer_size,
++                &t_url,(u_int64_t)0,(u_int64_t)0,um_htab))
+             {
+                if (verbose)
+                /* Error adding URL node, skipping ... */
+@@ -1211,7 +1218,8 @@
+             /* ident (username) hash table */
+             if (put_inode(log_rec.ident,OBJ_REG,
+-                1,(u_int64_t)i,log_rec.xfer_size,&t_user,
++                1,(u_int64_t)i,log_rec.xfer_size,
++                log_rec.ixfer_size,log_rec.oxfer_size,&t_user,
+                 0,rec_tstamp,im_htab))
+             {
+                if (verbose)
+@@ -1233,7 +1241,8 @@
+          /* hostname (site) hash table - daily */
+          if (put_hnode(log_rec.hostname,OBJ_REG,
+-             1,(u_int64_t)i,log_rec.xfer_size,&dt_site,
++             1,(u_int64_t)i,log_rec.xfer_size,
++             log_rec.ixfer_size,log_rec.oxfer_size,&dt_site,
+              0,rec_tstamp,"",sd_htab))
+          {
+             if (verbose)
+@@ -1243,7 +1252,8 @@
+          /* hostname (site) hash table - monthly */
+          if (put_hnode(log_rec.hostname,OBJ_REG,
+-             1,(u_int64_t)i,log_rec.xfer_size,&t_site,
++             1,(u_int64_t)i,log_rec.xfer_size,
++             log_rec.ixfer_size,log_rec.oxfer_size,&t_site,
+              0,rec_tstamp,"",sm_htab))
+          {
+             if (verbose)
+@@ -1264,10 +1274,16 @@
+          /* bump monthly/daily/hourly totals        */
+          t_hit++; ht_hit++;                         /* daily/hourly hits    */
+-         t_xfer += log_rec.xfer_size;               /* total xfer size      */
+-         tm_xfer[rec_day-1] += log_rec.xfer_size;   /* daily xfer total     */
++         t_xfer  += log_rec.xfer_size;              /* total xfer size      */
++         t_ixfer += log_rec.ixfer_size;             /* total in xfer size   */
++         t_oxfer += log_rec.oxfer_size;             /* total out xfer size  */
++         tm_xfer[rec_day-1]  += log_rec.xfer_size;  /* daily xfer total     */
++         tm_ixfer[rec_day-1] += log_rec.ixfer_size; /* daily in xfer total  */
++         tm_oxfer[rec_day-1] += log_rec.oxfer_size; /* daily out xfer total */
+          tm_hit[rec_day-1]++;                       /* daily hits total     */
+          th_xfer[rec_hour] += log_rec.xfer_size;    /* hourly xfer total    */
++         th_ixfer[rec_hour] += log_rec.ixfer_size;  /* hourly in xfer total */
++         th_oxfer[rec_hour] += log_rec.oxfer_size;  /* hourly out xfer total*/
+          th_hit[rec_hour]++;                        /* hourly hits total    */
+    
+          /* if RC_OK, increase file counters */
+@@ -1297,6 +1313,7 @@
+          if ( (cp1=isinglist(group_urls,log_rec.url))!=NULL)
+          {
+             if (put_unode(cp1,OBJ_GRP,(u_int64_t)1,log_rec.xfer_size,
++                log_rec.ixfer_size,log_rec.oxfer_size,
+                 &ul_bogus,(u_int64_t)0,(u_int64_t)0,um_htab))
+             {
+                if (verbose)
+@@ -1310,7 +1327,8 @@
+          {
+             if (put_hnode(cp1,OBJ_GRP,1,
+                           (u_int64_t)(log_rec.resp_code==RC_OK)?1:0,
+-                          log_rec.xfer_size,&ul_bogus,
++                          log_rec.xfer_size,
++                        log_rec.ixfer_size,log_rec.oxfer_size,&ul_bogus,
+                           0,rec_tstamp,"",sm_htab))
+             {
+                if (verbose)
+@@ -1328,8 +1346,8 @@
+                {
+                   if (put_hnode(cp1,OBJ_GRP,1,
+                       (u_int64_t)(log_rec.resp_code==RC_OK)?1:0,
+-                      log_rec.xfer_size,&ul_bogus,
+-                      0,rec_tstamp,"",sm_htab))
++                      log_rec.xfer_size,log_rec.ixfer_size,log_rec.oxfer_size,
++                      &ul_bogus,0,rec_tstamp,"",sm_htab))
+                   {
+                      if (verbose)
+                      /* Error adding Site node, skipping ... */
+@@ -1366,7 +1384,8 @@
+          {
+             if (put_inode(cp1,OBJ_GRP,1,
+                           (u_int64_t)(log_rec.resp_code==RC_OK)?1:0,
+-                          log_rec.xfer_size,&ul_bogus,
++                          log_rec.xfer_size,
++                        log_rec.ixfer_size,log_rec.oxfer_size,&ul_bogus,
+                           0,rec_tstamp,im_htab))
+             {
+                if (verbose)
+@@ -1905,22 +1924,22 @@
+    for (i=0;i<TOTAL_RC;i++) response[i].count = 0;
+    for (i=0;i<31;i++)  /* monthly totals      */
+    {
+-    tm_xfer[i]=0.0;
++    tm_xfer[i]=tm_ixfer[i]=tm_oxfer[i]=0.0;
+     tm_hit[i]=tm_file[i]=tm_site[i]=tm_page[i]=tm_visit[i]=0;
+    }
+    for (i=0;i<24;i++)  /* hourly totals       */
+    {
+       th_hit[i]=th_file[i]=th_page[i]=0;
+-      th_xfer[i]=0.0;
++      th_xfer[i]=th_ixfer[i]=th_oxfer[i]=0.0;
+    }
+    for (i=0;ctry[i].desc;i++) /* country totals */
+    {
+       ctry[i].count=0;
+       ctry[i].files=0;
+-      ctry[i].xfer=0;
++      ctry[i].xfer=ctry[i].ixfer=ctry[i].oxfer=0;
+    }
+    t_hit=t_file=t_site=t_url=t_ref=t_agent=t_page=t_visit=t_user=0;
+-   t_xfer=0.0;
++   t_xfer=t_ixfer=t_oxfer=0.0;
+    mh_hit = dt_site = 0;
+    f_day=l_day=1;
+ }
+Index: webalizer/webalizer.h
+===================================================================
+--- webalizer.orig/webalizer.h 2011-04-18 23:54:32.000000000 +0200
++++ webalizer/webalizer.h      2011-04-18 23:56:44.000000000 +0200
+@@ -144,7 +144,9 @@
+                            char *desc;            /* TLD description      */
+                       u_int64_t count;            /* hit counter          */
+                       u_int64_t files;            /* file counter         */
+-                         double xfer; };          /* xfer amt counter     */
++                         double xfer;             /* xfer amt counter     */
++                         double ixfer;            /* in xfer amt counter  */
++                         double oxfer; };         /* out xfer amt counter */
+ typedef struct country_code *CLISTPTR;
+@@ -154,6 +156,8 @@
+                        char   url[MAXURL];        /* raw request field    */
+                         int   resp_code;          /* response code        */
+                   u_int64_t   xfer_size;          /* xfer size in bytes   */
++                  u_int64_t   ixfer_size;         /* in xfer size bytes   */
++                  u_int64_t   oxfer_size;         /* out xfer size bytes  */
+                        char   refer[MAXREF];      /* referrer             */
+                        char   agent[MAXAGENT];    /* user agent (browser) */
+                        char   srchstr[MAXSRCH];   /* search string        */
+@@ -252,11 +256,15 @@
+                  cur_min, cur_sec;
+ extern double    t_xfer;                      /* monthly total xfer value */
++extern double    t_ixfer;                     /* monthly total in xfer    */
++extern double    t_oxfer;                     /* monthly total out xfer   */
+ extern u_int64_t t_hit, t_file, t_site,       /* monthly total vars       */
+                  t_url, t_ref,  t_agent,
+                  t_page,t_visit,t_user;
+ extern double    tm_xfer[31];                 /* daily transfer totals    */
++extern double    tm_ixfer[31];                /* daily in xfer totals     */
++extern double    tm_oxfer[31];                /* daily out xfer totals    */
+ extern u_int64_t tm_hit[31], tm_file[31],     /* daily total arrays       */
+                  tm_site[31],tm_page[31],
+@@ -270,6 +278,8 @@
+                  th_page[24];
+ extern double    th_xfer[24];                 /* hourly xfer array        */
++extern double    th_ixfer[24];
++extern double    th_oxfer[24];
+ extern int       f_day,l_day;                 /* first/last day vars      */
+ extern int       gz_log;                      /* flag for zipped log      */
diff --git a/debian/patches/06_apache_logio_optional.diff b/debian/patches/06_apache_logio_optional.diff
new file mode 100644 (file)
index 0000000..7f6b347
--- /dev/null
@@ -0,0 +1,1407 @@
+From: Julien Viard de Galbert <julien@vdg.blogsite.org>
+Date: Wed, 24 Nov 2010 16:13:52 +0100
+Subject: [PATCH] Make logio optional
+
+This patch adds a InOutKb option to make the In/Out KByte data optional.
+You mush apply the apache_logio patch prior to applying this patch.
+---
+ graphs.c    |  171 ++++++++++------
+ output.c    |  654 +++++++++++++++++++++++++++++++++++++----------------------
+ sample.conf |   11 +
+ webalizer.c |   22 ++-
+ webalizer.h |    1 +
+ 5 files changed, 552 insertions(+), 307 deletions(-)
+
+Index: webalizer/graphs.c
+===================================================================
+--- webalizer.orig/graphs.c    2011-01-08 20:59:30.000000000 +0100
++++ webalizer/graphs.c 2011-01-08 20:59:32.000000000 +0100
+@@ -141,6 +141,15 @@
+    {
+       /* Kbytes Legend */
+       i = (strlen(msg_h_xfer)*6);
++      if (dump_inout == 0)
++      {
++         gdImageString(im,gdFontSmall,491-i,237,
++                    (unsigned char *)msg_h_xfer,dkgrey);
++         gdImageString(im,gdFontSmall,490-i,236,
++                    (unsigned char *)msg_h_xfer,KBYTECOLOR);
++      }
++      else
++      {
+       j = (strlen(msg_h_ixfer)*6);
+       k = (strlen(msg_h_oxfer)*6);
+       gdImageString(im,gdFontSmall,491-i-j-k-24,237,
+@@ -159,7 +168,7 @@
+                     (unsigned char *)msg_h_oxfer,dkgrey);
+       gdImageString(im,gdFontSmall,490-k,236,
+                     (unsigned char *)msg_h_oxfer,OKBYTECOLOR);
+-
++      }
+       /* Sites/Visits Legend */
+       i = (strlen(msg_h_visits)*6);
+       j = (strlen(msg_h_sites)*6);
+@@ -321,17 +330,30 @@
+    fmaxval=0.0;
+    for (i=s_mth; i<HISTSIZE; i++){
+        if (data[i].xfer > fmaxval) fmaxval = data[i].xfer;
+-       if (data[i].ixfer > fmaxval) fmaxval = data[i].ixfer;
+-       if (data[i].oxfer > fmaxval) fmaxval = data[i].oxfer;
++       if (dump_inout != 0)
++       {
++        if (data[i].ixfer > fmaxval) fmaxval = data[i].ixfer;
++        if (data[i].oxfer > fmaxval) fmaxval = data[i].oxfer;
++       }
+    }
+    if (fmaxval <= 0.0) fmaxval = 1.0;
+    sprintf(maxvaltxt, "%.0f", fmaxval);
+    gdImageStringUp(im, gdFontSmall,493,130+(strlen(maxvaltxt)*6),
+                    (unsigned char *)maxvaltxt,black);
+-   cs = 180.0/graph_mths; cw = (cs/2);
+-   co = (36/graph_mths<1)?1:36/graph_mths;
+-   ci = 308+((cw-2*co)/2);
++   cs = 180.0/graph_mths;
++   if (dump_inout == 0)
++   {
++      co = (48/graph_mths<1)?1:48/graph_mths;
++      cw = (cs/2)+(co/2);
++      ci = 308+((cw-co)/2);
++   }
++   else
++   {
++      co = (36/graph_mths<1)?1:36/graph_mths;
++      cw = (cs/2);
++      ci = 308+((cw-2*co)/2);
++   }
+    /* xfer */
+    for (i=s_mth; i<HISTSIZE; i++)
+@@ -345,28 +367,31 @@
+       if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
+    }
+-   /* ixfer */
+-   for (i=s_mth; i<HISTSIZE; i++)
++   if (dump_inout != 0)
+    {
+-      percent = ((float)data[i].ixfer / (float)fmaxval);
+-      if (percent <= 0.0) continue;
+-      x1 = ci + co + ((i-s_mth)*cs);
+-      x2 = x1 + cw;
+-      y1 = 232 - (percent * 98);
+-      gdImageFilledRectangle(im, x1, y1, x2, 232, IKBYTECOLOR);
+-      if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
+-   }
++      /* ixfer */
++      for (i=s_mth; i<HISTSIZE; i++)
++      {
++       percent = ((float)data[i].ixfer / (float)fmaxval);
++       if (percent <= 0.0) continue;
++       x1 = ci + co + ((i-s_mth)*cs);
++       x2 = x1 + cw;
++       y1 = 232 - (percent * 98);
++       gdImageFilledRectangle(im, x1, y1, x2, 232, IKBYTECOLOR);
++       if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
++      }
+-   /* oxfer */
+-   for (i=s_mth; i<HISTSIZE; i++)
+-   {
+-      percent = ((float)data[i].oxfer / (float)fmaxval);
+-      if (percent <= 0.0) continue;
+-      x1 = ci + co + co + ((i-s_mth)*cs);
+-      x2 = x1 + cw;
+-      y1 = 232 - (percent * 98);
+-      gdImageFilledRectangle(im, x1, y1, x2, 232, OKBYTECOLOR);
+-      if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
++      /* oxfer */
++      for (i=s_mth; i<HISTSIZE; i++)
++      {
++       percent = ((float)data[i].oxfer / (float)fmaxval);
++       if (percent <= 0.0) continue;
++       x1 = ci + co + co + ((i-s_mth)*cs);
++       x2 = x1 + cw;
++       y1 = 232 - (percent * 98);
++       gdImageFilledRectangle(im, x1, y1, x2, 232, OKBYTECOLOR);
++       if (cw>2) gdImageRectangle(im, x1, y1, x2, 232, black);
++      }
+    }
+    /* stat the file */
+@@ -471,24 +496,27 @@
+    if (graph_legend)                           /* Print color coded legends? */
+    {
+       /* Kbytes Legend */
+-      i=(strlen(msg_h_xfer)*6);
+-      j=(strlen(msg_h_ixfer)*6);
+       gdImageStringUp(im,gdFontSmall,494,376,
+                       (unsigned char *)msg_h_xfer,dkgrey);
+       gdImageStringUp(im,gdFontSmall,493,375,
+                       (unsigned char *)msg_h_xfer,KBYTECOLOR);
+-      gdImageStringUp(im,gdFontSmall,494,376-i-3,"/",dkgrey);
+-      gdImageStringUp(im,gdFontSmall,493,375-i-3,"/",black);
+-      gdImageStringUp(im,gdFontSmall,494,376-i-12,
+-                      (unsigned char *)msg_h_ixfer,dkgrey);
+-      gdImageStringUp(im,gdFontSmall,493,375-i-12,
+-                      (unsigned char *)msg_h_ixfer,IKBYTECOLOR);
+-      gdImageStringUp(im,gdFontSmall,494,376-i-j-15,"/",dkgrey);
+-      gdImageStringUp(im,gdFontSmall,493,375-i-j-15,"/",black);
+-      gdImageStringUp(im,gdFontSmall,494,376-i-j-24,
+-                      (unsigned char *)msg_h_oxfer,dkgrey);
+-      gdImageStringUp(im,gdFontSmall,493,375-i-j-24,
+-                      (unsigned char *)msg_h_oxfer,OKBYTECOLOR);
++      if (dump_inout != 0)
++      {
++       i=(strlen(msg_h_xfer)*6);
++       j=(strlen(msg_h_ixfer)*6);
++       gdImageStringUp(im,gdFontSmall,494,376-i-3,"/",dkgrey);
++       gdImageStringUp(im,gdFontSmall,493,375-i-3,"/",black);
++       gdImageStringUp(im,gdFontSmall,494,376-i-12,
++                       (unsigned char *)msg_h_ixfer,dkgrey);
++       gdImageStringUp(im,gdFontSmall,493,375-i-12,
++                       (unsigned char *)msg_h_ixfer,IKBYTECOLOR);
++       gdImageStringUp(im,gdFontSmall,494,376-i-j-15,"/",dkgrey);
++       gdImageStringUp(im,gdFontSmall,493,375-i-j-15,"/",black);
++       gdImageStringUp(im,gdFontSmall,494,376-i-j-24,
++                       (unsigned char *)msg_h_oxfer,dkgrey);
++       gdImageStringUp(im,gdFontSmall,493,375-i-j-24,
++                       (unsigned char *)msg_h_oxfer,OKBYTECOLOR);
++      }
+       /* Sites/Visits Legend */
+       i = (strlen(msg_h_sites)*6);
+@@ -602,8 +630,11 @@
+    fmaxval=0.0;
+    for (i=0; i<31; i++){
+       if (data4[i]>fmaxval) fmaxval = data4[i];
+-      if (data5[i]>fmaxval) fmaxval = data5[i];
+-      if (data6[i]>fmaxval) fmaxval = data6[i];
++      if (dump_inout != 0)
++      {
++       if (data5[i]>fmaxval) fmaxval = data5[i];
++       if (data6[i]>fmaxval) fmaxval = data6[i];
++      }
+    }
+    if (fmaxval <= 0.0) fmaxval = 1.0;
+    sprintf(maxvaltxt, "%.0f", fmaxval/1024);
+@@ -615,38 +646,48 @@
+    {
+       percent = data4[i] / fmaxval;
+       if (percent <= 0.0) continue;
+-      x1 = 25 + (i*15);
+-      x2 = x1 + 7;
++      if (dump_inout == 0)
++      {
++       x1 = 26 + (i*15);
++       x2 = x1 + 10;
++      }
++      else
++      {
++       x1 = 25 + (i*15);
++       x2 = x1 + 7;
++      }
+       y1 = 375 - ( percent * 91 );
+       gdImageFilledRectangle(im, x1, y1, x2, 375, KBYTECOLOR);
+       gdImageRectangle(im, x1, y1, x2, 375, black);
+    }
+-   /* data5 */
+-   for (i=0; i<31; i++)
++   if (dump_inout != 0)
+    {
+-      percent = data5[i] / fmaxval;
+-      if (percent <= 0.0) continue;
+-      x1 = 27 + (i*15);
+-      x2 = x1 + 7;
+-      y1 = 375 - ( percent * 91 );
+-      gdImageFilledRectangle(im, x1, y1, x2, 375, IKBYTECOLOR);
+-      gdImageRectangle(im, x1, y1, x2, 375, black);
+-   }
++      /* data5 */
++      for (i=0; i<31; i++)
++      {
++       percent = data5[i] / fmaxval;
++       if (percent <= 0.0) continue;
++       x1 = 27 + (i*15);
++       x2 = x1 + 7;
++       y1 = 375 - ( percent * 91 );
++       gdImageFilledRectangle(im, x1, y1, x2, 375, IKBYTECOLOR);
++       gdImageRectangle(im, x1, y1, x2, 375, black);
++      }
+-   /* data6 */
+-   for (i=0; i<31; i++)
+-   {
+-      percent = data6[i] / fmaxval;
+-      if (percent <= 0.0) continue;
+-      x1 = 29 + (i*15);
+-      x2 = x1 + 7;
+-      y1 = 375 - ( percent * 91 );
+-      gdImageFilledRectangle(im, x1, y1, x2, 375, OKBYTECOLOR);
+-      gdImageRectangle(im, x1, y1, x2, 375, black);
++      /* data6 */
++      for (i=0; i<31; i++)
++      {
++       percent = data6[i] / fmaxval;
++       if (percent <= 0.0) continue;
++       x1 = 29 + (i*15);
++       x2 = x1 + 7;
++       y1 = 375 - ( percent * 91 );
++       gdImageFilledRectangle(im, x1, y1, x2, 375, OKBYTECOLOR);
++       gdImageRectangle(im, x1, y1, x2, 375, black);
++      }
+    }
+-
+    /* stat the file */
+    if ( !(lstat(fname, &out_stat)) )
+    {
+Index: webalizer/output.c
+===================================================================
+--- webalizer.orig/output.c    2011-01-08 20:59:30.000000000 +0100
++++ webalizer/output.c 2011-01-08 20:59:32.000000000 +0100
+@@ -549,12 +549,15 @@
+    fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
+       "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%.0f</B>"              \
+       "</FONT></TD></TR>\n",msg_mtot_tx,t_xfer/1024);
+-   fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
+-      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%.0f</B>"              \
+-      "</FONT></TD></TR>\n",msg_mtot_ix,t_ixfer/1024);
+-   fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
+-      "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%.0f</B>"              \
+-      "</FONT></TD></TR>\n",msg_mtot_ox,t_oxfer/1024);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
++       "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%.0f</B>"              \
++       "</FONT></TD></TR>\n",msg_mtot_ix,t_ixfer/1024);
++      fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
++       "<TD ALIGN=right COLSPAN=2><FONT SIZE=\"-1\"><B>%.0f</B>"              \
++       "</FONT></TD></TR>\n",msg_mtot_ox,t_oxfer/1024);
++   }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    /**********************************************/
+    /* Unique Sites */
+@@ -639,18 +642,21 @@
+       "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%.0f</B>"                   \
+       "</FONT></TD></TR>\n",msg_mtot_mkd,
+       (t_xfer/1024)/days_in_month,max_xfer/1024);
+-   fprintf(out_fp,"<TR>"                                                     \
+-      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
+-      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%.0f</B>"                   \
+-      "</FONT></TD></TR>\n",msg_mtot_ikd,
+-      (t_ixfer/1024)/days_in_month,max_ixfer/1024);
+-   fprintf(out_fp,"<TR>"                                                     \
+-      "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
+-      "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-      "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%.0f</B>"                   \
+-      "</FONT></TD></TR>\n",msg_mtot_okd,
+-      (t_oxfer/1024)/days_in_month,max_oxfer/1024);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"<TR>"                                                     \
++       "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
++       "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++       "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%.0f</B>"                   \
++       "</FONT></TD></TR>\n",msg_mtot_ikd,
++       (t_ixfer/1024)/days_in_month,max_ixfer/1024);
++      fprintf(out_fp,"<TR>"                                                     \
++       "<TD><FONT SIZE=\"-1\">%s</FONT></TD>\n"                               \
++       "<TD ALIGN=right WIDTH=65><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++       "<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>%.0f</B>"                   \
++       "</FONT></TD></TR>\n",msg_mtot_okd,
++       (t_oxfer/1024)/days_in_month,max_oxfer/1024);
++   }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    /**********************************************/
+    /* response code totals */
+@@ -684,9 +690,9 @@
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    /* Daily statistics for ... */
+-   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=17 ALIGN=center>"          \
++   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=%d ALIGN=center>"          \
+            "%s %s %d</TH></TR>\n",
+-           GREY,msg_dtot_ds,l_month[cur_month-1], cur_year);
++           GREY,(dump_inout==0)?13:17,msg_dtot_ds,l_month[cur_month-1], cur_year);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH ALIGN=center BGCOLOR=\"%s\">"                     \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                       \
+@@ -701,20 +707,28 @@
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"               \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                       \
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"               \
+-                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                       \
+-                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"               \
+-                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                       \
+-                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"               \
+-                  "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
++                  "<FONT SIZE=\"-1\">%s</FONT></TH>",
+                   GREY,       msg_h_day,
+                   HITCOLOR,   msg_h_hits,
+                   FILECOLOR,  msg_h_files,
+                   PAGECOLOR,  msg_h_pages,
+                   VISITCOLOR, msg_h_visits,
+                   SITECOLOR,  msg_h_sites,
+-                  KBYTECOLOR, msg_h_xfer,
+-                  LTBLUE,  msg_h_ixfer,
+-                  GREEN,   msg_h_oxfer);
++                  KBYTECOLOR, msg_h_xfer);
++   if (dump_inout == 0)
++   {
++      fprintf(out_fp,"</TR>\n");
++   }
++   else
++   {
++      fprintf(out_fp,"\n" \
++                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"            \
++                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                    \
++                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"            \
++                   "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
++                   LTBLUE,  msg_h_ixfer,
++                   GREEN,   msg_h_oxfer);
++   }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    /* skip beginning blank days in a month */
+@@ -750,16 +764,24 @@
+               tm_site[i],PCENT(tm_site[i],t_site));
+       fprintf(out_fp,"<TD ALIGN=right>"                                      \
+               "<FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"                  \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>",
+               tm_xfer[i]/1024,PCENT(tm_xfer[i],t_xfer));
+-      fprintf(out_fp,"<TD ALIGN=right>"                                      \
+-              "<FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"                  \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+-              tm_ixfer[i]/1024,PCENT(tm_ixfer[i],t_ixfer));
+-      fprintf(out_fp,"<TD ALIGN=right>"                                      \
+-              "<FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"                  \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD></TR>\n",
+-              tm_oxfer[i]/1024,PCENT(tm_oxfer[i],t_oxfer));
++      if (dump_inout == 0)
++      {
++       fprintf(out_fp,"</TR>\n");
++      }
++      else
++      {
++       fprintf(out_fp,"\n" \
++               "<TD ALIGN=right>"                                          \
++               "<FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"               \
++               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
++               tm_ixfer[i]/1024,PCENT(tm_ixfer[i],t_ixfer));
++       fprintf(out_fp,"<TD ALIGN=right>"                                   \
++               "<FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"               \
++               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD></TR>\n",
++               tm_oxfer[i]/1024,PCENT(tm_oxfer[i],t_oxfer));
++      }
+    }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"</TABLE>\n");
+@@ -781,9 +803,9 @@
+    /* Hourly stats */
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=19 ALIGN=center>"\
++   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=%d ALIGN=center>"\
+            "%s %s %d</TH></TR>\n",
+-           GREY,msg_htot_hs,l_month[cur_month-1], cur_year);
++           GREY,(dump_inout==0)?13:19,msg_htot_hs,l_month[cur_month-1], cur_year);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH ALIGN=center ROWSPAN=2 BGCOLOR=\"%s\">" \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"             \
+@@ -794,18 +816,26 @@
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"     \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"             \
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"     \
+-                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n"             \
+-                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"     \
+-                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n"             \
+-                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"     \
+-                  "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
++                  "<FONT SIZE=\"-1\">%s</FONT></TH>",
+                   GREY,       msg_h_hour,
+                   HITCOLOR,   msg_h_hits,
+                   FILECOLOR,  msg_h_files,
+                   PAGECOLOR,  msg_h_pages,
+-                  KBYTECOLOR, msg_h_xfer,
+-                  LTBLUE,  msg_h_ixfer,
+-                  GREEN,   msg_h_oxfer);
++                  KBYTECOLOR, msg_h_xfer);
++   if (dump_inout == 0)
++   {
++      fprintf(out_fp,"</TR>\n");
++   }
++   else
++   {
++      fprintf(out_fp,"\n" \
++                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"  \
++                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"          \
++                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"  \
++                   "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
++                   LTBLUE,  msg_h_ixfer,
++                   GREEN,   msg_h_oxfer);
++   }
+    fprintf(out_fp,"<TR><TH ALIGN=center BGCOLOR=\"%s\">"           \
+                   "<FONT SIZE=\"-2\">%s</FONT></TH>\n"             \
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"     \
+@@ -824,18 +854,26 @@
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"               \
+                   "<FONT SIZE=\"-2\">%s</FONT></TH>\n"             \
+                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"     \
+-                  "<FONT SIZE=\"-2\">%s</FONT></TH>\n",
++                  "<FONT SIZE=\"-2\">%s</FONT>",
+                   KBYTECOLOR, msg_h_avg, KBYTECOLOR, msg_h_total);
+-   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"               \
+-                  "<FONT SIZE=\"-2\">%s</FONT></TH>\n"             \
+-                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"     \
+-                  "<FONT SIZE=\"-2\">%s</FONT></TH>\n",
+-                  LTBLUE, msg_h_avg, LTBLUE, msg_h_total);
+-   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"               \
+-                  "<FONT SIZE=\"-2\">%s</FONT></TH>\n"             \
+-                  "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"     \
+-                  "<FONT SIZE=\"-2\">%s</FONT></TH></TR>\n",
+-                  GREEN, msg_h_avg, GREEN, msg_h_total);
++   if (dump_inout == 0)
++   {
++      fprintf(out_fp,"</TR>\n");
++   }
++   else
++   {
++      fprintf(out_fp,"\n" \
++                   "<TH ALIGN=center BGCOLOR=\"%s\">"            \
++                   "<FONT SIZE=\"-2\">%s</FONT></TH>\n"          \
++                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"  \
++                   "<FONT SIZE=\"-2\">%s</FONT></TH>\n",
++                   LTBLUE, msg_h_avg, LTBLUE, msg_h_total);
++      fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"            \
++                   "<FONT SIZE=\"-2\">%s</FONT></TH>\n"          \
++                   "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"  \
++                   "<FONT SIZE=\"-2\">%s</FONT></TH></TR>\n",
++                   GREEN, msg_h_avg, GREEN, msg_h_total);
++   }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    for (i=0;i<24;i++)
+@@ -863,21 +901,29 @@
+       fprintf(out_fp,
+          "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+          "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
++         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>",
+          (th_xfer[i]/days_in_month)/1024,th_xfer[i]/1024,
+          PCENT(th_xfer[i],t_xfer));
+-      fprintf(out_fp,
+-         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+-         (th_ixfer[i]/days_in_month)/1024,th_ixfer[i]/1024,
+-         PCENT(th_ixfer[i],t_ixfer));
+-      fprintf(out_fp,
+-         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-         "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-         "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD></TR>\n",
+-         (th_oxfer[i]/days_in_month)/1024,th_oxfer[i]/1024,
+-         PCENT(th_oxfer[i],t_oxfer));
++      if (dump_inout == 0)
++      {
++       fprintf(out_fp,"</TR>\n");
++      }
++      else
++      {
++       fprintf(out_fp,"\n" \
++          "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++          "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++          "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
++          (th_ixfer[i]/days_in_month)/1024,th_ixfer[i]/1024,
++          PCENT(th_ixfer[i],t_ixfer));
++       fprintf(out_fp,
++          "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++          "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++          "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD></TR>\n",
++          (th_oxfer[i]/days_in_month)/1024,th_oxfer[i]/1024,
++          PCENT(th_oxfer[i],t_oxfer));
++      }
++
+       avg_file += th_file[i]/days_in_month;
+       avg_xfer += (th_xfer[i]/days_in_month)/1024;
+       avg_ixfer+= (th_ixfer[i]/days_in_month)/1024;
+@@ -919,13 +965,13 @@
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   if (flag) fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=14>" \
++   if (flag) fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=%d>" \
+            "%s %llu %s %llu %s %s %s</TH></TR>\n",
+-           GREY, msg_top_top,tot_num,msg_top_of,
++           GREY,(dump_inout==0)?10:14, msg_top_top,tot_num,msg_top_of,
+            t_site,msg_top_s,msg_h_by,msg_h_xfer);
+-   else      fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=14>" \
++   else      fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=%d>" \
+            "%s %llu %s %llu %s</TH></TR>\n",
+-           GREY,msg_top_top, tot_num, msg_top_of, t_site, msg_top_s);
++           GREY,(dump_inout==0)?10:14,msg_top_top, tot_num, msg_top_of, t_site, msg_top_s);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=center>"                    \
+           "<FONT SIZE=\"-1\">#</FONT></TH>\n",GREY);
+@@ -935,10 +981,13 @@
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",FILECOLOR,msg_h_files);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",KBYTECOLOR,msg_h_xfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
+-          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
+-          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"           \
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"           \
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   }
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                        \
+@@ -963,21 +1012,26 @@
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+-              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+-              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+-               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+-              "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+               i+1,hptr->count,
+               (t_hit==0)?0:((float)hptr->count/t_hit)*100.0,hptr->files,
+               (t_file==0)?0:((float)hptr->files/t_file)*100.0,hptr->xfer/1024,
+-              (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0,hptr->ixfer/1024,
+-              (t_ixfer==0)?0:((float)hptr->ixfer/t_ixfer)*100.0,hptr->oxfer/1024,
+-              (t_oxfer==0)?0:((float)hptr->oxfer/t_oxfer)*100.0,hptr->visit,
+-              (t_visit==0)?0:((float)hptr->visit/t_visit)*100.0);
++              (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,
++               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
++               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
++               hptr->ixfer/1024,(t_ixfer==0)?0:((float)hptr->ixfer/t_ixfer)*100.0,
++               hptr->oxfer/1024,(t_oxfer==0)?0:((float)hptr->oxfer/t_oxfer)*100.0);
++       }
++         fprintf(out_fp,
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
++              "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
++            hptr->visit,(t_visit==0)?0:((float)hptr->visit/t_visit)*100.0);
+          if ((hptr->flag==OBJ_GRP)&&hlite_groups)
+              fprintf(out_fp,"<STRONG>%s</STRONG></FONT></TD></TR>\n",
+@@ -997,7 +1051,7 @@
+          if (all_sites_page(h_reg, h_grp))
+          {
+             fprintf(out_fp,"<TR BGCOLOR=\"%s\">",GRPCOLOR);
+-            fprintf(out_fp,"<TD COLSPAN=14 ALIGN=\"center\">\n");
++            fprintf(out_fp,"<TD COLSPAN=%d ALIGN=\"center\">\n",(dump_inout==0)?10:14);
+             fprintf(out_fp,"<FONT SIZE=\"-1\">");
+             fprintf(out_fp,"<A HREF=\"./site_%04d%02d.%s\">",
+                     cur_year,cur_month,html_ext);
+@@ -1034,13 +1088,19 @@
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+-   fprintf(out_fp," %12s      %12s      %12s      %12s      %12s"          \
+-                  "      %12s      %s\n",
+-           msg_h_hits, msg_h_files, msg_h_xfer, msg_h_ixfer, msg_h_oxfer,
+-           msg_h_visits, msg_h_hname);
+-   fprintf(out_fp,"----------------  ----------------  ----------------  " \
+-                  "----------------  ----------------  "                   \
+-                  "----------------  --------------------\n\n");
++   fprintf(out_fp," %12s      %12s      %12s",
++           msg_h_hits, msg_h_files, msg_h_xfer);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"      %12s      %12s", msg_h_ixfer, msg_h_oxfer);
++   }
++   fprintf(out_fp,"      %12s      %s\n", msg_h_visits, msg_h_hname);
++   fprintf(out_fp,"----------------  ----------------  ----------------  ");
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"----------------  ----------------  ");
++   }
++   fprintf(out_fp,"----------------  --------------------\n\n");
+    /* Do groups first (if any) */
+    pointer=h_array;
+@@ -1050,15 +1110,21 @@
+       if (hptr->flag == OBJ_GRP)
+       {
+          fprintf(out_fp,
+-            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  "            \
+-            "%8.0f %6.02f%%  %8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
++            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  ",
+             hptr->count,
+             (t_hit==0)?0:((float)hptr->count/t_hit)*100.0,hptr->files,
+             (t_file==0)?0:((float)hptr->files/t_file)*100.0,hptr->xfer/1024,
+-            (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0,hptr->ixfer/1024,
+-            (t_ixfer==0)?0:((float)hptr->ixfer/t_ixfer)*100.0,hptr->oxfer/1024,
+-            (t_oxfer==0)?0:((float)hptr->oxfer/t_oxfer)*100.0,hptr->visit,
+-            (t_visit==0)?0:((float)hptr->visit/t_visit)*100.0,
++            (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,
++             "%8.0f %6.02f%%  %8.0f %6.02f%%  ",
++             hptr->ixfer/1024,(t_ixfer==0)?0:((float)hptr->ixfer/t_ixfer)*100.0,
++             hptr->oxfer/1024,(t_oxfer==0)?0:((float)hptr->oxfer/t_oxfer)*100.0);
++       }
++         fprintf(out_fp,
++            "%8llu %6.02f%%  %s\n",
++          hptr->visit,(t_visit==0)?0:((float)hptr->visit/t_visit)*100.0,
+             hptr->string);
+          h_grp--;
+       }
+@@ -1074,15 +1140,21 @@
+       if (hptr->flag == OBJ_REG)
+       {
+          fprintf(out_fp,
+-            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  "            \
+-            "%8.0f %6.02f%%  %8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
++            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  ",
+             hptr->count,
+             (t_hit==0)?0:((float)hptr->count/t_hit)*100.0,hptr->files,
+             (t_file==0)?0:((float)hptr->files/t_file)*100.0,hptr->xfer/1024,
+-            (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0,hptr->ixfer/1024,
+-            (t_ixfer==0)?0:((float)hptr->ixfer/t_ixfer)*100.0,hptr->oxfer/1024,
+-            (t_oxfer==0)?0:((float)hptr->oxfer/t_oxfer)*100.0,hptr->visit,
+-            (t_visit==0)?0:((float)hptr->visit/t_visit)*100.0,
++            (t_xfer==0)?0:((float)hptr->xfer/t_xfer)*100.0);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,
++             "%8.0f %6.02f%%  %8.0f %6.02f%%  ",
++             hptr->ixfer/1024,(t_ixfer==0)?0:((float)hptr->ixfer/t_ixfer)*100.0,
++             hptr->oxfer/1024,(t_oxfer==0)?0:((float)hptr->oxfer/t_oxfer)*100.0);
++       }
++         fprintf(out_fp,
++            "%8llu %6.02f%%  %s\n",
++          hptr->visit,(t_visit==0)?0:((float)hptr->visit/t_visit)*100.0,
+             hptr->string);
+          h_reg--;
+       }
+@@ -1125,13 +1197,13 @@
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   if (flag) fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=10>"  \
++   if (flag) fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=%d>"  \
+            "%s %llu %s %llu %s %s %s</TH></TR>\n",
+-           GREY,msg_top_top,tot_num,msg_top_of,
++           GREY,(dump_inout==0)?6:10,msg_top_top,tot_num,msg_top_of,
+            t_url,msg_top_u,msg_h_by,msg_h_xfer);
+-   else fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=10>"   \
++   else fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=%d>"   \
+            "%s %llu %s %llu %s</TH></TR>\n",
+-           GREY,msg_top_top,tot_num,msg_top_of,t_url,msg_top_u);
++           GREY,(dump_inout==0)?6:10,msg_top_top,tot_num,msg_top_of,t_url,msg_top_u);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=center>"                  \
+                   "<FONT SIZE=\"-1\">#</FONT></TH>\n",GREY);
+@@ -1141,12 +1213,15 @@
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+                   KBYTECOLOR,msg_h_xfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
+-                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+-                  LTBLUE,msg_h_ixfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"            \
+-                  "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+-                  GREEN,msg_h_oxfer);
++   if (dump_inout!=0)
++   {
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"         \
++                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
++                   LTBLUE,msg_h_ixfer);
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"         \
++                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
++                   GREEN,msg_h_oxfer);
++   }
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                      \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+                   MISCCOLOR,msg_h_url);
+@@ -1168,20 +1243,28 @@
+             "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+             "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+             "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
+-            "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+-            "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
+-            "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+-            "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
+-            "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+-            "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
++            "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+             i+1,uptr->count,
+             (t_hit==0)?0:((float)uptr->count/t_hit)*100.0,
+             uptr->xfer/1024,
+-            (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0,
+-            uptr->ixfer/1024,
+-            (t_ixfer==0)?0:((float)uptr->ixfer/t_ixfer)*100.0,
+-            uptr->oxfer/1024,
+-            (t_oxfer==0)?0:((float)uptr->oxfer/t_oxfer)*100.0);
++            (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0);
++       if (dump_inout==0)
++       {
++          fprintf(out_fp, "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">");
++       }
++       else
++       {
++          fprintf(out_fp,
++             "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
++             "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
++             "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
++             "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
++             "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
++             uptr->ixfer/1024,
++             (t_ixfer==0)?0:((float)uptr->ixfer/t_ixfer)*100.0,
++             uptr->oxfer/1024,
++             (t_oxfer==0)?0:((float)uptr->oxfer/t_oxfer)*100.0);
++       }
+          if (uptr->flag==OBJ_GRP)
+          {
+@@ -1227,7 +1310,7 @@
+          if (all_urls_page(u_reg, u_grp))
+          {
+             fprintf(out_fp,"<TR BGCOLOR=\"%s\">",GRPCOLOR);
+-            fprintf(out_fp,"<TD COLSPAN=10 ALIGN=\"center\">\n");
++            fprintf(out_fp,"<TD COLSPAN=%d ALIGN=\"center\">\n",(dump_inout==0)?6:10);
+             fprintf(out_fp,"<FONT SIZE=\"-1\">");
+             fprintf(out_fp,"<A HREF=\"./url_%04d%02d.%s\">",
+                     cur_year,cur_month,html_ext);
+@@ -1264,10 +1347,18 @@
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+-   fprintf(out_fp," %12s      %12s      %12s      %12s      %s\n",
+-           msg_h_hits,msg_h_xfer,msg_h_ixfer,msg_h_oxfer,msg_h_url);
+-   fprintf(out_fp,"----------------  ----------------  ----------------  " \
+-                  "----------------  --------------------\n\n");
++   fprintf(out_fp," %12s      %12s", msg_h_hits,msg_h_xfer);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"      %12s      %12s", msg_h_ixfer, msg_h_oxfer);
++   }
++   fprintf(out_fp,"      %s\n", msg_h_url);
++   fprintf(out_fp,"----------------  ----------------  ");
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"----------------  ----------------  ");
++   }
++   fprintf(out_fp,"--------------------\n\n");
+    /* do groups first (if any) */
+    pointer=u_array;
+@@ -1276,16 +1367,20 @@
+       uptr=*pointer++;
+       if (uptr->flag == OBJ_GRP)
+       {
+-         fprintf(out_fp,"%-8llu %6.02f%%  %8.0f %6.02f%%  %8.0f %6.02f%%  "  \
+-                        "%8.0f %6.02f%%  %s\n",
++         fprintf(out_fp,"%-8llu %6.02f%%  %8.0f %6.02f%%",
+             uptr->count,
+             (t_hit==0)?0:((float)uptr->count/t_hit)*100.0,
+             uptr->xfer/1024,
+-            (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0,
+-            uptr->ixfer/1024,
+-            (t_ixfer==0)?0:((float)uptr->ixfer/t_ixfer)*100.0,
+-            uptr->oxfer/1024,
+-            (t_oxfer==0)?0:((float)uptr->oxfer/t_oxfer)*100.0,
++            (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,"  %8.0f %6.02f%%  %8.0f %6.02f%%",
++             uptr->ixfer/1024,
++             (t_ixfer==0)?0:((float)uptr->ixfer/t_ixfer)*100.0,
++             uptr->oxfer/1024,
++             (t_oxfer==0)?0:((float)uptr->oxfer/t_oxfer)*100.0);
++       }
++       fprintf(out_fp,"  %s\n",
+             uptr->string);
+          u_grp--;
+       }
+@@ -1300,16 +1395,20 @@
+       uptr=*pointer++;
+       if (uptr->flag == OBJ_REG)
+       {
+-         fprintf(out_fp,"%-8llu %6.02f%%  %8.0f %6.02f%%  %8.0f %6.02f%%  "  \
+-                        "%8.0f %6.02f%%  %s\n",
++         fprintf(out_fp,"%-8llu %6.02f%%  %8.0f %6.02f%%",
+             uptr->count,
+             (t_hit==0)?0:((float)uptr->count/t_hit)*100.0,
+             uptr->xfer/1024,
+-            (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0,
+-            uptr->ixfer/1024,
+-            (t_ixfer==0)?0:((float)uptr->ixfer/t_ixfer)*100.0,
+-            uptr->oxfer/1024,
+-            (t_oxfer==0)?0:((float)uptr->oxfer/t_oxfer)*100.0,
++            (t_xfer==0)?0:((float)uptr->xfer/t_xfer)*100.0);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,"  %8.0f %6.02f%%  %8.0f %6.02f%%",
++             uptr->ixfer/1024,
++             (t_ixfer==0)?0:((float)uptr->ixfer/t_ixfer)*100.0,
++             uptr->oxfer/1024,
++             (t_oxfer==0)?0:((float)uptr->oxfer/t_oxfer)*100.0);
++       }
++       fprintf(out_fp,"  %s\n",
+             uptr->string);
+          u_reg--;
+       }
+@@ -1887,9 +1986,9 @@
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=14>" \
++   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=%d>" \
+            "%s %llu %s %llu %s</TH></TR>\n",
+-           GREY,msg_top_top, tot_num, msg_top_of, t_user, msg_top_i);
++           GREY,(dump_inout==0)?10:14,msg_top_top, tot_num, msg_top_of, t_user, msg_top_i);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=center>"                   \
+           "<FONT SIZE=\"-1\">#</FONT></TH>\n",GREY);
+@@ -1899,10 +1998,13 @@
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",FILECOLOR,msg_h_files);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",KBYTECOLOR,msg_h_xfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+-          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+-          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   }
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                       \
+@@ -1927,20 +2029,26 @@
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+-              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+-              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+-              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
+-              "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+               i+1,iptr->count,
+               (t_hit==0)?0:((float)iptr->count/t_hit)*100.0,iptr->files,
+               (t_file==0)?0:((float)iptr->files/t_file)*100.0,iptr->xfer/1024,
+-              (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0,iptr->ixfer/1024,
+-              (t_ixfer==0)?0:((float)iptr->ixfer/t_ixfer)*100.0,iptr->oxfer/1024,
+-              (t_oxfer==0)?0:((float)iptr->oxfer/t_oxfer)*100.0,iptr->visit,
++              (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,
++               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
++               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
++               iptr->ixfer/1024,(t_ixfer==0)?0:((float)iptr->ixfer/t_ixfer)*100.0,
++               iptr->oxfer/1024,(t_oxfer==0)?0:((float)iptr->oxfer/t_oxfer)*100.0);
++       }
++         fprintf(out_fp,
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"    \
++              "<TD ALIGN=left NOWRAP><FONT SIZE=\"-1\">",
++            iptr->visit,
+               (t_visit==0)?0:((float)iptr->visit/t_visit)*100.0);
+          if ((iptr->flag==OBJ_GRP)&&hlite_groups)
+@@ -1959,7 +2067,7 @@
+       if (all_users_page(i_reg, i_grp))
+       {
+          fprintf(out_fp,"<TR BGCOLOR=\"%s\">",GRPCOLOR);
+-         fprintf(out_fp,"<TD COLSPAN=14 ALIGN=\"center\">\n");
++         fprintf(out_fp,"<TD COLSPAN=%d ALIGN=\"center\">\n",(dump_inout==0)?10:14);
+          fprintf(out_fp,"<FONT SIZE=\"-1\">");
+          fprintf(out_fp,"<A HREF=\"./user_%04d%02d.%s\">",
+             cur_year,cur_month,html_ext);
+@@ -1993,13 +2101,19 @@
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+-   fprintf(out_fp," %12s      %12s      %12s      %12s      %12s      %12s"\
+-                  "      %s\n",
+-           msg_h_hits, msg_h_files, msg_h_xfer, msg_h_ixfer, msg_h_oxfer,
+-           msg_h_visits, msg_h_uname);
+-   fprintf(out_fp,"----------------  ----------------  ----------------  " \
+-                  "----------------  ----------------  "                   \
+-                  "----------------  --------------------\n\n");
++   fprintf(out_fp," %12s      %12s      %12s",
++           msg_h_hits, msg_h_files, msg_h_xfer);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"      %12s      %12s", msg_h_ixfer, msg_h_oxfer);
++   }
++   fprintf(out_fp,"      %12s      %s\n", msg_h_visits, msg_h_uname);
++   fprintf(out_fp,"----------------  ----------------  ----------------  ");
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"----------------  ----------------  ");
++   }
++   fprintf(out_fp,"----------------  --------------------\n\n");
+    /* Do groups first (if any) */
+    pointer=i_array;
+@@ -2009,15 +2123,21 @@
+       if (iptr->flag == OBJ_GRP)
+       {
+          fprintf(out_fp,
+-            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  %8.0f %6.02f%%  "\
+-            "%8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
++            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  ",
+             iptr->count,
+             (t_hit==0)?0:((float)iptr->count/t_hit)*100.0,iptr->files,
+             (t_file==0)?0:((float)iptr->files/t_file)*100.0,iptr->xfer/1024,
+-            (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0,iptr->ixfer/1024,
+-            (t_ixfer==0)?0:((float)iptr->ixfer/t_ixfer)*100.0,iptr->oxfer/1024,
+-            (t_oxfer==0)?0:((float)iptr->oxfer/t_oxfer)*100.0,iptr->visit,
+-            (t_visit==0)?0:((float)iptr->visit/t_visit)*100.0,
++            (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,
++             "%8.0f %6.02f%%  %8.0f %6.02f%%  ",
++             iptr->ixfer/1024,(t_ixfer==0)?0:((float)iptr->ixfer/t_ixfer)*100.0,
++             iptr->oxfer/1024,(t_oxfer==0)?0:((float)iptr->oxfer/t_oxfer)*100.0);
++       }
++         fprintf(out_fp,
++            "%8llu %6.02f%%  %s\n",
++          iptr->visit,(t_visit==0)?0:((float)iptr->visit/t_visit)*100.0,
+             iptr->string);
+          i_grp--;
+       }
+@@ -2033,15 +2153,21 @@
+       if (iptr->flag == OBJ_REG)
+       {
+          fprintf(out_fp,
+-            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  %8.0f %6.02f%%  "\
+-            "%8.0f %6.02f%%  %8llu %6.02f%%  %s\n",
++            "%-8llu %6.02f%%  %8llu %6.02f%%  %8.0f %6.02f%%  ",
+             iptr->count,
+             (t_hit==0)?0:((float)iptr->count/t_hit)*100.0,iptr->files,
+             (t_file==0)?0:((float)iptr->files/t_file)*100.0,iptr->xfer/1024,
+-            (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0,iptr->ixfer/1024,
+-            (t_ixfer==0)?0:((float)iptr->ixfer/t_ixfer)*100.0,iptr->oxfer/1024,
+-            (t_oxfer==0)?0:((float)iptr->oxfer/t_oxfer)*100.0,iptr->visit,
+-            (t_visit==0)?0:((float)iptr->visit/t_visit)*100.0,
++            (t_xfer==0)?0:((float)iptr->xfer/t_xfer)*100.0);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,
++             "%8.0f %6.02f%%  %8.0f %6.02f%%  ",
++             iptr->ixfer/1024,(t_ixfer==0)?0:((float)iptr->ixfer/t_ixfer)*100.0,
++             iptr->oxfer/1024,(t_oxfer==0)?0:((float)iptr->oxfer/t_oxfer)*100.0);
++       }
++         fprintf(out_fp,
++            "%8llu %6.02f%%  %s\n",
++          iptr->visit,(t_visit==0)?0:((float)iptr->visit/t_visit)*100.0,
+             iptr->string);
+          i_reg--;
+       }
+@@ -2211,9 +2337,9 @@
+    for (i=0;i<ntop_ctrys;i++) if (top_ctrys[i]->count!=0) tot_num++;
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=12>"         \
++   fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=CENTER COLSPAN=%d>"         \
+            "%s %d %s %d %s</TH></TR>\n",
+-           GREY,msg_top_top,tot_num,msg_top_of,tot_ctry,msg_top_c);
++           GREY,(dump_inout==0)?8:12,msg_top_top,tot_num,msg_top_of,tot_ctry,msg_top_c);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" ALIGN=center>"                   \
+           "<FONT SIZE=\"-1\">#</FONT></TH>\n",GREY);
+@@ -2223,10 +2349,13 @@
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",FILECOLOR,msg_h_files);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",KBYTECOLOR,msg_h_xfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+-          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+-          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"          \
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"          \
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   }
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                       \
+           "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",MISCCOLOR,msg_h_ctry);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -2246,31 +2375,39 @@
+       }
+       if (top_ctrys[i]->count!=0)
+-      fprintf(out_fp,"<TR>"                                                \
++      {
++       fprintf(out_fp,"<TR>"                                                \
+               "<TD ALIGN=center><FONT SIZE=\"-1\"><B>%d</B></FONT></TD>\n" \
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%llu</B></FONT></TD>\n"\
+               "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+               "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n"\
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+-              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+-              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
+-              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
+-              "<TD ALIGN=left NOWRAP>%s<FONT SIZE=\"-1\">%s</FONT>"        \
+-              "</TD></TR>\n",
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+               i+1,top_ctrys[i]->count,
+               (t_hit==0)?0:((float)top_ctrys[i]->count/t_hit)*100.0,
+               top_ctrys[i]->files,
+               (t_file==0)?0:((float)top_ctrys[i]->files/t_file)*100.0,
+               top_ctrys[i]->xfer/1024,
+-              (t_xfer==0)?0:((float)top_ctrys[i]->xfer/t_xfer)*100.0,
++              (t_xfer==0)?0:((float)top_ctrys[i]->xfer/t_xfer)*100.0);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n"   \
++              "<TD ALIGN=right><FONT SIZE=\"-1\"><B>%.0f</B></FONT></TD>\n" \
++              "<TD ALIGN=right><FONT SIZE=\"-2\">%3.02f%%</FONT></TD>\n",
+               top_ctrys[i]->ixfer/1024,
+               (t_ixfer==0)?0:((float)top_ctrys[i]->ixfer/t_ixfer)*100.0,
+               top_ctrys[i]->oxfer/1024,
+-              (t_oxfer==0)?0:((float)top_ctrys[i]->oxfer/t_oxfer)*100.0,
++              (t_oxfer==0)?0:((float)top_ctrys[i]->oxfer/t_oxfer)*100.0);
++         }
++      
++       fprintf(out_fp,
++              "<TD ALIGN=left NOWRAP>%s<FONT SIZE=\"-1\">%s</FONT>"        \
++              "</TD></TR>\n",
+               flag_buf,top_ctrys[i]->desc);
++      }
+    }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"</TABLE>\n<P>\n");
+@@ -2297,9 +2434,12 @@
+    /* need a header? */
+    if (dump_header)
+    {
+-      fprintf(out_fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
+-       msg_h_hits,msg_h_files,msg_h_xfer,msg_h_ixfer,msg_h_oxfer,msg_h_visits,
+-       msg_h_hname); 
++      fprintf(out_fp,"%s\t%s\t%s", msg_h_hits,msg_h_files,msg_h_xfer);
++      if (dump_inout != 0)
++      {
++       fprintf(out_fp,"\t%s\t%s", msg_h_ixfer,msg_h_oxfer);
++      }
++      fprintf(out_fp,"\t%s\t%s\n", msg_h_visits,msg_h_hname); 
+    }
+    /* dump 'em */
+@@ -2309,10 +2449,14 @@
+       hptr=*pointer++;
+       if (hptr->flag != OBJ_GRP)
+       {
+-         fprintf(out_fp,
+-         "%llu\t%llu\t%.0f\t%.0f\t%.0f\t%llu\t%s\n",
+-            hptr->count,hptr->files,hptr->xfer/1024,
+-          hptr->ixfer/1024,hptr->oxfer/1024,
++         fprintf(out_fp,"%llu\t%llu\t%.0f",
++            hptr->count,hptr->files,hptr->xfer/1024);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp, "\t%.0f\t%.0f",
++             hptr->ixfer/1024,hptr->oxfer/1024);
++       }
++         fprintf(out_fp, "\t%llu\t%s\n",
+             hptr->visit,hptr->string);
+       }
+       cnt--;
+@@ -2342,8 +2486,12 @@
+    /* need a header? */
+    if (dump_header)
+    {
+-      fprintf(out_fp,"%s\t%s\t%s\t%s\t%s\n",msg_h_hits,msg_h_xfer,msg_h_ixfer,
+-                      msg_h_oxfer,msg_h_url);
++      fprintf(out_fp,"%s\t%s",msg_h_hits,msg_h_xfer);
++      if (dump_inout != 0)
++      {
++       fprintf(out_fp,"\t%s\t%s",msg_h_ixfer,msg_h_oxfer);
++      }
++      fprintf(out_fp,"\t%s\n",msg_h_url);
+    }
+    /* dump 'em */
+@@ -2353,9 +2501,12 @@
+       uptr=*pointer++;
+       if (uptr->flag != OBJ_GRP)
+       {
+-         fprintf(out_fp,"%llu\t%.0f\t%.0f\t%.0f\t%s\n",
+-            uptr->count,uptr->xfer/1024,uptr->ixfer/1024,uptr->oxfer/1024,
+-          uptr->string);
++         fprintf(out_fp,"%llu\t%.0f",uptr->count,uptr->xfer/1024);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,"\t%.0f\t%.0f",uptr->ixfer/1024,uptr->oxfer/1024);
++       }
++       fprintf(out_fp,"\t%s\n",uptr->string);
+       }
+       cnt--;
+    }
+@@ -2462,9 +2613,12 @@
+    /* need a header? */
+    if (dump_header)
+    {
+-      fprintf(out_fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
+-         msg_h_hits,msg_h_files,msg_h_xfer,msg_h_ixfer,msg_h_oxfer,msg_h_visits,
+-         msg_h_uname);
++      fprintf(out_fp,"%s\t%s\t%s",msg_h_hits,msg_h_files,msg_h_xfer);
++      if (dump_inout != 0)
++      {
++       fprintf(out_fp,"\t%s\t%s",msg_h_ixfer,msg_h_oxfer);
++      }
++      fprintf(out_fp,"\t%s\t%s\n",msg_h_visits,msg_h_uname);
+    }
+    /* dump 'em */
+@@ -2474,11 +2628,13 @@
+       iptr=*pointer++;
+       if (iptr->flag != OBJ_GRP)
+       {
+-         fprintf(out_fp,
+-         "%llu\t%llu\t%.0f\t%.0f\t%.0f\t%llu\t%s\n",
+-            iptr->count,iptr->files,iptr->xfer/1024,
+-          iptr->ixfer/1024,iptr->oxfer/1024,
+-            iptr->visit,iptr->string);
++         fprintf(out_fp,"%llu\t%llu\t%.0f",
++          iptr->count,iptr->files,iptr->xfer/1024);
++       if (dump_inout != 0)
++       {
++          fprintf(out_fp,"\t%.0f\t%.0f",iptr->ixfer/1024,iptr->oxfer/1024);
++       }
++         fprintf(out_fp,"\t%llu\t%s\n",iptr->visit,iptr->string);
+       }
+       cnt--;
+    }
+@@ -2602,15 +2758,15 @@
+    /* month table */
+    fprintf(out_fp,"<TABLE WIDTH=600 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+-   fprintf(out_fp,"<TR><TH COLSPAN=13 BGCOLOR=\"%s\" ALIGN=center>",GREY);
++   fprintf(out_fp,"<TR><TH COLSPAN=%d BGCOLOR=\"%s\" ALIGN=center>",(dump_inout==0)?11:13,GREY);
+    fprintf(out_fp,"%s</TH></TR>\n",msg_main_sum);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH ALIGN=left ROWSPAN=2 BGCOLOR=\"%s\">"          \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREY,msg_h_mth);
+    fprintf(out_fp,"<TH ALIGN=center COLSPAN=4 BGCOLOR=\"%s\">"            \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREY,msg_main_da);
+-   fprintf(out_fp,"<TH ALIGN=center COLSPAN=8 BGCOLOR=\"%s\">"            \
+-          "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",GREY,msg_main_mt);
++   fprintf(out_fp,"<TH ALIGN=center COLSPAN=%d BGCOLOR=\"%s\">"            \
++          "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",(dump_inout==0)?6:8,GREY,msg_main_mt);
+    fprintf(out_fp,"<TR><TH ALIGN=center BGCOLOR=\"%s\">"                  \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",HITCOLOR,msg_h_hits);
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+@@ -2623,10 +2779,13 @@
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",SITECOLOR,msg_h_sites);
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",KBYTECOLOR,msg_h_xfer);
+-   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+-          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
+-   fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+-          "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                   \
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++      fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                   \
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++   }
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+@@ -2657,10 +2816,13 @@
+                 GRPCOLOR,s_year);
+             fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                   "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_xfer);
++            if (dump_inout != 0)
++            {
+                fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                      "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_ixfer);
+                fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                      "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_oxfer);
++            }
+             fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                   "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_visits);
+             fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+@@ -2675,8 +2837,9 @@
+          /* Year Header */
+          s_year=hist[i].year;
+          if (index_mths>16 && year_hdrs)
+-            fprintf(out_fp,"<TR><TH COLSPAN=13 BGCOLOR=\"%s\" "           \
+-               "ALIGN=center>%04d</TH></TR>\n", GREY, s_year);
++            fprintf(out_fp,"<TR><TH COLSPAN=%d BGCOLOR=\"%s\" "           \
++               "ALIGN=center>%04d</TH></TR>\n",
++               (dump_inout==0)?11:13, GREY, s_year);
+       }
+       fprintf(out_fp,"<TR><TD NOWRAP>");
+@@ -2701,10 +2864,13 @@
+                       hist[i].site);
+       fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%.0f</FONT></TD>\n",
+                       hist[i].xfer);
+-      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%.0f</FONT></TD>\n",
+-                      hist[i].ixfer);
+-      fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%.0f</FONT></TD>\n",
+-                      hist[i].oxfer);
++      if (dump_inout != 0)
++      {
++       fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%.0f</FONT></TD>\n",
++                       hist[i].ixfer);
++       fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%.0f</FONT></TD>\n",
++                       hist[i].oxfer);
++      }
+       fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                       hist[i].visit);
+       fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+@@ -2737,10 +2903,13 @@
+                      GRPCOLOR,s_year);
+       fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                      "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_xfer);
++      if (dump_inout != 0)
++      {
+          fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                         "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_ixfer);
+          fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                         "<FONT SIZE=\"-1\">%.0f</TH>", GRPCOLOR, m_oxfer);
++      }
+       fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+                      "<FONT SIZE=\"-1\">%0llu</TH>", GRPCOLOR, m_visits);
+       fprintf(out_fp,"<TH ALIGN=\"right\" BGCOLOR=\"%s\">"       \
+@@ -2755,10 +2924,13 @@
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREY,msg_h_totals);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+           "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_xfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+-          "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_ixfer);
+-   fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+-          "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_oxfer);
++   if (dump_inout != 0)
++   {
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                    \
++           "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_ixfer);
++      fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                    \
++           "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_oxfer);
++   }
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+           "<FONT SIZE=\"-1\">%.0f</FONT></TH>\n",GREY,gt_visits);
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=right>"                       \
+Index: webalizer/sample.conf
+===================================================================
+--- webalizer.orig/sample.conf 2011-01-08 20:36:44.000000000 +0100
++++ webalizer/sample.conf      2011-01-08 20:59:32.000000000 +0100
+@@ -444,6 +444,17 @@
+ #GraphMonths  12
++# Enable Input Output data as reported by apache_logio module.
++# Note for this to work you need the following in your apache configuration
++# LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
++# CustomLog /var/log/apache2/access.log combinedio
++# webalizer can try to be smart and detect whether your log contains logio
++# information or not, to enable this use the 'auto' value.
++# Values can be 'yes','no' or 'auto', the later being the default.
++# 
++
++#InOutkB        auto
++
+ # The "Top" options below define the number of entries for each table.
+ # Defaults are Sites=30, URLs=30, Referrers=30 and Agents=15, and
+ # Countries=30. TopKSites and TopKURLs (by KByte tables) both default
+Index: webalizer/webalizer.c
+===================================================================
+--- webalizer.orig/webalizer.c 2011-01-08 20:59:30.000000000 +0100
++++ webalizer/webalizer.c      2011-01-08 20:59:32.000000000 +0100
+@@ -202,6 +202,7 @@
+ int     dump_search  = 0;                     /* Search strings           */
+ int     dump_header  = 0;                     /* Dump header as first rec */
+ char    *dump_path   = NULL;                  /* Path for dump files      */
++int     dump_inout   = 2;                     /* In Out kB (logio) 2=auto */
+ int        cur_year=0, cur_month=0,           /* year/month/day/hour      */
+            cur_day=0, cur_hour=0,             /* tracking variables       */
+@@ -1450,6 +1451,21 @@
+       t_visit=tot_visit(sm_htab);
+       if (ht_hit > mh_hit) mh_hit = ht_hit;
++      if(dump_inout == 2)                    /* auto display InOutKb?    */
++      {
++         /* check with monthly totals */
++         /* if some In Out totals are not 0, enable displaying them */
++         /* else hide them*/
++         if((t_ixfer != 0) && (t_oxfer != 0))
++         {
++            dump_inout = 1;
++         }
++       else
++         {
++            dump_inout = 0;
++         }
++      }
++
+       if (total_rec > (total_ignore+total_bad)) /* did we process any?   */
+       {
+          if (incremental)
+@@ -1647,7 +1663,8 @@
+                      "YearTotals",        /* show year subtotals (0=no) 117 */
+                      "CountryFlags",      /* show country flags? (0-no) 118 */
+                      "FlagDir",           /* directory w/flag images    119 */
+-                     "SearchCaseI"        /* srch str case insensitive  120 */
++                     "SearchCaseI",       /* srch str case insensitive  120 */
++                   "InOutkB"            /* logio (0=no,1=yes,2=auto)  121 */
+                    };
+    FILE *fp;
+@@ -1882,6 +1899,9 @@
+         case 119: use_flags=1; flag_dir=save_opt(value); break; /* FlagDir  */
+         case 120: searchcasei=
+                     (tolower(value[0])=='n')?0:1;  break; /* SearchCaseI    */
++      case 121: dump_inout=
++                  (tolower(value[0])=='n')?0:
++                    (tolower(value[0])=='y')?1:2;  break; /* InOutkB        */
+       }
+    }
+    fclose(fp);
+Index: webalizer/webalizer.h
+===================================================================
+--- webalizer.orig/webalizer.h 2011-01-08 20:59:30.000000000 +0100
++++ webalizer/webalizer.h      2011-01-08 20:59:32.000000000 +0100
+@@ -246,6 +246,7 @@
+ extern int     dump_search  ;                 /* Search strings           */
+ extern int     dump_header  ;                 /* Dump header as first rec */
+ extern char    *dump_path   ;                 /* Path for dump files      */
++extern int     dump_inout   ;                 /* In Out kB (logio) 2=auto */
+ extern u_int64_t cur_tstamp;                  /* Current timestamp        */
+ extern u_int64_t epoch;                       /* used for timestamp adj.  */
diff --git a/debian/patches/07_apache_logio_color_config.diff b/debian/patches/07_apache_logio_color_config.diff
new file mode 100644 (file)
index 0000000..961a372
--- /dev/null
@@ -0,0 +1,219 @@
+From: Julien Viard de Galbert <julien@vdg.blogsite.org>
+Date: Wed, 24 Nov 2010 18:22:53 +0100
+Subject: [PATCH] Allow configuring colors for logio datas
+
+This patch adds options to configure the colors of In and Out KBytes data
+from the apache_logio patch. It must be applied on top of apache_logio and
+apache_logio_optional patches.
+---
+ graphs.c    |    9 +++++++--
+ output.c    |   34 ++++++++++++++++++----------------
+ sample.conf |    2 ++
+ webalizer.c |    8 +++++++-
+ webalizer.h |    2 ++
+ 5 files changed, 36 insertions(+), 19 deletions(-)
+
+Index: webalizer/graphs.c
+===================================================================
+--- webalizer.orig/graphs.c    2011-01-08 20:59:32.000000000 +0100
++++ webalizer/graphs.c 2011-01-08 20:59:42.000000000 +0100
+@@ -51,8 +51,8 @@
+ #define FILECOLOR  file_or_blue            /* files               */
+ #define SITECOLOR  site_or_orange          /* sites               */
+ #define KBYTECOLOR kbyte_or_red            /* KBytes              */
+-#define IKBYTECOLOR file_or_blue           /* In KBytes           */
+-#define OKBYTECOLOR hit_or_green           /* Out KBytes          */
++#define IKBYTECOLOR ikbyte_or_blue         /* In KBytes           */
++#define OKBYTECOLOR okbyte_or_green        /* Out KBytes          */
+ #define PAGECOLOR  page_or_cyan            /* Files               */
+ #define VISITCOLOR visit_or_yellow         /* Visits              */
+@@ -95,6 +95,7 @@
+                   int mx; int my; };       /* midpoint x,y        */
+ /* colors */
+ int             black, white, grey, dkgrey, kbyte_or_red,
++                ikbyte_or_blue, okbyte_or_green,
+                 file_or_blue, site_or_orange, hit_or_green,
+                 page_or_cyan, visit_or_yellow, blue;
+@@ -992,6 +993,10 @@
+    file_or_blue = gdImageColorAllocate(im, r, g, b);
+    r=getred(kbyte_color); g=getgreen(kbyte_color); b=getblue(kbyte_color);
+    kbyte_or_red = gdImageColorAllocate(im, r, g, b);
++   r=getred(ikbyte_color); g=getgreen(ikbyte_color); b=getblue(ikbyte_color);
++   ikbyte_or_blue = gdImageColorAllocate(im, r, g, b);
++   r=getred(okbyte_color); g=getgreen(okbyte_color); b=getblue(okbyte_color);
++   okbyte_or_green = gdImageColorAllocate(im, r, g, b);
+    r=getred(page_color); g=getgreen(page_color); b=getblue(page_color);
+    page_or_cyan = gdImageColorAllocate(im, r, g, b);
+    r=getred(visit_color); g=getgreen(visit_color); b=getblue(visit_color);
+Index: webalizer/output.c
+===================================================================
+--- webalizer.orig/output.c    2011-01-08 20:59:32.000000000 +0100
++++ webalizer/output.c 2011-01-08 20:59:42.000000000 +0100
+@@ -132,6 +132,8 @@
+ #define FILECOLOR      file_color
+ #define SITECOLOR      site_color
+ #define KBYTECOLOR     kbyte_color
++#define IKBYTECOLOR    ikbyte_color
++#define OKBYTECOLOR    okbyte_color
+ #define PAGECOLOR      page_color
+ #define VISITCOLOR     visit_color
+ #define MISCCOLOR      misc_color
+@@ -726,8 +728,8 @@
+                    "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                    \
+                    "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"            \
+                    "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+-                   LTBLUE,  msg_h_ixfer,
+-                   GREEN,   msg_h_oxfer);
++                   IKBYTECOLOR,  msg_h_ixfer,
++                   OKBYTECOLOR,   msg_h_oxfer);
+    }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -833,8 +835,8 @@
+                    "<FONT SIZE=\"-1\">%s</FONT></TH>\n"          \
+                    "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=3>"  \
+                    "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+-                   LTBLUE,  msg_h_ixfer,
+-                   GREEN,   msg_h_oxfer);
++                   IKBYTECOLOR,  msg_h_ixfer,
++                   OKBYTECOLOR,   msg_h_oxfer);
+    }
+    fprintf(out_fp,"<TR><TH ALIGN=center BGCOLOR=\"%s\">"           \
+                   "<FONT SIZE=\"-2\">%s</FONT></TH>\n"             \
+@@ -867,12 +869,12 @@
+                    "<FONT SIZE=\"-2\">%s</FONT></TH>\n"          \
+                    "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"  \
+                    "<FONT SIZE=\"-2\">%s</FONT></TH>\n",
+-                   LTBLUE, msg_h_avg, LTBLUE, msg_h_total);
++                   IKBYTECOLOR, msg_h_avg, IKBYTECOLOR, msg_h_total);
+       fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"            \
+                    "<FONT SIZE=\"-2\">%s</FONT></TH>\n"          \
+                    "<TH ALIGN=center BGCOLOR=\"%s\" COLSPAN=2>"  \
+                    "<FONT SIZE=\"-2\">%s</FONT></TH></TR>\n",
+-                   GREEN, msg_h_avg, GREEN, msg_h_total);
++                   OKBYTECOLOR, msg_h_avg, OKBYTECOLOR, msg_h_total);
+    }
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+@@ -984,9 +986,9 @@
+    if (dump_inout != 0)
+    {
+       fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"           \
+-           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",IKBYTECOLOR,msg_h_ixfer);
+       fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"           \
+-           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",OKBYTECOLOR,msg_h_oxfer);
+    }
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"              \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+@@ -1217,10 +1219,10 @@
+    {
+       fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"         \
+                    "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+-                   LTBLUE,msg_h_ixfer);
++                   IKBYTECOLOR,msg_h_ixfer);
+       fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"         \
+                    "<FONT SIZE=\"-1\">%s</FONT></TH>\n",
+-                   GREEN,msg_h_oxfer);
++                   OKBYTECOLOR,msg_h_oxfer);
+    }
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                      \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",
+@@ -2001,9 +2003,9 @@
+    if (dump_inout != 0)
+    {
+       fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+-           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",IKBYTECOLOR,msg_h_ixfer);
+       fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+-           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",OKBYTECOLOR,msg_h_oxfer);
+    }
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"             \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+@@ -2352,9 +2354,9 @@
+    if (dump_inout != 0)
+    {
+       fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"          \
+-           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",IKBYTECOLOR,msg_h_ixfer);
+       fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center COLSPAN=2>"          \
+-           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",OKBYTECOLOR,msg_h_oxfer);
+    }
+    fprintf(out_fp,"<TH BGCOLOR=\"%s\" ALIGN=center>"                       \
+           "<FONT SIZE=\"-1\">%s</FONT></TH></TR>\n",MISCCOLOR,msg_h_ctry);
+@@ -2782,9 +2784,9 @@
+    if (dump_inout != 0)
+    {
+       fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                   \
+-           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",LTBLUE,msg_h_ixfer);
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",IKBYTECOLOR,msg_h_ixfer);
+       fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                   \
+-           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",GREEN,msg_h_oxfer);
++           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",OKBYTECOLOR,msg_h_oxfer);
+    }
+    fprintf(out_fp,"<TH ALIGN=center BGCOLOR=\"%s\">"                      \
+           "<FONT SIZE=\"-1\">%s</FONT></TH>\n",VISITCOLOR,msg_h_visits);
+Index: webalizer/sample.conf
+===================================================================
+--- webalizer.orig/sample.conf 2011-01-08 20:59:32.000000000 +0100
++++ webalizer/sample.conf      2011-01-08 20:59:42.000000000 +0100
+@@ -778,6 +778,8 @@
+ #ColorFile    0040ff
+ #ColorSite    ff8000
+ #ColorKbyte   ff0000
++#ColorIKbyte    0080ff
++#ColorOKbyte    00e000
+ #ColorPage    00e0ff
+ #ColorVisit   ffff00
+ #ColorMisc      00e0ff
+Index: webalizer/webalizer.c
+===================================================================
+--- webalizer.orig/webalizer.c 2011-01-08 20:59:32.000000000 +0100
++++ webalizer/webalizer.c      2011-01-08 20:59:42.000000000 +0100
+@@ -267,6 +267,8 @@
+ char    file_color[]  = "#0040ff";            /* graph file color         */
+ char    site_color[]  = "#ff8000";            /* graph site color         */
+ char    kbyte_color[] = "#ff0000";            /* graph kbyte color        */
++char    ikbyte_color[]= "#0080ff";            /* graph ikbyte color       */
++char    okbyte_color[]= "#00e000";            /* graph okbyte color       */
+ char    page_color[]  = "#00e0ff";            /* graph page color         */
+ char    visit_color[] = "#ffff00";            /* graph visit color        */
+ char    misc_color[]  = "#00e0ff";            /* graph misc color         */
+@@ -1664,7 +1666,9 @@
+                      "CountryFlags",      /* show country flags? (0-no) 118 */
+                      "FlagDir",           /* directory w/flag images    119 */
+                      "SearchCaseI",       /* srch str case insensitive  120 */
+-                   "InOutkB"            /* logio (0=no,1=yes,2=auto)  121 */
++                   "InOutkB",           /* logio (0=no,1=yes,2=auto)  121 */
++                     "ColorIKbyte",       /* IKbyte Color (def=0080ff)  122 */
++                     "ColorOKbyte"        /* OKbyte Color (def=00e000)  123 */
+                    };
+    FILE *fp;
+@@ -1902,6 +1906,8 @@
+       case 121: dump_inout=
+                   (tolower(value[0])=='n')?0:
+                     (tolower(value[0])=='y')?1:2;  break; /* InOutkB        */
++        case 122: strncpy(ikbyte_color+1,value,6); break; /* ColorIKbyte    */
++        case 123: strncpy(okbyte_color+1,value,6); break; /* ColorOKbyte    */
+       }
+    }
+    fclose(fp);
+Index: webalizer/webalizer.h
+===================================================================
+--- webalizer.orig/webalizer.h 2011-01-08 20:59:32.000000000 +0100
++++ webalizer/webalizer.h      2011-01-08 20:59:42.000000000 +0100
+@@ -291,6 +291,8 @@
+ extern char    file_color[];                  /* graph file color         */
+ extern char    site_color[];                  /* graph site color         */
+ extern char    kbyte_color[];                 /* graph kbyte color        */
++extern char    ikbyte_color[];                /* graph ikbyte color       */
++extern char    okbyte_color[];                /* graph okbyte color       */
+ extern char    page_color[];                  /* graph page color         */
+ extern char    visit_color[];                 /* graph visit color        */
+ extern char    misc_color[];                  /* graph misc color         */
diff --git a/debian/patches/14_add_search_engines.diff b/debian/patches/14_add_search_engines.diff
new file mode 100644 (file)
index 0000000..6da87a4
--- /dev/null
@@ -0,0 +1,60 @@
+From: Julien Viard de Galbert <julien@vdg.blogsite.org>
+Subject: enable and add more SearchEngines in .conf file
+
+Based on patch
+14_add_search_engines.dpatch by Jose Carlos Medeiros <debian@psabs.com.br>
+Also uncomment all SearchEngines directives.
+
+#################################
+# SearchEngine field for the sensis.com.au search engine
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=327496
+# From: Gavin Rogers <grogers@vk6hgr.echidna.id.au>
+
+################################
+# Support for French versions of Google keywords
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=253830
+# From: Cyril Bouthors <cyb@debian.org>
+No longer needed, the sample configuration matches the ".google." string.
+
+Index: webalizer/sample.conf
+===================================================================
+--- webalizer.orig/sample.conf 2010-11-24 17:01:39.000000000 +0100
++++ webalizer/sample.conf      2010-11-24 17:01:43.000000000 +0100
+@@ -710,21 +710,22 @@
+ # engine, and the second is the URL variable used by that search engine
+ # to define it's search terms.
+-#SearchEngine .google.        q=
+-#SearchEngine yahoo.com       p=
+-#SearchEngine altavista.com   q=
+-#SearchEngine   aolsearch.      query=
+-#SearchEngine   ask.co          q=
+-#SearchEngine eureka.com      q=
+-#SearchEngine lycos.com       query=
+-#SearchEngine hotbot.com      MT=
+-#SearchEngine msn.com         q=
+-#SearchEngine infoseek.com    qt=
+-#SearchEngine excite          search=
+-#SearchEngine netscape.com    query=
+-#SearchEngine mamma.com       query=
+-#SearchEngine alltheweb.com   q=
+-#SearchEngine northernlight.com  qr=
++SearchEngine  .google.        q=
++SearchEngine  yahoo.com       p=
++SearchEngine  altavista.com   q=
++SearchEngine  aolsearch.      query=
++SearchEngine  ask.co          q=
++SearchEngine  eureka.com      q=
++SearchEngine  lycos.com       query=
++SearchEngine  hotbot.com      MT=
++SearchEngine  msn.com         q=
++SearchEngine  infoseek.com    qt=
++SearchEngine  excite          search=
++SearchEngine  netscape.com    query=
++SearchEngine  mamma.com       query=
++SearchEngine  alltheweb.com   q=
++SearchEngine  northernlight.com  qr=
++SearchEngine  sensis.com.au   find=
+ # Normally, search strings are converted to lower case in order to
+ # increase accuracy.  The SearchCaseI option allows them to maintain
diff --git a/debian/patches/15_ignore_localhost.diff b/debian/patches/15_ignore_localhost.diff
new file mode 100644 (file)
index 0000000..f7888ea
--- /dev/null
@@ -0,0 +1,23 @@
+From: Jose Carlos Medeiros <debian@psabs.com.br>
+Subject: Ignore localhost by default in sample.conf file
+
+###########################
+# default webalizer.conf *should* ignore localhost
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=168418
+# From: "Norbert Bottlaender-Prier" <norbert@globenet.org>
+
+Index: webalizer/sample.conf
+===================================================================
+--- webalizer.orig/sample.conf 2010-11-24 17:01:43.000000000 +0100
++++ webalizer/sample.conf      2010-11-24 17:01:51.000000000 +0100
+@@ -667,8 +667,10 @@
+ # should consider using an equivalent 'Hide*' keyword instead.
+ #IgnoreSite   bad.site.net
++IgnoreSite    localhost
+ #IgnoreURL    /test*
+ #IgnoreReferrer       file:/*
++IgnoreReferrer        localhost
+ #IgnoreAgent  RealPlayer
+ #IgnoreUser     root
diff --git a/debian/patches/18_ttf_support_throught_libgd.diff b/debian/patches/18_ttf_support_throught_libgd.diff
new file mode 100644 (file)
index 0000000..b5a51c3
--- /dev/null
@@ -0,0 +1,174 @@
+From: Tatsuki Sugiura <sugi@nemui.org>
+Subject: make possible to use TrueTypeFont throught libgd
+
+Origin: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=201723
+
+####################
+# graph label characters will be broken under non-C locale
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=201723
+# From: Tatsuki Sugiura <sugi@nemui.org>
+#
+# GD's built-in font has no Japanese Kanji and any other multi-byte
+# characters. Graph labels can't be displayed correctly under some
+# locales which has these characters.
+# This patch make possible to use TrueTypeFont throught libgd
+# function.
+
+Index: webalizer/README.FIRST
+===================================================================
+--- webalizer.orig/README.FIRST        2011-01-08 20:59:30.000000000 +0100
++++ webalizer/README.FIRST     2011-01-08 20:59:49.000000000 +0100
+@@ -28,3 +28,18 @@
+ # with the options you prefer, build it, install it and use it.
+ ##################
++###################  SUMMARY 18_ttf_support_throught_libgd  ##########################
++
++##################
++# TrueTypeFont makes possible to replace GD built-in font by
++# specified TrueTypeFont.
++# The value can be '/path/to/your/true_type_font.file' or empty.
++# If value is empty(or commented out), GD built-in font will be used.
++# The default is empty.
++# (Supplement for Japanese:
++#  Under EUC-JP locale, TTF file must be specified which has *Windows
++#  Shift-JIS encoding*. This limitation is derived from libgd.
++#  e.g. you can use "/usr/share/fonts/truetype/X-TT/wadalab-gothic.ttf"
++#  provided by ttf-xtt-wadalab-gothic package)
++#TrueTypeFont
++##################
+Index: webalizer/configure.in
+===================================================================
+--- webalizer.orig/configure.in        2011-01-08 20:36:44.000000000 +0100
++++ webalizer/configure.in     2011-01-08 20:59:49.000000000 +0100
+@@ -140,6 +140,7 @@
+ AC_CHECK_LIB(gd, main, LIBGD="yes"; LIBS="-lgd ${LIBS}")
+ if test "${LIBGD}" = "yes"; then
+   AC_CHECK_LIB(gd, gdImagePng, LIBGD="yes", LIBGD="no")
++  AC_CHECK_LIB(gd, gdImageStringFT, LIBS="-lgd ${LIBS}"; HAVE_LIBGD_TTF="yes", HAVE_LIBGD_TTF="")
+   if test "${LIBGD}" = "no"; then
+     AC_MSG_ERROR(Old version of libgd found.. please upgrade!)
+   fi
+@@ -147,6 +148,10 @@
+   AC_MSG_ERROR(gd library not found.. please install libgd)
+ fi
++if test "$HAVE_LIBGD_TTF" = "yes" ;then
++ AC_DEFINE(HAVE_LIBGD_TTF)
++fi
++
+ AC_CHECK_HEADER(gd.h, HDR="yes", HDR="no")
+ if test "${HDR}" = "no"; then
+   AC_MSG_ERROR(gd.h header not found.. please install)
+Index: webalizer/graphs.c
+===================================================================
+--- webalizer.orig/graphs.c    2011-01-08 20:59:42.000000000 +0100
++++ webalizer/graphs.c 2011-01-08 20:59:49.000000000 +0100
+@@ -1025,6 +1025,48 @@
+    return;
+ }
++#ifdef HAVE_LIBGD_TTF
++/*
++ * Simple wrapper of gdImageString() for TrueType fonts
++ *
++ * To support Japanese (and other multi-byte characters), GD 1.7
++ * or later that supports kanji(JISX208) TTF has been required.
++ * So, we must use TrueType fonts instead of gd built-in
++ * bitmap fonts.
++ * 
++ * Original of function written by <yasu@on.cs.keio.ac.jp>.
++ * And modified by Tatsuki Sugiura <sugi@nemui.org>
++ * 
++ */
++static void gdImageStringWrapper(gdImagePtr im,  gdFontPtr f,
++                               int x, int y,
++                               unsigned char *s, int color, double rad)
++{
++   double ptsize = 11.0;
++   int    brect[8];
++   extern char *ttf_file;
++
++   if (ttf_file == NULL || strcmp(ttf_file, "") == 0) {
++      if (fabs(rad) < PI/4.0)
++        gdImageString(im, f, x, y, s, color);
++      else
++        gdImageStringUp(im, f, x, y, s, color);
++   } else {
++      if (f == gdFontSmall)
++         ptsize = 9.0;
++
++      gdImageStringFT(im, brect, color, ttf_file, ptsize, rad, 
++                     x + (int)(ptsize*sin(rad)),
++                     y + (int)(ptsize*cos(rad)), s);
++   }
++}
++
++#define gdImageString(im, f, x, y, s, color) \
++        gdImageStringWrapper(im, f, x, y, s, color, 0.0)
++#define gdImageStringUp(im, f, x, y, s, color) \
++      gdImageStringWrapper(im, f, x, y, s, color, PI/2.0)
++#endif /* HAVE_LIBGD_TTF */
++
+ /****************************************************************/
+ /*                                                              */
+ /* ASHEX2INT - ASCII HEX TO INT CONVERTER                       */
+Index: webalizer/sample.conf
+===================================================================
+--- webalizer.orig/sample.conf 2011-01-08 20:59:48.000000000 +0100
++++ webalizer/sample.conf      2011-01-08 20:59:49.000000000 +0100
+@@ -792,4 +792,17 @@
+ #PieColor3    ff00ff
+ #PieColor4    ffc080
++# TrueTypeFont makes possible to replace GD built-in font by
++# specified TrueTypeFont.
++# The value can be '/path/to/your/true_type_font.file' or empty.
++# If value is empty(or commented out), GD built-in font will be used.
++# The default is empty.
++# (Supplement for Japanese:
++#  Under EUC-JP locale, TTF file must be specified which has *Windows
++#  Shift-JIS encoding*. This limitation is derived from libgd.
++#  e.g. you can use "/usr/share/fonts/truetype/X-TT/wadalab-gothic.ttf"
++#  provided by ttf-xtt-wadalab-gothic package)
++
++#TrueTypeFont
++
+ # End of configuration file...  Have a nice day!
+Index: webalizer/webalizer.c
+===================================================================
+--- webalizer.orig/webalizer.c 2011-01-08 20:59:42.000000000 +0100
++++ webalizer/webalizer.c      2011-01-08 20:59:49.000000000 +0100
+@@ -175,6 +175,10 @@
+ GeoIP   *geo_fp      = NULL;                  /* GeoIP database handle    */
+ #endif
++#ifdef HAVE_LIBGD_TTF
++char    *ttf_file    = "";                    /* truetype font file       */
++#endif
++
+ int     ntop_sites   = 30;                    /* top n sites to display   */
+ int     ntop_sitesK  = 10;                    /* top n sites (by kbytes)  */
+ int     ntop_urls    = 30;                    /* top n url's to display   */
+@@ -1668,7 +1672,10 @@
+                      "SearchCaseI",       /* srch str case insensitive  120 */
+                    "InOutkB",           /* logio (0=no,1=yes,2=auto)  121 */
+                      "ColorIKbyte",       /* IKbyte Color (def=0080ff)  122 */
+-                     "ColorOKbyte"        /* OKbyte Color (def=00e000)  123 */
++                     "ColorOKbyte",       /* OKbyte Color (def=00e000)  123 */
++#ifdef HAVE_LIBGD_TTF
++                     "TrueTypeFont"       /* TrueType Font file         124 */
++#endif
+                    };
+    FILE *fp;
+@@ -1908,6 +1915,9 @@
+                     (tolower(value[0])=='y')?1:2;  break; /* InOutkB        */
+         case 122: strncpy(ikbyte_color+1,value,6); break; /* ColorIKbyte    */
+         case 123: strncpy(okbyte_color+1,value,6); break; /* ColorOKbyte    */
++#ifdef HAVE_LIBGD_TTF
++        case 124: ttf_file=save_opt(value);        break; /* TrueType font  */
++#endif
+       }
+    }
+    fclose(fp);
diff --git a/debian/patches/22_php_as_htm_in_sample.conf.diff b/debian/patches/22_php_as_htm_in_sample.conf.diff
new file mode 100644 (file)
index 0000000..e5a30df
--- /dev/null
@@ -0,0 +1,18 @@
+From: Jose Carlos Medeiros <debian@psabs.com.br>
+Subject: enable php as htm pages
+
+Index: webalizer/sample.conf
+===================================================================
+--- webalizer.orig/sample.conf 2010-11-24 00:04:10.000000000 +0100
++++ webalizer/sample.conf      2010-11-24 00:04:12.000000000 +0100
+@@ -108,8 +108,9 @@
+ PageType      htm*
+ PageType      cgi
+ #PageType     phtml
+-#PageType     php3
++PageType      php3
+ #PageType     pl
++PageType      php
+ # PagePrefix allows all requests with a specified prefix to be
+ # considered as 'pages'. If you want everything under /documents
diff --git a/debian/patches/23_gettext_first_part.diff b/debian/patches/23_gettext_first_part.diff
new file mode 100644 (file)
index 0000000..350482b
--- /dev/null
@@ -0,0 +1,1503 @@
+From: Julien Viard de Galbert <julien@vdg.blogsite.org>
+Subject: Convert to use gettext [first part]
+
+If you apply this patch you MUST apply the next patch as this patch is not self
+contained. The reason is that the second patch can be regenerated by running a
+script.
+
+This patch is based on 17_gettext.dpatch by Jose Carlos Medeiros <debian@psabs.com.br>
+He described his patch as follows:
+#############################################
+# To create this patch I did follow:
+# 1. Created and ran script lang_po.sh ,  see it above below.
+#    This script create a new .c file and a .diff file t each source .c file
+# 2. Changed these arrays strings from ex. l_month[] to _(l_month[])
+#    l_month[], s_month[], h_msg[], language, response[], top_ctrys[]
+# 3. Changed "language" string to _("locale")
+# 4. After ran lang_po.sh script, it change another strings that cant be
+#    translated. Then I need to change wrong substituitions like:
+#    -        case 't': msg_title=optarg;          break;  /* Report title        */
+#    +        case 't': _("Usage Statistics for")=optarg;          break;  /* Report title        */
+#    To do it, just look at .diff files and after remove these one.
+# 5. Looked for strings that arent msg_*, like new string put with fprintf, ex.
+#    fprintf(stderr,"%s %s!\n","Error: File is a symlink",log_fname);
+#    in webalizer.c file
+#    grep \" *.c |grep -v "_(\"" |less
+# 6. Found and change string that arent msg_* .  Patch of Geolizer is an example.
+#    It put messages like "Error, something..." and we need to change to _("Error, som...")
+# 7. Created webalizer.pot file with the follow command:
+#    xgettext --default-domain=webalizer --directory=. -o po/webalizer.pot \
+#             --language=C --add-comments="TRANS:" --escape --sort-by-file \
+#             --keyword=_ --keyword=N_ --keyword=Q_ --keyword=PL_:1,2 *.c *.h
+# 8. Merged old .po files.
+#    for i in po/*.po;do echo -n $i;msgmerge -U $i po/webalizer.pot;done;
+#    rm -f po/*.po~;
+
+# lang_po.sh
+# --- cut here and strip all first "#" ---
+##!/bin/bash
+## create  lang.txt file with vars and strings from webalizer_lang.english file
+#cat lang/webalizer_lang.english | grep ^char | sed \
+#      -e 's/^char//' -e 's/ \*//' -e 's/= /=/' -e 's/ *=/=/' \
+#      -e 's/="/=/' -e 's/;$//' -e 's/"$//' -e 's/!/\\!/' | \
+#      grep -v "^l_month" | grep -v "^s_month" | grep -v "^h_msg" | \
+#      grep -v "^language=" | sort -r > lang.txt
+## create a sed line with -e options that subst msg_* strings to _("string")
+## take strings from lang.txt file.
+#SED_E="";
+#for i in $(cat lang.txt |cut -f1 -d=); do
+#  SUBST=$(cat lang.txt | grep ^$i=| cut -f2 -d=);
+#  SED_E="$SED_E -e "'"'"s/$i/_("'\"'$SUBST'\"'")/"'"'
+#done;
+## create a script file with commands to subst and create a diff file
+## I create this script because had errors when I tried to run commands here.
+#echo "" > lang_po_exec.sh
+#for i in *.c; do
+#  echo "cat $i | sed $SED_E > $i.new;" >> lang_po_exec.sh;
+#  echo "diff -uNad $i $i.new > $i.diff;" >> lang_po_exec.sh;
+#  echo "cat $i.new > $i;" >> lang_po_exec.sh;
+#  echo "rm -f $i.new;" >> lang_po_exec.sh;
+#done;
+#bash ./lang_po_exec.sh;
+#rm -f lang_po_exec.sh lang.txt;
+# --- cut here ---
+
+###########################################
+# debian package won't compile
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=252541
+# From: Paolo <pp@ieee.org>
+# Patch to resolve little problem in gettextize
+
+###########################################
+# some messages & variables are missed while gettextize
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=201697
+# From: Tatsuki Sugiura <sugi@nemui.org>
+
+###########################################
+# Webalizer doesn't display 'language' anymore
+# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=202293
+# From: Fabien Chevalier <fabien@juliana-multimedia.com>
+
+
+Based on this, I applied the original patch without any part that will be
+corrected by the script.
+Also I partially regenerated the lang2.h file by using the strings from
+the new version of 'lang/webalizer_lang.english'
+This patch also generate a fixed version of the above script.
+
+It handles the following bugs as well:
+
+  * Fix report title translation handling
+    gettext patch was making ReportTitle (and -t) useless.
+    Also the fix is done in a way so that the script no longer generate wrong
+    substitutions (see point 4 above).
+
+  * Fix month translations
+    From: Gerome Fournier <gerome.fournier@infomaniak.ch>
+    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=520408
+
+Index: webalizer/Makefile.in
+===================================================================
+--- webalizer.orig/Makefile.in 2011-01-07 19:11:55.000000000 +0100
++++ webalizer/Makefile.in      2011-01-07 19:13:13.000000000 +0100
+@@ -23,10 +23,11 @@
+ BINDIR          = @bindir@
+ MANDIR          = ${datadir}/man/man1
+ ETCDIR          = @sysconfdir@
++LOCALEDIR       = @localedir@
+ GEODB           = @GEODB_LOC@
+ CC              = @CC@
+ CFLAGS          = @CFLAGS@ @CPPFLAGS@
+-LIBS            = @LIBS@
++LIBS            = @LIBS@ -ldb
+ WCMGR_LIBS      = @WCMGR_LIBS@
+ DEFS            = -DETCDIR=\"${ETCDIR}\" -DGEODB_LOC=\"${GEODB}\" @DEFS@ @OPTS@
+ LDFLAGS         = @LDFLAGS@
+@@ -35,6 +36,9 @@
+ INSTALL_DATA    = @INSTALL_DATA@
+ DEFLANG         = @DEFAULT_LANG@
++LANGS=$(shell for a in po/*.po; do basename $${a%.po}; done)
++
++
+ # Shouldn't have to touch below here!
+ all: webalizer wcmgr
+@@ -43,13 +47,13 @@
+               linklist.o linklist.h preserve.o preserve.h  \
+                 dns_resolv.o dns_resolv.h parser.o parser.h  \
+                 output.o output.h graphs.o graphs.h lang.h   \
+-              webalizer_lang.h
++              $(LANGS:%=po/%.mo)
+       $(CC) ${LDFLAGS} -o webalizer webalizer.o hashtab.o linklist.o preserve.o parser.o output.o dns_resolv.o graphs.o ${LIBS}
+       rm -f webazolver
+       @LN_S@ webalizer webazolver
+ webalizer.o:  webalizer.c webalizer.h parser.h output.h preserve.h \
+-              graphs.h dns_resolv.h webalizer_lang.h
++              graphs.h dns_resolv.h
+       $(CC) ${CFLAGS} ${DEFS} -c webalizer.c
+ parser.o:     parser.c parser.h webalizer.h lang.h
+@@ -81,14 +85,16 @@
+ wcmgr.o:      wcmgr.c
+       $(CC) ${CFLAGS} ${DEFS} -c wcmgr.c
++$(LANGS:%=po/%.mo): %.mo: %.po
++      msgfmt $< -o $@
++
+ clean:
+       rm -f webalizer webazolver wcmgr *.o usage*.png daily*.png hourly*.png
+       rm -f ctry*.png *.html *.hist *.current core *.gif
+ distclean: clean
+       rm -f webalizer.conf *.tar *.tgz *.Z *.tar.gz
+-      rm -f Makefile webalizer_lang.h config.cache config.log config.status
+-      @LN_S@ lang/webalizer_lang.@DEFAULT_LANG@ webalizer_lang.h
++      rm -f Makefile config.cache config.log config.status $(LANGS:%=po/%.mo)
+ install: all
+       mkdir -p ${DESTDIR}${BINDIR}
+@@ -103,6 +109,7 @@
+       rm -f ${DESTDIR}${MANDIR}/webazolver.1
+       @LN_S@ webalizer.1 ${DESTDIR}${MANDIR}/webazolver.1
+       $(INSTALL_DATA) sample.conf ${DESTDIR}${ETCDIR}/webalizer.conf.sample
++      for a in $(LANGS); do $(INSTALL_DATA) po/$$a.mo ${DESTDIR}/$(LOCALEDIR)/$$a/LC_MESSAGES/webalizer.mo; done
+ uninstall:
+       rm -f ${DESTDIR}${BINDIR}/webalizer
+@@ -112,5 +119,4 @@
+       rm -f ${DESTDIR}${MANDIR}/webazolver.1
+       rm -f ${DESTDIR}${MANDIR}/wcmgr.1
+       rm -f ${DESTDIR}${ETCDIR}/webalizer.conf.sample
+-      rm -f webalizer_lang.h
+-      @LN_S@ lang/webalizer_lang.${DEFLANG} webalizer_lang.h
++      for a in $(LANGS); do rm -f $(LOCALEDIR)/$$a/LC_MESSAGES/webalizer.mo; done
+Index: webalizer/configure.in
+===================================================================
+--- webalizer.orig/configure.in        2011-01-07 19:12:51.000000000 +0100
++++ webalizer/configure.in     2011-01-07 19:13:13.000000000 +0100
+@@ -281,43 +281,16 @@
+   if test "$OLDHASH" = "yes"; then OPTS="-DUSE_OLDHASH"; fi
+ dnl ------------------------------------------
+-dnl check language to use (default is english)
++dnl language with gettext
+ dnl ------------------------------------------
+-LANG_CACHE=yes
+-AC_ARG_WITH(language,
+-  [  --with-language=name    Use language 'name' (default is english)], 
+-  WEBALIZER_LANG="${withval}"; LANG_CACHE=no, LANG_CACHE=yes)
+-if test "$WEBALIZER_LANG" = "no"; then WEBALIZER_LANG=english; fi
++dnl keep datadir, it is needed for "bindtextdomain" since we use gettext
++OPTS="-DDATADIR=\\\"${datadir}\\\" ${OPTS}"
+-dnl ------------------------------------------
+-dnl check if specfied language is valid
+-dnl ------------------------------------------
+-
+-AC_MSG_CHECKING(for language file)
+-if test "$LANG_CACHE" = "yes"; then
+-  AC_CACHE_VAL(ac_cv_language, ac_cv_language=$DEFAULT_LANG)
+-  WEBALIZER_LANG=$ac_cv_language
+-fi
+-
+-if test -f lang/webalizer_lang.${WEBALIZER_LANG}; then
+-AC_MSG_RESULT(yes - ${WEBALIZER_LANG})
+-else
+- if test -f lang/webalizer_lang.${DEFAULT_LANG}; then
+-  AC_MSG_RESULT('${WEBALIZER_LANG}' not found - using ${DEFAULT_LANG})
+-  WEBALIZER_LANG=${DEFAULT_LANG}
+- else
+-  AC_MSG_RESULT(no)
+-  AC_MSG_ERROR(language files not found... fix before continuing)
+- fi
+-fi
+-ac_cv_language=${WEBALIZER_LANG}
+-
+-dnl ------------------------------------------
+-dnl create link to language file
+-dnl ------------------------------------------
++#AM_GNU_GETTEXT
+-AC_LINK_FILES(lang/webalizer_lang.${WEBALIZER_LANG}, webalizer_lang.h)
++localedir=${datadir}/locale
++AC_SUBST(localedir)
+ dnl ------------------------------------------
+ dnl done.. write out our Makefile
+Index: webalizer/dns_resolv.c
+===================================================================
+--- webalizer.orig/dns_resolv.c        2011-01-07 19:11:55.000000000 +0100
++++ webalizer/dns_resolv.c     2011-01-07 19:13:13.000000000 +0100
+@@ -120,7 +120,7 @@
+    query.data = log_rec->hostname;
+    query.size = strlen(log_rec->hostname);
+-   if (debug_mode) fprintf(stderr,"Checking %s...", log_rec->hostname);
++   if (debug_mode) fprintf(stderr,_("Checking %s..."), log_rec->hostname);
+    if ( (i=dns_db->get(dns_db, NULL, &query, &response, 0)) == 0)
+    {
+@@ -130,15 +130,15 @@
+                MAXHOST);
+       log_rec->hostname[MAXHOST-1]=0;
+       if (debug_mode)
+-         fprintf(stderr," found: %s (%ld)\n",
++         fprintf(stderr,_(" found: %s (%ld)\n"),
+            log_rec->hostname, alignedRecord.timeStamp);
+    }
+-   else  /* not found or error occured during get */
++   else  /* not found or error occurred during get */
+    {
+       if (debug_mode)
+       {
+-         if (i==DB_NOTFOUND) fprintf(stderr," not found\n");
+-         else                fprintf(stderr," error (%d)\n",i);
++         if (i==DB_NOTFOUND) fprintf(stderr,_(" not found\n"));
++         else                fprintf(stderr,_(" error (%d)\n"),i);
+       }
+    }
+ }
+@@ -328,7 +328,7 @@
+          i=( (int)((float)listEntries/temp_time) );
+       else i=0;
+-      if ( (i>0) && (i<=listEntries) ) printf(", %d/sec\n", i);
++      if ( (i>0) && (i<=listEntries) ) printf(_(", %d/sec\n"), i);
+          else  printf("\n");
+    }
+@@ -371,13 +371,13 @@
+    {
+       if(pipe(child[i].inpipe))
+       {
+-         if (verbose) fprintf(stderr,"INPIPE creation error");
++         if (verbose) fprintf(stderr,_("INPIPE creation error"));
+          return;   /* exit(1) */
+       }
+       if(pipe(child[i].outpipe))
+       {
+-         if (verbose) fprintf(stderr,"OUTPIPE creation error");
++         if (verbose) fprintf(stderr,_("OUTPIPE creation error"));
+          return;   /* exit(1); */
+       }
+@@ -386,7 +386,7 @@
+       {
+          case -1:
+          {
+-            if (verbose) fprintf(stderr,"FORK error");
++            if (verbose) fprintf(stderr,_("FORK error"));
+             return;  /* exit(1); */
+          }
+         
+@@ -402,7 +402,7 @@
+             {
+                if(size < 0)
+                {
+-                  perror("read error");
++                  perror(_("read error"));
+                   exit(1);
+                }
+                else
+@@ -425,18 +425,18 @@
+                      else
+                      {
+                         if (debug_mode)
+-                           printf("Child %d getnameinfo bad hbuf!\n",i);
++                           printf(_("Child %d getnameinfo bad hbuf!\n"),i);
+                      }
+                   }
+                   else
+                   {
+                      if(debug_mode)
+-                       printf("Child %d getnameinfo failed!\n",i);
++                       printf(_("Child %d getnameinfo failed!\n"),i);
+                   }
+                   if (write(child[i].inpipe[1], child_buf, size) == -1)
+                   {
+-                     perror("write error");
++                     perror(_("write error"));
+                      exit(1);
+                   }
+                }
+@@ -445,7 +445,7 @@
+             close(child[i].outpipe[0]);
+               
+             if(debug_mode)
+-               printf( "Child %d got closed input, shutting down\n", i);  
++               printf( _("Child %d got closed input, shutting down\n"), i);  
+             fflush(stdout);
+             exit(0);
+@@ -490,7 +490,7 @@
+                   nof_children--;
+                   if(debug_mode)
+-                  printf("Reaped Child %d\n", pid);
++                  printf(_("Reaped Child %d\n"), pid);
+                   break;
+                }
+@@ -519,7 +519,7 @@
+                      max_fd = MAX(max_fd, child[i].inpipe[0]);
+                      if(debug_mode)
+-                        printf("Giving %d bytes to Child %d\n",
++                        printf(_("Giving %d bytes to Child %d\n"),
+                         trav->addrlen, i);
+                      trav = trav->llist;
+@@ -528,7 +528,7 @@
+                   {
+                      if(errno != EINTR)           /* Could be a signal */
+                      {
+-                        perror("Could not write to pipe");
++                        perror(_("Could not write to pipe"));
+                         close(child[i].outpipe[1]);           /* kill     */
+                         child[i].flags &= ~DNS_CHILD_RUNNING; /* child    */
+                      }
+@@ -557,7 +557,7 @@
+          case -1:
+          {
+             if(errno != EINTR)   /* Could be a signal */
+-            perror("Error in select");
++            perror(_("Error in select"));
+             break;
+          }
+@@ -565,7 +565,7 @@
+          case 0:   /* Timeout, just fall once through the child loop */
+          {
+             if(debug_mode)
+-            printf("tick\n");
++            printf(_("tick\n"));
+               
+             break;
+          }
+@@ -600,7 +600,7 @@
+                         child[i].flags &= ~DNS_CHILD_RUNNING;
+                         if(debug_mode)
+-                           printf("Child %d wants to be reaped\n", i);
++                           printf(_("Child %d wants to be reaped\n"), i);
+                         break;
+                      }
+@@ -613,14 +613,14 @@
+                                     sizeof(child[i].cur->addr)))
+                         {
+                            if(debug_mode)
+-                              printf("Child %d Got a result: %s -> %s\n",
++                              printf(_("Child %d Got a result: %s -> %s\n"),
+                                      i, child[i].cur->string, dns_buf);
+                            db_put(child[i].cur->string, dns_buf, 0);
+                         }
+                         else
+                         {
+                            if(debug_mode)
+-                              printf("Child %d could not resolve: %s (%s)\n",
++                              printf(_("Child %d could not resolve: %s (%s)\n"),
+                                      i, child[i].cur->string,
+                                      (cache_ips)?"cache":"no cache");
+                            if (cache_ips)      /* Cache non-resolved? */
+@@ -629,7 +629,7 @@
+                         }
+                         if(debug_mode)
+-                           printf("Child %d back in task pool\n", i);
++                           printf(_("Child %d back in task pool\n"), i);
+                         /* Child is back in the task pool */
+                         child[i].flags |= DNS_CHILD_READY;
+@@ -721,7 +721,7 @@
+          v.data = recPtr;
+          if ( dns_db->put(dns_db, NULL, &k, &v, 0) != 0 )
+-            if (verbose>1) fprintf(stderr,"db_put fail!\n");
++            if (verbose>1) fprintf(stderr,_("db_put fail!\n"));
+          free(recPtr);
+       }
+    }
+Index: webalizer/graphs.c
+===================================================================
+--- webalizer.orig/graphs.c    2011-01-07 19:12:51.000000000 +0100
++++ webalizer/graphs.c 2011-01-07 19:13:13.000000000 +0100
+@@ -217,12 +217,12 @@
+       if (graph_mths<16)
+       {
+          gdImageString(im,gdFontSmall,ci+((i-s_mth)*cs)+(((cw+co+co)-18)/2)+1,
+-                     236,(unsigned char *)s_month[data[i].month-1],black);
++                     236,(unsigned char *)Q_(s_month[data[i].month-1]),black);
+       }
+       else if (graph_mths<36)
+       {
+          gdImageChar(im,gdFontSmall,ci+((i-s_mth)*cs)+(((cw+co+co)-6)/2)+1,
+-                     236,s_month[data[i].month-1][0],
++                     236,Q_(s_month[data[i].month-1])[0],
+                      (data[i].month==1)?blue:black);
+       }
+       else
+Index: webalizer/lang.h
+===================================================================
+--- webalizer.orig/lang.h      2011-01-07 19:12:27.000000000 +0100
++++ webalizer/lang.h   2011-01-07 19:13:13.000000000 +0100
+@@ -1,187 +1,20 @@
+ #ifndef _LANG_H
+ #define _LANG_H
+-extern char *language    ;
+-extern char *langcode    ;
++#include <libintl.h>
++#include <locale.h>
+-extern char *msg_records ;
+-extern char *msg_addresses;
+-extern char *msg_ignored ;
+-extern char *msg_bad     ;
+-extern char *msg_in      ;
+-extern char *msg_seconds ;
+-
+-extern char *msg_log_err ;
+-extern char *msg_log_use ;
+-extern char *msg_dir_err ;
+-extern char *msg_dir_use ;
+-extern char *msg_cur_dir ;
+-extern char *msg_hostname;
+-extern char *msg_ign_hist;
+-extern char *msg_no_hist ;
+-extern char *msg_get_hist;
+-extern char *msg_put_hist;
+-extern char *msg_hist_err;
+-extern char *msg_bad_hist;
+-extern char *msg_bad_conf;
+-extern char *msg_bad_key ;
+-extern char *msg_bad_date;
+-extern char *msg_ign_nscp;
+-extern char *msg_bad_rec ;
+-extern char *msg_no_vrec ;
+-extern char *msg_gen_rpt ;
+-extern char *msg_gen_sum ;
+-extern char *msg_get_data;
+-extern char *msg_put_data;
+-extern char *msg_no_data ;
+-extern char *msg_bad_data;
+-extern char *msg_data_err;
+-extern char *msg_dup_data;
+-
+-extern char *msg_dns_nocf;
+-extern char *msg_dns_nodb;
+-extern char *msg_dns_nolk;
+-extern char *msg_dns_usec;
+-extern char *msg_dns_rslf;
+-extern char *msg_dns_none;
+-extern char *msg_dns_abrt;
+-
+-extern char *msg_geo_open;
+-extern char *msg_geo_use ;
+-extern char *msg_geo_nolu;
+-extern char *msg_geo_dflt;
+-
+-extern char *msg_nomem_ts;
+-extern char *msg_nomem_tr;
+-extern char *msg_nomem_tu;
+-extern char *msg_nomem_tc;
+-extern char *msg_nomem_ta;
+-extern char *msg_nomem_tsr;
+-extern char *msg_nomem_ti;
+-extern char *msg_nomem_dh;
+-extern char *msg_nomem_mh;
+-extern char *msg_nomem_u ;
+-extern char *msg_nomem_a ;
+-extern char *msg_nomem_r ;
+-extern char *msg_nomem_sc;
+-extern char *msg_nomem_i ;
+-
+-extern char *msg_big_rec ;
+-extern char *msg_big_host;
+-extern char *msg_big_date;
+-extern char *msg_big_req ;
+-extern char *msg_big_ref ;
+-extern char *msg_big_user;
+-extern char *msg_big_one ;
++#define _(String) gettext (String)
++#define gettext_noop(String) String
++#define N_(String) gettext_noop (String)
++#define Q_(String) intl_strip_context (String)
+-extern char *msg_no_open ;
+-
+-extern char *h_usage1    ;
+-extern char *h_usage2    ;
+ extern char *h_msg[];
+-/* HTML Strings */
+-
+-extern char *msg_hhdr_sp ;
+-extern char *msg_hhdr_gt ;
+-
+-extern char *msg_main_us ;
+-extern char *msg_main_per;
+-extern char *msg_main_sum;
+-extern char *msg_main_da ;
+-extern char *msg_main_mt ;
+-
+-extern char *msg_hmth_du ;
+-extern char *msg_hmth_hu ;
+-
+-extern char *msg_h_by    ;
+-extern char *msg_h_avg   ;
+-extern char *msg_h_max   ;
+-extern char *msg_h_total ;
+-extern char *msg_h_totals;
+-extern char *msg_h_day   ;
+-extern char *msg_h_mth   ;
+-extern char *msg_h_hour  ;
+-extern char *msg_h_hits  ;
+-extern char *msg_h_pages ;
+-extern char *msg_h_visits;
+-extern char *msg_h_files ;
+-extern char *msg_h_sites ;
+-extern char *msg_h_xfer  ;
+-extern char *msg_h_ixfer ;
+-extern char *msg_h_oxfer ;
+-extern char *msg_h_hname ;
+-extern char *msg_h_url   ;
+-extern char *msg_h_agent ;
+-extern char *msg_h_ref   ;
+-extern char *msg_h_ctry  ;
+-extern char *msg_h_search;
+-extern char *msg_h_uname ;
+-
+-extern char *msg_hlnk_ds ;
+-extern char *msg_hlnk_hs ;
+-extern char *msg_hlnk_u  ;
+-extern char *msg_hlnk_s  ;
+-extern char *msg_hlnk_a  ;
+-extern char *msg_hlnk_c  ;
+-extern char *msg_hlnk_r  ;
+-extern char *msg_hlnk_en ;
+-extern char *msg_hlnk_ex ;
+-extern char *msg_hlnk_sr ;
+-extern char *msg_hlnk_i  ;
+-
+-extern char *msg_mtot_ms ;
+-extern char *msg_mtot_th ;
+-extern char *msg_mtot_tf ;
+-extern char *msg_mtot_tx ;
+-extern char *msg_mtot_ix ;
+-extern char *msg_mtot_ox ;
+-extern char *msg_mtot_us ;
+-extern char *msg_mtot_ur ;
+-extern char *msg_mtot_ua ;
+-extern char *msg_mtot_uu ;
+-extern char *msg_mtot_ui ;
+-extern char *msg_mtot_mhd;
+-extern char *msg_mtot_mhh;
+-extern char *msg_mtot_mfd;
+-extern char *msg_mtot_mpd;
+-extern char *msg_mtot_msd;
+-extern char *msg_mtot_mvd;
+-extern char *msg_mtot_mkd;
+-extern char *msg_mtot_ikd;
+-extern char *msg_mtot_okd;
+-extern char *msg_mtot_rc ;
+-
+-extern char *msg_dtot_ds ;
+-
+-extern char *msg_htot_hs ;
+-
+-extern char *msg_ctry_use;
+-
+-extern char *msg_top_top ;
+-extern char *msg_top_of  ;
+-extern char *msg_top_s   ;
+-extern char *msg_top_u   ;
+-extern char *msg_top_r   ;
+-extern char *msg_top_a   ;
+-extern char *msg_top_c   ;
+-extern char *msg_top_en  ;
+-extern char *msg_top_ex  ;
+-extern char *msg_top_sr  ;
+-extern char *msg_top_i   ;
+-extern char *msg_v_sites ;
+-extern char *msg_v_urls  ;
+-extern char *msg_v_refs  ;
+-extern char *msg_v_agents;
+-extern char *msg_v_search;
+-extern char *msg_v_users ;
+-
+-extern char *msg_title   ;
+-extern char *msg_h_other ;
+-
+ extern char *s_month[12];
+ extern char *l_month[12];
++extern char *report_title;
+ extern struct response_code response[];
+ extern struct country_code ctry[];
+Index: webalizer/lang2.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ webalizer/lang2.h  2011-01-07 19:13:13.000000000 +0100
+@@ -0,0 +1,435 @@
++/*
++   webalizer_lang.english
++
++   Webalizer V2.0x Language Support file for English.
++   15-May-1998 by Bradford L. Barrett (brad@mrunix.net)
++   31-May-1998 Modified for level 1.1 support (brad@mrunix.net)
++   23-Jul-1998 Modified for level 1.2 support (brad@mrunix.net)
++   08-Mar-1999 Updated HTTP 1.1 response codes by Yves Lafon (ylafon@w3.org)
++   28-Jun-1999 Modified for level 1.3 support (brad@mrunix.net)
++   16-Feb-2000 Modified for level 2.0 support (brad@mrunix.net)
++   26-Mar-2008 Updated to current IANA TLDs (brad@mrunix.net)
++   26-May-2008 Modified for level 2.2 support (brad@mrunix.net)
++
++
++   Language files are named using the following convention:
++
++   webalizer_lang.LANGUAGE
++
++   where 'LANGUAGE' is the name of the language the file is
++   translated into (ie: webalizer_lang.russian for russian).
++   Either copy the desired language file to webalizer_lang.h
++   or create a symbolic link, then re-compile.
++
++   If you translate this file into a different language, please
++   send a copy to brad@mrunix.net.
++
++*/
++
++/* lib gettext */
++#include <libintl.h>
++#include <locale.h>
++
++#define _(String) gettext (String)
++#define gettext_noop(String) String
++#define N_(String) gettext_noop (String)
++#define Q_(String) intl_strip_context (String)
++
++/* Help display... */
++char *h_msg[]= {
++         gettext_noop("-h        = print this help message")             ,
++         gettext_noop("-V        = print version information")           ,
++         gettext_noop("-v        = be verbose")                          ,
++         gettext_noop("-d        = print additional debug info")         ,
++         gettext_noop("-F type   = Log type.  type= (clf | ftp | squid | w3c)"),
++         gettext_noop("-f        = Fold sequence errors")                ,
++         gettext_noop("-i        = ignore history file")                 ,
++         gettext_noop("-p        = preserve state (incremental)")        ,
++         gettext_noop("-b        = ignore state (incremental)")          ,
++         gettext_noop("-q        = supress informational messages")      ,
++         gettext_noop("-Q        = supress _ALL_ messages")              ,
++         gettext_noop("-Y        = supress country graph")               ,
++         gettext_noop("-G        = supress hourly graph")                ,
++         gettext_noop("-H        = supress hourly stats")                ,
++         gettext_noop("-L        = supress color coded graph legends")   ,
++         gettext_noop("-l num    = use num background lines on graph")   ,
++         gettext_noop("-m num    = Visit timout value (seconds)")        ,
++         gettext_noop("-T        = print timing information")            ,
++         gettext_noop("-c file   = use configuration file 'file'")       ,
++         gettext_noop("-n name   = hostname to use")                     ,
++         gettext_noop("-o dir    = output directory to use")             ,
++         gettext_noop("-t name   = report title 'name'")                 ,
++         gettext_noop("-a name   = hide user agent 'name'")              ,
++         gettext_noop("-r name   = hide referrer 'name'")                ,
++         gettext_noop("-s name   = hide site 'name'")                    ,
++         gettext_noop("-u name   = hide URL 'name'")                     ,
++         gettext_noop("-x name   = Use filename extension 'name'")       ,
++         gettext_noop("-O name   = Omit page 'name'")                    ,
++         gettext_noop("-P name   = Page type extension 'name'")          ,
++         gettext_noop("-I name   = Index alias 'name'")                  ,
++         gettext_noop("-K num    = num months in summary table")         ,
++         gettext_noop("-k num    = num months in summary graph")         ,
++         gettext_noop("-A num    = Display num top agents")              ,
++         gettext_noop("-C num    = Display num top countries")           ,
++         gettext_noop("-R num    = Display num top referrers")           ,
++         gettext_noop("-S num    = Display num top sites")               ,
++         gettext_noop("-U num    = Display num top URLs")                ,
++         gettext_noop("-e num    = Display num top Entry Pages")         ,
++         gettext_noop("-E num    = Display num top Exit Pages")          ,
++         gettext_noop("-g num    = Group Domains to 'num' levels")       ,
++         gettext_noop("-X        = Hide individual sites")               ,
++         gettext_noop("-z dir    = Use country flags in 'dir'")          ,
++#ifdef USE_DNS
++         gettext_noop("-D name   = Use DNS Cache file 'name'")           ,
++         gettext_noop("-N num    = Number of DNS processes (0=disable)") ,
++         gettext_noop("-j        = Enable native GeoDB lookups")         ,
++         gettext_noop("-J name   = Use GeoDB database 'name'")           ,
++#endif
++#ifdef USE_GEOIP
++         gettext_noop("-w        = Enable GeoIP lookups")                ,
++         gettext_noop("-W name   = Use GeoIP database 'name'")           ,
++#endif
++         NULL};
++
++/* short month names MUST BE 3 CHARS in size... pad if needed*/
++char *s_month[12]={ gettext_noop("Jan"), gettext_noop("Feb"), gettext_noop("Mar"),
++                    gettext_noop("Apr"), gettext_noop("short|May"), gettext_noop("Jun"),
++                    gettext_noop("Jul"), gettext_noop("Aug"), gettext_noop("Sep"),
++                    gettext_noop("Oct"), gettext_noop("Nov"), gettext_noop("Dec")};
++
++/* long month names - can be any length */
++char *l_month[12]={ gettext_noop("January"), gettext_noop("February"), gettext_noop("March"),
++                    gettext_noop("April"), gettext_noop("long|May"), gettext_noop("June"),
++                    gettext_noop("July"),    gettext_noop("August"), gettext_noop("September"),
++                  gettext_noop("October"),  gettext_noop("November"),gettext_noop("December")};
++
++/* response code descriptions... order IS important!      */
++struct response_code response[] =
++       { { gettext_noop("Undefined response code"),                    0 },
++         { gettext_noop("Code 100 - Continue"),                        0 },
++         { gettext_noop("Code 101 - Switching Protocols"),             0 },
++         { gettext_noop("Code 200 - OK"),                              0 },
++         { gettext_noop("Code 201 - Created"),                         0 },
++         { gettext_noop("Code 202 - Accepted"),                        0 },
++         { gettext_noop("Code 203 - Non-Authoritative Information"),   0 },
++         { gettext_noop("Code 204 - No Content"),                      0 },
++         { gettext_noop("Code 205 - Reset Content"),                   0 },
++         { gettext_noop("Code 206 - Partial Content"),                 0 },
++         { gettext_noop("Code 300 - Multiple Choices"),                0 },
++         { gettext_noop("Code 301 - Moved Permanently"),               0 },
++         { gettext_noop("Code 302 - Found"),                           0 },
++         { gettext_noop("Code 303 - See Other"),                       0 },
++         { gettext_noop("Code 304 - Not Modified"),                    0 },
++         { gettext_noop("Code 305 - Use Proxy"),                       0 },
++         { gettext_noop("Code 307 - Moved Temporarily"),               0 },
++         { gettext_noop("Code 400 - Bad Request"),                     0 },
++         { gettext_noop("Code 401 - Unauthorized"),                    0 },
++         { gettext_noop("Code 402 - Payment Required"),                0 },
++         { gettext_noop("Code 403 - Forbidden"),                       0 },
++         { gettext_noop("Code 404 - Not Found"),                       0 },
++         { gettext_noop("Code 405 - Method Not Allowed"),              0 },
++         { gettext_noop("Code 406 - Not Acceptable"),                  0 },
++         { gettext_noop("Code 407 - Proxy Authentication Required"),   0 },
++         { gettext_noop("Code 408 - Request Timeout"),                 0 },
++         { gettext_noop("Code 409 - Conflict"),                        0 },
++         { gettext_noop("Code 410 - Gone"),                            0 },
++         { gettext_noop("Code 411 - Length Required"),                 0 },
++         { gettext_noop("Code 412 - Precondition Failed"),             0 },
++         { gettext_noop("Code 413 - Request Entity Too Large"),        0 },
++         { gettext_noop("Code 414 - Request-URI Too Long"),            0 },
++         { gettext_noop("Code 415 - Unsupported Media Type"),          0 },
++         { gettext_noop("Code 416 - Requested Range Not Satisfiable"), 0 },
++         { gettext_noop("Code 417 - Expectation Failed"),              0 },
++         { gettext_noop("Code 500 - Internal Server Error"),           0 },
++         { gettext_noop("Code 501 - Not Implemented"),                 0 },
++         { gettext_noop("Code 502 - Bad Gateway"),                     0 },
++         { gettext_noop("Code 503 - Service Unavailable"),             0 },
++         { gettext_noop("Code 504 - Gateway Timeout"),                 0 },
++         { gettext_noop("Code 505 - HTTP Version Not Supported"),      0 } };
++
++char *report_title;
++
++/* Country codes (previously in ctry.h header file) */
++
++struct  country_code ctry[] = {
++{ 0,                      gettext_noop("Unresolved/Unknown"),               0,0,0 },
++{ IDX_3C('c','o','m'),    gettext_noop("Commercial (com)"),                 0,0,0 },
++{ IDX_3C('e','d','u'),    gettext_noop("Educational (edu)"),                0,0,0 },
++{ IDX_3C('g','o','v'),    gettext_noop("US Government (gov)"),              0,0,0 },
++{ IDX_3C('i','n','t'),    gettext_noop("International (int)"),              0,0,0 },
++{ IDX_3C('m','i','l'),    gettext_noop("US Military (mil)"),                0,0,0 },
++{ IDX_3C('n','e','t'),    gettext_noop("Network (net)"),                    0,0,0 },
++{ IDX_3C('o','r','g'),    gettext_noop("Non-Profit (org)"),                 0,0,0 },
++{ IDX_3C('b','i','z'),    gettext_noop("Generic Business (biz)"),           0,0,0 },
++{ IDX_3C('c','a','t'),    gettext_noop("Catalan Community (cat)"),          0,0,0 },
++{ IDX_3C('p','r','o'),    gettext_noop("Professional (pro)"),               0,0,0 },
++{ IDX_3C('t','e','l'),    gettext_noop("Ind. Contact Data (tel)"),          0,0,0 },
++{ IDX_4C('a','e','r','o'),gettext_noop("Air Transport Industry (aero)"),    0,0,0 },
++{ IDX_4C('a','s','i','a'),gettext_noop("Asia Pacific Community (asia)"),    0,0,0 },
++{ IDX_4C('c','o','o','p'),gettext_noop("Cooperative Association (coop)"),   0,0,0 },
++{ IDX_4C('i','n','f','o'),gettext_noop("Generic TLD (info)"),               0,0,0 },
++{ IDX_4C('j','o','b','s'),gettext_noop("Human Resources (jobs)"),           0,0,0 },
++{ IDX_4C('m','o','b','i'),gettext_noop("Generic Mobile TLD (mobi)"),        0,0,0 },
++{ IDX_4C('n','a','m','e'),gettext_noop("Individual (name)"),                0,0,0 },
++{ IDX_4C('a','r','p','a'),gettext_noop("Address Routing (arpa)"),           0,0,0 },
++{ IDX_4C('n','a','t','o'),gettext_noop("Nato field (nato)"),                0,0,0 },
++{ IDX_6C('m','u','s','e','u','m'), gettext_noop("Museums (museum)"),        0,0,0 },
++{ IDX_6C('t','r','a','v','e','l'), gettext_noop("Travel Ind. (travel)"),    0,0,0 },
++{ IDX_2C('a','c'),        gettext_noop("Ascension Island"),                 0,0,0 },
++{ IDX_2C('a','d'),        gettext_noop("Andorra"),                          0,0,0 },
++{ IDX_2C('a','e'),        gettext_noop("United Arab Emirates"),             0,0,0 },
++{ IDX_2C('a','f'),        gettext_noop("Afghanistan"),                      0,0,0 },
++{ IDX_2C('a','g'),        gettext_noop("Antigua and Barbuda"),              0,0,0 },
++{ IDX_2C('a','i'),        gettext_noop("Anguilla"),                         0,0,0 },
++{ IDX_2C('a','l'),        gettext_noop("Albania"),                          0,0,0 },
++{ IDX_2C('a','m'),        gettext_noop("Armenia"),                          0,0,0 },
++{ IDX_2C('a','n'),        gettext_noop("Netherlands Antilles"),             0,0,0 },
++{ IDX_2C('a','o'),        gettext_noop("Angola"),                           0,0,0 },
++{ IDX_2C('a','q'),        gettext_noop("Antarctica"),                       0,0,0 },
++{ IDX_2C('a','r'),        gettext_noop("Argentina"),                        0,0,0 },
++{ IDX_2C('a','s'),        gettext_noop("American Samoa"),                   0,0,0 },
++{ IDX_2C('a','t'),        gettext_noop("Austria"),                          0,0,0 },
++{ IDX_2C('a','u'),        gettext_noop("Australia"),                        0,0,0 },
++{ IDX_2C('a','w'),        gettext_noop("Aruba"),                            0,0,0 },
++{ IDX_2C('a','x'),        gettext_noop("Aland Islands"),                    0,0,0 },
++{ IDX_2C('a','z'),        gettext_noop("Azerbaijan"),                       0,0,0 },
++{ IDX_2C('b','a'),        gettext_noop("Bosnia and Herzegovina"),           0,0,0 },
++{ IDX_2C('b','b'),        gettext_noop("Barbados"),                         0,0,0 },
++{ IDX_2C('b','d'),        gettext_noop("Bangladesh"),                       0,0,0 },
++{ IDX_2C('b','e'),        gettext_noop("Belgium"),                          0,0,0 },
++{ IDX_2C('b','f'),        gettext_noop("Burkina Faso"),                     0,0,0 },
++{ IDX_2C('b','g'),        gettext_noop("Bulgaria"),                         0,0,0 },
++{ IDX_2C('b','h'),        gettext_noop("Bahrain"),                          0,0,0 },
++{ IDX_2C('b','i'),        gettext_noop("Burundi"),                          0,0,0 },
++{ IDX_2C('b','j'),        gettext_noop("Benin"),                            0,0,0 },
++{ IDX_2C('b','l'),        gettext_noop("Saint Barthelemy"),                 0,0,0 },
++{ IDX_2C('b','m'),        gettext_noop("Bermuda"),                          0,0,0 },
++{ IDX_2C('b','n'),        gettext_noop("Brunei Darussalam"),                0,0,0 },
++{ IDX_2C('b','o'),        gettext_noop("Bolivia"),                          0,0,0 },
++{ IDX_2C('b','r'),        gettext_noop("Brazil"),                           0,0,0 },
++{ IDX_2C('b','s'),        gettext_noop("Bahamas"),                          0,0,0 },
++{ IDX_2C('b','t'),        gettext_noop("Bhutan"),                           0,0,0 },
++{ IDX_2C('b','v'),        gettext_noop("Bouvet Island"),                    0,0,0 },
++{ IDX_2C('b','w'),        gettext_noop("Botswana"),                         0,0,0 },
++{ IDX_2C('b','y'),        gettext_noop("Belarus"),                          0,0,0 },
++{ IDX_2C('b','z'),        gettext_noop("Belize"),                           0,0,0 },
++{ IDX_2C('c','a'),        gettext_noop("Canada"),                           0,0,0 },
++{ IDX_2C('c','c'),        gettext_noop("Cocos (Keeling) Islands"),          0,0,0 },
++{ IDX_2C('c','d'),        gettext_noop("Congo, Democratic Republic"),       0,0,0 },
++{ IDX_2C('c','f'),        gettext_noop("Central African Republic"),         0,0,0 },
++{ IDX_2C('c','g'),        gettext_noop("Congo"),                            0,0,0 },
++{ IDX_2C('c','h'),        gettext_noop("Switzerland"),                      0,0,0 },
++{ IDX_2C('c','i'),        gettext_noop("Cote D'Ivoire (Ivory Coast)"),      0,0,0 },
++{ IDX_2C('c','k'),        gettext_noop("Cook Islands"),                     0,0,0 },
++{ IDX_2C('c','l'),        gettext_noop("Chile"),                            0,0,0 },
++{ IDX_2C('c','m'),        gettext_noop("Cameroon"),                         0,0,0 },
++{ IDX_2C('c','n'),        gettext_noop("China"),                            0,0,0 },
++{ IDX_2C('c','o'),        gettext_noop("Colombia"),                         0,0,0 },
++{ IDX_2C('c','r'),        gettext_noop("Costa Rica"),                       0,0,0 },
++{ IDX_2C('c','u'),        gettext_noop("Cuba"),                             0,0,0 },
++{ IDX_2C('c','v'),        gettext_noop("Cape Verde"),                       0,0,0 },
++{ IDX_2C('c','x'),        gettext_noop("Christmas Island"),                 0,0,0 },
++{ IDX_2C('c','y'),        gettext_noop("Cyprus"),                           0,0,0 },
++{ IDX_2C('c','z'),        gettext_noop("Czech Republic"),                   0,0,0 },
++{ IDX_2C('d','e'),        gettext_noop("Germany"),                          0,0,0 },
++{ IDX_2C('d','j'),        gettext_noop("Djibouti"),                         0,0,0 },
++{ IDX_2C('d','k'),        gettext_noop("Denmark"),                          0,0,0 },
++{ IDX_2C('d','m'),        gettext_noop("Dominica"),                         0,0,0 },
++{ IDX_2C('d','o'),        gettext_noop("Dominican Republic"),               0,0,0 },
++{ IDX_2C('d','z'),        gettext_noop("Algeria"),                          0,0,0 },
++{ IDX_2C('e','c'),        gettext_noop("Ecuador"),                          0,0,0 },
++{ IDX_2C('e','e'),        gettext_noop("Estonia"),                          0,0,0 },
++{ IDX_2C('e','g'),        gettext_noop("Egypt"),                            0,0,0 },
++{ IDX_2C('e','h'),        gettext_noop("Western Sahara"),                   0,0,0 },
++{ IDX_2C('e','r'),        gettext_noop("Eritrea"),                          0,0,0 },
++{ IDX_2C('e','s'),        gettext_noop("Spain"),                            0,0,0 },
++{ IDX_2C('e','t'),        gettext_noop("Ethiopia"),                         0,0,0 },
++{ IDX_2C('e','u'),        gettext_noop("European Union"),                   0,0,0 },
++{ IDX_2C('f','i'),        gettext_noop("Finland"),                          0,0,0 },
++{ IDX_2C('f','j'),        gettext_noop("Fiji"),                             0,0,0 },
++{ IDX_2C('f','k'),        gettext_noop("Falkland Islands (Malvinas)"),      0,0,0 },
++{ IDX_2C('f','m'),        gettext_noop("Micronesia"),                       0,0,0 },
++{ IDX_2C('f','o'),        gettext_noop("Faroe Islands"),                    0,0,0 },
++{ IDX_2C('f','r'),        gettext_noop("France"),                           0,0,0 },
++{ IDX_2C('g','a'),        gettext_noop("Gabon"),                            0,0,0 },
++{ IDX_2C('g','b'),        gettext_noop("Great Britain (UK)"),               0,0,0 },
++{ IDX_2C('g','d'),        gettext_noop("Grenada"),                          0,0,0 },
++{ IDX_2C('g','e'),        gettext_noop("Georgia"),                          0,0,0 },
++{ IDX_2C('g','f'),        gettext_noop("French Guiana"),                    0,0,0 },
++{ IDX_2C('g','g'),        gettext_noop("Guernsey"),                         0,0,0 },
++{ IDX_2C('g','h'),        gettext_noop("Ghana"),                            0,0,0 },
++{ IDX_2C('g','i'),        gettext_noop("Gibraltar"),                        0,0,0 },
++{ IDX_2C('g','l'),        gettext_noop("Greenland"),                        0,0,0 },
++{ IDX_2C('g','m'),        gettext_noop("Gambia"),                           0,0,0 },
++{ IDX_2C('g','n'),        gettext_noop("Guinea"),                           0,0,0 },
++{ IDX_2C('g','p'),        gettext_noop("Guadeloupe"),                       0,0,0 },
++{ IDX_2C('g','q'),        gettext_noop("Equatorial Guinea"),                0,0,0 },
++{ IDX_2C('g','r'),        gettext_noop("Greece"),                           0,0,0 },
++{ IDX_2C('g','s'),        gettext_noop("S. Georgia and S. Sandwich Isls."), 0,0,0 },
++{ IDX_2C('g','t'),        gettext_noop("Guatemala"),                        0,0,0 },
++{ IDX_2C('g','u'),        gettext_noop("Guam"),                             0,0,0 },
++{ IDX_2C('g','w'),        gettext_noop("Guinea-Bissau"),                    0,0,0 },
++{ IDX_2C('g','y'),        gettext_noop("Guyana"),                           0,0,0 },
++{ IDX_2C('h','k'),        gettext_noop("Hong Kong"),                        0,0,0 },
++{ IDX_2C('h','m'),        gettext_noop("Heard and McDonald Islands"),       0,0,0 },
++{ IDX_2C('h','n'),        gettext_noop("Honduras"),                         0,0,0 },
++{ IDX_2C('h','r'),        gettext_noop("Croatia"),                          0,0,0 },
++{ IDX_2C('h','t'),        gettext_noop("Haiti"),                            0,0,0 },
++{ IDX_2C('h','u'),        gettext_noop("Hungary"),                          0,0,0 },
++{ IDX_2C('i','d'),        gettext_noop("Indonesia"),                        0,0,0 },
++{ IDX_2C('i','e'),        gettext_noop("Ireland"),                          0,0,0 },
++{ IDX_2C('i','l'),        gettext_noop("Israel"),                           0,0,0 },
++{ IDX_2C('i','m'),        gettext_noop("Isle of Man"),                      0,0,0 },
++{ IDX_2C('i','n'),        gettext_noop("India"),                            0,0,0 },
++{ IDX_2C('i','o'),        gettext_noop("British Indian Ocean Territory"),   0,0,0 },
++{ IDX_2C('i','q'),        gettext_noop("Iraq"),                             0,0,0 },
++{ IDX_2C('i','r'),        gettext_noop("Iran"),                             0,0,0 },
++{ IDX_2C('i','s'),        gettext_noop("Iceland"),                          0,0,0 },
++{ IDX_2C('i','t'),        gettext_noop("Italy"),                            0,0,0 },
++{ IDX_2C('j','e'),        gettext_noop("Jersey"),                           0,0,0 },
++{ IDX_2C('j','m'),        gettext_noop("Jamaica"),                          0,0,0 },
++{ IDX_2C('j','o'),        gettext_noop("Jordan"),                           0,0,0 },
++{ IDX_2C('j','p'),        gettext_noop("Japan"),                            0,0,0 },
++{ IDX_2C('k','e'),        gettext_noop("Kenya"),                            0,0,0 },
++{ IDX_2C('k','g'),        gettext_noop("Kyrgyzstan"),                       0,0,0 },
++{ IDX_2C('k','h'),        gettext_noop("Cambodia"),                         0,0,0 },
++{ IDX_2C('k','i'),        gettext_noop("Kiribati"),                         0,0,0 },
++{ IDX_2C('k','m'),        gettext_noop("Comoros"),                          0,0,0 },
++{ IDX_2C('k','n'),        gettext_noop("Saint Kitts and Nevis"),            0,0,0 },
++{ IDX_2C('k','p'),        gettext_noop("Korea, Democratic Republic of"),    0,0,0 },
++{ IDX_2C('k','r'),        gettext_noop("Korea, Republic of"),               0,0,0 },
++{ IDX_2C('k','w'),        gettext_noop("Kuwait"),                           0,0,0 },
++{ IDX_2C('k','y'),        gettext_noop("Cayman Islands"),                   0,0,0 },
++{ IDX_2C('k','z'),        gettext_noop("Kazakhstan"),                       0,0,0 },
++{ IDX_2C('l','a'),        gettext_noop("Laos"),                             0,0,0 },
++{ IDX_2C('l','b'),        gettext_noop("Lebanon"),                          0,0,0 },
++{ IDX_2C('l','c'),        gettext_noop("Saint Lucia"),                      0,0,0 },
++{ IDX_2C('l','i'),        gettext_noop("Liechtenstein"),                    0,0,0 },
++{ IDX_2C('l','k'),        gettext_noop("Sri Lanka"),                        0,0,0 },
++{ IDX_2C('l','r'),        gettext_noop("Liberia"),                          0,0,0 },
++{ IDX_2C('l','s'),        gettext_noop("Lesotho"),                          0,0,0 },
++{ IDX_2C('l','t'),        gettext_noop("Lithuania"),                        0,0,0 },
++{ IDX_2C('l','u'),        gettext_noop("Luxembourg"),                       0,0,0 },
++{ IDX_2C('l','v'),        gettext_noop("Latvia"),                           0,0,0 },
++{ IDX_2C('l','y'),        gettext_noop("Libya"),                            0,0,0 },
++{ IDX_2C('m','a'),        gettext_noop("Morocco"),                          0,0,0 },
++{ IDX_2C('m','c'),        gettext_noop("Monaco"),                           0,0,0 },
++{ IDX_2C('m','d'),        gettext_noop("Moldova"),                          0,0,0 },
++{ IDX_2C('m','e'),        gettext_noop("Montenegro"),                       0,0,0 },
++{ IDX_2C('m','f'),        gettext_noop("Saint Martin (French part)"),       0,0,0 },
++{ IDX_2C('m','g'),        gettext_noop("Madagascar"),                       0,0,0 },
++{ IDX_2C('m','h'),        gettext_noop("Marshall Islands"),                 0,0,0 },
++{ IDX_2C('m','k'),        gettext_noop("Macedonia"),                        0,0,0 },
++{ IDX_2C('m','l'),        gettext_noop("Mali"),                             0,0,0 },
++{ IDX_2C('m','m'),        gettext_noop("Myanmar"),                          0,0,0 },
++{ IDX_2C('m','n'),        gettext_noop("Mongolia"),                         0,0,0 },
++{ IDX_2C('m','o'),        gettext_noop("Macau"),                            0,0,0 },
++{ IDX_2C('m','p'),        gettext_noop("Northern Mariana Islands"),         0,0,0 },
++{ IDX_2C('m','q'),        gettext_noop("Martinique"),                       0,0,0 },
++{ IDX_2C('m','r'),        gettext_noop("Mauritania"),                       0,0,0 },
++{ IDX_2C('m','s'),        gettext_noop("Montserrat"),                       0,0,0 },
++{ IDX_2C('m','t'),        gettext_noop("Malta"),                            0,0,0 },
++{ IDX_2C('m','u'),        gettext_noop("Mauritius"),                        0,0,0 },
++{ IDX_2C('m','v'),        gettext_noop("Maldives"),                         0,0,0 },
++{ IDX_2C('m','w'),        gettext_noop("Malawi"),                           0,0,0 },
++{ IDX_2C('m','x'),        gettext_noop("Mexico"),                           0,0,0 },
++{ IDX_2C('m','y'),        gettext_noop("Malaysia"),                         0,0,0 },
++{ IDX_2C('m','z'),        gettext_noop("Mozambique"),                       0,0,0 },
++{ IDX_2C('n','a'),        gettext_noop("Namibia"),                          0,0,0 },
++{ IDX_2C('n','c'),        gettext_noop("New Caledonia"),                    0,0,0 },
++{ IDX_2C('n','e'),        gettext_noop("Niger"),                            0,0,0 },
++{ IDX_2C('n','f'),        gettext_noop("Norfolk Island"),                   0,0,0 },
++{ IDX_2C('n','g'),        gettext_noop("Nigeria"),                          0,0,0 },
++{ IDX_2C('n','i'),        gettext_noop("Nicaragua"),                        0,0,0 },
++{ IDX_2C('n','l'),        gettext_noop("Netherlands"),                      0,0,0 },
++{ IDX_2C('n','o'),        gettext_noop("Norway"),                           0,0,0 },
++{ IDX_2C('n','p'),        gettext_noop("Nepal"),                            0,0,0 },
++{ IDX_2C('n','r'),        gettext_noop("Nauru"),                            0,0,0 },
++{ IDX_2C('n','u'),        gettext_noop("Niue"),                             0,0,0 },
++{ IDX_2C('n','z'),        gettext_noop("New Zealand"),                      0,0,0 },
++{ IDX_2C('o','m'),        gettext_noop("Oman"),                             0,0,0 },
++{ IDX_2C('p','a'),        gettext_noop("Panama"),                           0,0,0 },
++{ IDX_2C('p','e'),        gettext_noop("Peru"),                             0,0,0 },
++{ IDX_2C('p','f'),        gettext_noop("French Polynesia"),                 0,0,0 },
++{ IDX_2C('p','g'),        gettext_noop("Papua New Guinea"),                 0,0,0 },
++{ IDX_2C('p','h'),        gettext_noop("Philippines"),                      0,0,0 },
++{ IDX_2C('p','k'),        gettext_noop("Pakistan"),                         0,0,0 },
++{ IDX_2C('p','l'),        gettext_noop("Poland"),                           0,0,0 },
++{ IDX_2C('p','m'),        gettext_noop("St. Pierre and Miquelon"),          0,0,0 },
++{ IDX_2C('p','n'),        gettext_noop("Pitcairn"),                         0,0,0 },
++{ IDX_2C('p','r'),        gettext_noop("Puerto Rico"),                      0,0,0 },
++{ IDX_2C('p','s'),        gettext_noop("Palestinian Territory, Occupied"),  0,0,0 },
++{ IDX_2C('p','t'),        gettext_noop("Portugal"),                         0,0,0 },
++{ IDX_2C('p','w'),        gettext_noop("Palau"),                            0,0,0 },
++{ IDX_2C('p','y'),        gettext_noop("Paraguay"),                         0,0,0 },
++{ IDX_2C('q','a'),        gettext_noop("Qatar"),                            0,0,0 },
++{ IDX_2C('r','e'),        gettext_noop("Reunion"),                          0,0,0 },
++{ IDX_2C('r','o'),        gettext_noop("Romania"),                          0,0,0 },
++{ IDX_2C('r','s'),        gettext_noop("Serbia"),                           0,0,0 },
++{ IDX_2C('r','u'),        gettext_noop("Russian Federation"),               0,0,0 },
++{ IDX_2C('r','w'),        gettext_noop("Rwanda"),                           0,0,0 },
++{ IDX_2C('s','a'),        gettext_noop("Saudi Arabia"),                     0,0,0 },
++{ IDX_2C('s','b'),        gettext_noop("Solomon Islands"),                  0,0,0 },
++{ IDX_2C('s','c'),        gettext_noop("Seychelles"),                       0,0,0 },
++{ IDX_2C('s','d'),        gettext_noop("Sudan"),                            0,0,0 },
++{ IDX_2C('s','e'),        gettext_noop("Sweden"),                           0,0,0 },
++{ IDX_2C('s','g'),        gettext_noop("Singapore"),                        0,0,0 },
++{ IDX_2C('s','h'),        gettext_noop("St. Helena"),                       0,0,0 },
++{ IDX_2C('s','i'),        gettext_noop("Slovenia"),                         0,0,0 },
++{ IDX_2C('s','j'),        gettext_noop("Svalbard and Jan Mayen Islands"),   0,0,0 },
++{ IDX_2C('s','k'),        gettext_noop("Slovakia"),                         0,0,0 },
++{ IDX_2C('s','l'),        gettext_noop("Sierra Leone"),                     0,0,0 },
++{ IDX_2C('s','m'),        gettext_noop("San Marino"),                       0,0,0 },
++{ IDX_2C('s','n'),        gettext_noop("Senegal"),                          0,0,0 },
++{ IDX_2C('s','o'),        gettext_noop("Somalia"),                          0,0,0 },
++{ IDX_2C('s','r'),        gettext_noop("Suriname"),                         0,0,0 },
++{ IDX_2C('s','t'),        gettext_noop("Sao Tome and Principe"),            0,0,0 },
++{ IDX_2C('s','u'),        gettext_noop("Soviet Union"),                     0,0,0 },
++{ IDX_2C('s','v'),        gettext_noop("El Salvador"),                      0,0,0 },
++{ IDX_2C('s','y'),        gettext_noop("Syrian Arab Republic"),             0,0,0 },
++{ IDX_2C('s','z'),        gettext_noop("Swaziland"),                        0,0,0 },
++{ IDX_2C('t','c'),        gettext_noop("Turks and Caicos Islands"),         0,0,0 },
++{ IDX_2C('t','d'),        gettext_noop("Chad"),                             0,0,0 },
++{ IDX_2C('t','f'),        gettext_noop("French Southern Territories"),      0,0,0 },
++{ IDX_2C('t','g'),        gettext_noop("Togo"),                             0,0,0 },
++{ IDX_2C('t','h'),        gettext_noop("Thailand"),                         0,0,0 },
++{ IDX_2C('t','j'),        gettext_noop("Tajikistan"),                       0,0,0 },
++{ IDX_2C('t','k'),        gettext_noop("Tokelau"),                          0,0,0 },
++{ IDX_2C('t','l'),        gettext_noop("Timor-Leste"),                      0,0,0 },
++{ IDX_2C('t','m'),        gettext_noop("Turkmenistan"),                     0,0,0 },
++{ IDX_2C('t','n'),        gettext_noop("Tunisia"),                          0,0,0 },
++{ IDX_2C('t','o'),        gettext_noop("Tonga"),                            0,0,0 },
++{ IDX_2C('t','p'),        gettext_noop("Portuguese Timor"),                 0,0,0 },
++{ IDX_2C('t','r'),        gettext_noop("Turkey"),                           0,0,0 },
++{ IDX_2C('t','t'),        gettext_noop("Trinidad and Tobago"),              0,0,0 },
++{ IDX_2C('t','v'),        gettext_noop("Tuvalu"),                           0,0,0 },
++{ IDX_2C('t','w'),        gettext_noop("Taiwan"),                           0,0,0 },
++{ IDX_2C('t','z'),        gettext_noop("Tanzania"),                         0,0,0 },
++{ IDX_2C('u','a'),        gettext_noop("Ukraine"),                          0,0,0 },
++{ IDX_2C('u','g'),        gettext_noop("Uganda"),                           0,0,0 },
++{ IDX_2C('u','k'),        gettext_noop("United Kingdom"),                   0,0,0 },
++{ IDX_2C('u','m'),        gettext_noop("US Minor Outlying Islands"),        0,0,0 },
++{ IDX_2C('u','s'),        gettext_noop("United States"),                    0,0,0 },
++{ IDX_2C('u','y'),        gettext_noop("Uruguay"),                          0,0,0 },
++{ IDX_2C('u','z'),        gettext_noop("Uzbekistan"),                       0,0,0 },
++{ IDX_2C('v','a'),        gettext_noop("Vatican City State (Holy See)"),    0,0,0 },
++{ IDX_2C('v','c'),        gettext_noop("Saint Vincent and the Grenadines"), 0,0,0 },
++{ IDX_2C('v','e'),        gettext_noop("Venezuela"),                        0,0,0 },
++{ IDX_2C('v','g'),        gettext_noop("Virgin Islands (British)"),         0,0,0 },
++{ IDX_2C('v','i'),        gettext_noop("Virgin Islands (U.S.)"),            0,0,0 },
++{ IDX_2C('v','n'),        gettext_noop("Vietnam"),                          0,0,0 },
++{ IDX_2C('v','u'),        gettext_noop("Vanuatu"),                          0,0,0 },
++{ IDX_2C('w','f'),        gettext_noop("Wallis and Futuna Islands"),        0,0,0 },
++{ IDX_2C('w','s'),        gettext_noop("Samoa"),                            0,0,0 },
++{ IDX_2C('y','e'),        gettext_noop("Yemen"),                            0,0,0 },
++{ IDX_2C('y','t'),        gettext_noop("Mayotte"),                          0,0,0 },
++{ IDX_2C('y','u'),        gettext_noop("Yugoslavia"),                       0,0,0 },
++{ IDX_2C('z','a'),        gettext_noop("South Africa"),                     0,0,0 },
++{ IDX_2C('z','m'),        gettext_noop("Zambia"),                           0,0,0 },
++{ IDX_2C('z','w'),        gettext_noop("Zimbabwe"),                         0,0,0 },
++{ IDX_2C('a','1'),        gettext_noop("Anonymous Proxy"),                  0,0,0 },
++{ IDX_2C('a','2'),        gettext_noop("Satellite Provider"),               0,0,0 },
++{ IDX_2C('o','1'),        gettext_noop("Other"),                            0,0,0 },
++{ IDX_2C('a','p'),        gettext_noop("Asia/Pacific Region"),              0,0,0 },
++{ IDX_3C('l','a','n'),    gettext_noop("Local Network (lan)"),              0,0,0 },
++{ 0              ,        NULL,                               0,0,0 }};
+Index: webalizer/lang_po.sh
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ webalizer/lang_po.sh       2011-01-07 19:13:13.000000000 +0100
+@@ -0,0 +1,24 @@
++#!/bin/bash
++# create  lang.txt file with vars and strings from webalizer_lang.english file
++cat lang/webalizer_lang.english | grep ^char | sed \
++      -e 's/^char//' -e 's/ \*//' -e 's/= /=/' -e 's/ *=/=/' \
++      -e 's/="/=/' -e 's/;$//' -e 's/"$//' -e 's/!/\\!/' | \
++      grep -v "^l_month" | grep -v "^s_month" | grep -v "^h_msg" | \
++      grep -v "^language=" | sort -r > lang.txt
++# create a sed line with -e options that subst msg_* strings to _("string")
++# take strings from lang.txt file.
++SED_E="";
++for i in $(cat lang.txt |cut -f1 -d=); do
++  SUBST=$(cat lang.txt | grep ^$i=| cut -f2 -d=);
++  SED_E="$SED_E -e "'"'"s/\<$i\>/_("'\"'$SUBST'\"'")/"'"'
++done;
++# create a script file with commands to subst and create a diff file
++# I create this script because had errors when I tried to run commands here.
++echo "" > lang_po_exec.sh
++for i in *.c; do
++  echo "cat $i | sed $SED_E > $i.new;" >> lang_po_exec.sh;
++  echo "cat $i.new > $i;" >> lang_po_exec.sh;
++  echo "rm -f $i.new;" >> lang_po_exec.sh;
++done;
++bash ./lang_po_exec.sh;
++rm -f lang_po_exec.sh lang.txt;
+Index: webalizer/output.c
+===================================================================
+--- webalizer.orig/output.c    2011-01-07 19:12:31.000000000 +0100
++++ webalizer/output.c 2011-01-07 19:13:13.000000000 +0100
+@@ -191,7 +191,7 @@
+    fprintf(out_fp,"<HTML lang=\"%s\">\n<HEAD>\n",langcode);
+    fprintf(out_fp," <TITLE>%s %s - %s</TITLE>\n",
+-                  msg_title, hname, (period)?period:msg_main_per);
++                  report_title, hname, (period)?period:msg_main_per);
+    lptr=html_head;
+    while (lptr!=NULL)
+    {
+@@ -213,7 +213,7 @@
+          lptr=lptr->next;
+       }
+    }
+-   fprintf(out_fp,"<H2>%s %s</H2>\n",msg_title, hname);
++   fprintf(out_fp,"<H2>%s %s</H2>\n",report_title, hname);
+    if (period)
+       fprintf(out_fp,"<SMALL><STRONG>\n%s: %s<BR>\n",msg_hhdr_sp,period);
+    else
+@@ -289,7 +289,7 @@
+    char htitle[256];
+    if (verbose>1)
+-      printf("%s %s %d\n",msg_gen_rpt, l_month[cur_month-1], cur_year); 
++      printf("%s %s %d\n",msg_gen_rpt, Q_(l_month[cur_month-1]), cur_year); 
+    /* fill in filenames */
+    snprintf(html_fname,sizeof(html_fname),"usage_%04d%02d.%s",
+@@ -301,7 +301,7 @@
+    if (daily_graph)
+    {
+       snprintf(dtitle,sizeof(dtitle),"%s %s %d",
+-               msg_hmth_du,l_month[cur_month-1],cur_year);
++               msg_hmth_du,Q_(l_month[cur_month-1]),cur_year);
+       month_graph6 (  png1_fname,          /* filename          */
+                       dtitle,              /* graph title       */
+                       cur_month,           /* graph month       */
+@@ -319,7 +319,7 @@
+    if (hourly_graph)
+    {
+       snprintf(htitle,sizeof(htitle),"%s %s %d",
+-               msg_hmth_hu,l_month[cur_month-1],cur_year);
++               msg_hmth_hu,Q_(l_month[cur_month-1]),cur_year);
+       day_graph3(    png2_fname,
+                      htitle,
+                      th_hit,
+@@ -331,7 +331,7 @@
+    /* first, open the file */
+    if ( (out_fp=open_out_file(html_fname))==NULL ) return 1;
+-   snprintf(buffer,sizeof(buffer),"%s %d",l_month[cur_month-1],cur_year);
++   snprintf(buffer,sizeof(buffer),"%s %d",Q_(l_month[cur_month-1]),cur_year);
+    write_html_head(buffer, out_fp);
+    month_links();
+    month_total_table();
+@@ -529,7 +529,7 @@
+    fprintf(out_fp,"<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>\n");
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH COLSPAN=3 ALIGN=center BGCOLOR=\"%s\">"           \
+-      "%s %s %d</TH></TR>\n",GREY,msg_mtot_ms,l_month[cur_month-1],cur_year);
++      "%s %s %d</TH></TR>\n",GREY,msg_mtot_ms,Q_(l_month[cur_month-1]),cur_year);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    /* Total Hits */
+    fprintf(out_fp,"<TR><TD WIDTH=380><FONT SIZE=\"-1\">%s</FONT></TD>\n"     \
+@@ -694,7 +694,7 @@
+    /* Daily statistics for ... */
+    fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=%d ALIGN=center>"          \
+            "%s %s %d</TH></TR>\n",
+-           GREY,(dump_inout==0)?13:17,msg_dtot_ds,l_month[cur_month-1], cur_year);
++           GREY,(dump_inout==0)?13:17,msg_dtot_ds,Q_(l_month[cur_month-1]), cur_year);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH ALIGN=center BGCOLOR=\"%s\">"                     \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"                       \
+@@ -807,7 +807,7 @@
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH BGCOLOR=\"%s\" COLSPAN=%d ALIGN=center>"\
+            "%s %s %d</TH></TR>\n",
+-           GREY,(dump_inout==0)?13:19,msg_htot_hs,l_month[cur_month-1], cur_year);
++           GREY,(dump_inout==0)?13:19,msg_htot_hs,Q_(l_month[cur_month-1]), cur_year);
+    fprintf(out_fp,"<TR><TH HEIGHT=4></TH></TR>\n");
+    fprintf(out_fp,"<TR><TH ALIGN=center ROWSPAN=2 BGCOLOR=\"%s\">" \
+                   "<FONT SIZE=\"-1\">%s</FONT></TH>\n"             \
+@@ -1085,7 +1085,7 @@
+    if ( (out_fp=open_out_file(site_fname))==NULL ) return 0;
+    snprintf(buffer,sizeof(buffer),"%s %d - %s",
+-            l_month[cur_month-1],cur_year,msg_h_sites);
++            Q_(l_month[cur_month-1]),cur_year,msg_h_sites);
+    write_html_head(buffer, out_fp);
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+@@ -1344,7 +1344,7 @@
+    if ( (out_fp=open_out_file(url_fname))==NULL ) return 0;
+    snprintf(buffer,sizeof(buffer),"%s %d - %s",
+-            l_month[cur_month-1],cur_year,msg_h_url);
++            Q_(l_month[cur_month-1]),cur_year,msg_h_url);
+    write_html_head(buffer, out_fp);
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+@@ -1644,7 +1644,7 @@
+    if ( (out_fp=open_out_file(ref_fname))==NULL ) return 0;
+    snprintf(buffer,sizeof(buffer),"%s %d - %s",
+-            l_month[cur_month-1],cur_year,msg_h_ref);
++            Q_(l_month[cur_month-1]),cur_year,msg_h_ref);
+    write_html_head(buffer, out_fp);
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+@@ -1798,7 +1798,7 @@
+    if ( (out_fp=open_out_file(agent_fname))==NULL ) return 0;
+    snprintf(buffer,sizeof(buffer),"%s %d - %s",
+-            l_month[cur_month-1],cur_year,msg_h_agent);
++            Q_(l_month[cur_month-1]),cur_year,msg_h_agent);
+    write_html_head(buffer, out_fp);
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+@@ -1934,7 +1934,7 @@
+    if ( (out_fp=open_out_file(search_fname))==NULL ) return 0;
+    snprintf(buffer,sizeof(buffer),"%s %d - %s",
+-            l_month[cur_month-1],cur_year,msg_h_search);
++            Q_(l_month[cur_month-1]),cur_year,msg_h_search);
+    write_html_head(buffer, out_fp);
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+@@ -2098,7 +2098,7 @@
+    if ( (out_fp=open_out_file(user_fname))==NULL ) return 0;
+    snprintf(buffer,sizeof(buffer),"%s %d - %s",
+-            l_month[cur_month-1],cur_year,msg_h_uname);
++            Q_(l_month[cur_month-1]),cur_year,msg_h_uname);
+    write_html_head(buffer, out_fp);
+    fprintf(out_fp,"<FONT SIZE=\"-1\"></CENTER><PRE>\n");
+@@ -2226,7 +2226,7 @@
+                   if (geo_ctry[0]=='-')
+                   {
+                      if (debug_mode)
+-                        fprintf(stderr,"GeoDB: %s unknown!\n",hptr->string);
++                        fprintf(stderr,_("GeoDB: %s unknown!\n"),hptr->string);
+                   }
+                   else idx=ctry_idx(geo_ctry);
+                }
+@@ -2239,7 +2239,7 @@
+                   if (geo_rc==NULL||geo_rc[0]=='\0'||geo_rc[0]=='-')
+                   {
+                      if (debug_mode)
+-                        fprintf(stderr,"GeoIP: %s unknown (returns '%s')\n",
++                        fprintf(stderr,_("GeoIP: %s unknown (returns '%s')\n"),
+                                 hptr->string,(geo_rc==NULL)?"null":geo_rc);
+                   }
+                   else
+@@ -2321,10 +2321,10 @@
+       for (i=0;i<j;i++)
+       {
+          pie_data[i]=top_ctrys[i]->count;           /* load the array       */
+-         pie_legend[i]=top_ctrys[i]->desc;
++         pie_legend[i]=_(top_ctrys[i]->desc);
+       }
+       snprintf(pie_title,sizeof(pie_title),"%s %s %d",
+-               msg_ctry_use,l_month[cur_month-1],cur_year);
++               msg_ctry_use,Q_(l_month[cur_month-1]),cur_year);
+       sprintf(pie_fname,"ctry_usage_%04d%02d.png",cur_year,cur_month);
+       pie_chart(pie_fname,pie_title,t_hit,pie_data,pie_legend);  /* do it   */
+@@ -2741,7 +2741,7 @@
+       else
+       {
+          if (errno!=EEXIST && verbose)
+-            fprintf(stderr,"Error: Failed to create .htaccess file: %s\n",
++            fprintf(stderr,_("Error: Failed to create .htaccess file: %s\n"),
+                     strerror(errno));
+       }
+    }
+@@ -2849,10 +2849,10 @@
+          fprintf(out_fp,"<A HREF=\"usage_%04d%02d.%s\">"                  \
+                         "<FONT SIZE=\"-1\">%s %d</FONT></A></TD>\n",
+                          hist[i].year, hist[i].month, html_ext,
+-                         s_month[hist[i].month-1], hist[i].year);
++                         Q_(s_month[hist[i].month-1]), hist[i].year);
+       else
+          fprintf(out_fp,"<FONT SIZE=\"-1\">%s %d</FONT></A></TD>\n",      \
+-                         s_month[hist[i].month-1], hist[i].year);
++                         Q_(s_month[hist[i].month-1]), hist[i].year);
+                      
+       fprintf(out_fp,"<TD ALIGN=right><FONT SIZE=\"-1\">%llu</FONT></TD>\n",
+                       hist[i].hit/days_in_month);
+Index: webalizer/update_po.sh
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ webalizer/update_po.sh     2011-01-07 19:13:13.000000000 +0100
+@@ -0,0 +1,9 @@
++# 7. Created webalizer.pot file with the follow command:
++    xgettext --default-domain=webalizer --directory=. -o po/webalizer.pot \
++             --language=C --add-comments="TRANS:" --escape --sort-by-file \
++             --keyword=_ --keyword=N_ --keyword=Q_ --keyword=PL_:1,2 *.c *.h
++# 8. Merged old .po files.
++    for i in po/*.po;do echo -n $i;msgmerge -U $i po/webalizer.pot;done;
++    rm -f po/*.po~;
++
++
+Index: webalizer/webalizer.c
+===================================================================
+--- webalizer.orig/webalizer.c 2011-01-07 19:12:51.000000000 +0100
++++ webalizer/webalizer.c      2011-01-07 19:13:13.000000000 +0100
+@@ -86,7 +86,7 @@
+ #include "preserve.h"
+ #include "hashtab.h"
+ #include "linklist.h"
+-#include "webalizer_lang.h"                    /* lang. support            */
++#include "lang2.h"                             /* lang. support            */
+ #ifdef USE_DNS
+ #include "dns_resolv.h"
+ #endif
+@@ -96,7 +96,7 @@
+ void    clear_month();                              /* clear monthly stuff */
+ char    *unescape(char *);                          /* unescape URLs       */
+ void    print_opts(char *);                         /* print options       */
+-void    print_version();                            /* duhh...             */
++void    print_version(char * locale);               /* duhh...             */
+ int     isurlchar(unsigned char, int);              /* valid URL char fnc. */
+ void    get_config(char *);                         /* Read a config file  */
+ static  char *save_opt(char *);                     /* save conf option    */
+@@ -299,6 +299,7 @@
+    time_t start_time, end_time;          /* program timers              */
+    float  temp_time;                     /* temporary time storage      */
++   char *current_locale;
+    int    rec_year,rec_month=1,rec_day,rec_hour,rec_min,rec_sec;
+@@ -317,10 +318,16 @@
+    /* stat struct for files */
+    struct stat log_stat;
++   current_locale = setlocale (LC_ALL, "");
++   bindtextdomain ("webalizer", DATADIR"/locale");
++   textdomain ("webalizer");
+    /* Assume that LC_CTYPE is what the user wants for non-ASCII chars   */
+    setlocale(LC_CTYPE,"");
++   /* Initialise report_title with the default localized value          */
++   report_title = msg_title;
++
+    /* initalize epoch */
+    epoch=jdate(1,1,1970);                /* used for timestamp adj.     */
+@@ -377,12 +384,12 @@
+         case 'R': ntop_refs=atoi(optarg);    break;  /* Top referrers       */
+         case 's': add_nlist(optarg,&hidden_sites);  break; /* Hide site     */
+         case 'S': ntop_sites=atoi(optarg);   break;  /* Top sites           */
+-        case 't': msg_title=optarg;          break;  /* Report title        */
++        case 't': report_title=optarg;       break;  /* Report title        */
+         case 'T': time_me=1;                 break;  /* TimeMe              */
+         case 'u': add_nlist(optarg,&hidden_urls);   break; /* hide URL      */
+         case 'U': ntop_urls=atoi(optarg);    break;  /* Top urls            */
+         case 'v': verbose=2; debug_mode=1;   break;  /* Verbose             */
+-        case 'V': print_version();           break;  /* Version             */
++        case 'V': print_version(current_locale); break;  /* Version         */
+ #ifdef USE_GEOIP
+         case 'w': geoip=1;                   break;  /* Enable GeoIP        */
+         case 'W': geoip_db=optarg;           break;  /* GeoIP database name */
+@@ -482,9 +489,9 @@
+    if (verbose>1)
+    {
+       uname(&system_info);
+-      printf("Webalizer V%s-%s (%s %s %s) %s\n", version,editlvl,
++      printf("Webalizer V%s-%s (%s %s %s) %s: %s\n", version,editlvl,
+               system_info.sysname, system_info.release,
+-              system_info.machine,language);
++              system_info.machine, _("locale"), current_locale);
+    }
+ #ifndef USE_DNS
+@@ -697,7 +704,7 @@
+       total_rec++;
+       if (strlen(buffer) == (BUFSIZE-1))
+       {
+-         if (verbose)
++         if (verbose>1)
+          {
+             fprintf(stderr,"%s",msg_big_rec);
+             if (debug_mode) fprintf(stderr,":\n%s",buffer);
+@@ -1728,7 +1735,7 @@
+       {
+         case 1:  out_dir=save_opt(value);          break; /* OutputDir      */
+         case 2:  log_fname=save_opt(value);        break; /* LogFile        */
+-        case 3:  msg_title=save_opt(value);        break; /* ReportTitle    */
++        case 3:  report_title=save_opt(value);     break; /* ReportTitle    */
+         case 4:  hname=save_opt(value);            break; /* HostName       */
+         case 5:  ignore_hist=
+                     (tolower(value[0])=='y')?1:0;  break; /*