[packages/webalizer/DEVEL] - rel 2; add gettext back (from debian); someone could merge it to master
arekm
arekm at pld-linux.org
Fri Aug 9 11:41:31 CEST 2013
commit 82ee0757db2ac33256a8a52225dda5d6d7aa061d
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date: Fri Aug 9 11:41:26 2013 +0200
- rel 2; add gettext back (from debian); someone could merge it to master
01_symlink_vulnerability.diff | 33 +
02_fix_a_spelling_error.diff | 28 +
05_apache_logio.diff | 3109 ++
06_apache_logio_optional.diff | 1407 +
07_apache_logio_color_config.diff | 219 +
15_ignore_localhost.diff | 23 +
18_ttf_support_throught_libgd.diff | 174 +
23_gettext_first_part.diff | 1503 +
24_gettext_generated.diff | 2126 +
25_gettext_po_files.diff | 78569 +++++++++++++++++++++++++++++++++++
webalizer.spec | 51 +-
11 files changed, 87226 insertions(+), 16 deletions(-)
---
diff --git a/webalizer.spec b/webalizer.spec
index 25f65d6..832b515 100644
--- a/webalizer.spec
+++ b/webalizer.spec
@@ -20,16 +20,27 @@ Summary(ru.UTF-8): Программа анализа log-файла web/ftp/prox
Summary(uk.UTF-8): Програма аналізу log-файлу web/ftp/proxy-сервера
Name: webalizer
Version: %{ver}_%{patchlvl}
-Release: 1
+Release: 2
License: GPL v2
Group: Networking/Utilities
Source0: ftp://ftp.mrunix.net/pub/webalizer/%{name}-%{ver}-%{patchlvl}-src.tar.bz2
# Source0-md5: 18cb592434dae81e9bdd8f55f5e28b96
-Source1: http://linux.gda.pl/pub/webalizer/%{name}_lang.polish
-# Source1-md5: 510bc595699373c4d7a8093a5ea10df3
+
Source2: %{name}.sysconfig
Source3: %{name}.cron
Source4: %{name}.crontab
+#
+Patch100: 01_symlink_vulnerability.diff
+Patch101: 02_fix_a_spelling_error.diff
+Patch102: 05_apache_logio.diff
+Patch103: 06_apache_logio_optional.diff
+Patch104: 07_apache_logio_color_config.diff
+Patch105: 15_ignore_localhost.diff
+Patch106: 18_ttf_support_throught_libgd.diff
+Patch107: 23_gettext_first_part.diff
+Patch108: 24_gettext_generated.diff
+Patch109: 25_gettext_po_files.diff
+#
Patch0: %{name}-nolibnsl.patch
Patch1: %{name}-conf.patch
URL: http://www.mrunix.net/webalizer/
@@ -106,14 +117,23 @@ Webalizer i dokumentacja do niego.
%prep
%setup -q -n %{name}-%{ver}-%{patchlvl}
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
+%patch107 -p1
+%patch108 -p1
+%patch109 -p1
+
%patch0 -p1
%patch1 -p1
-#mv -f po/{no,nb}.po
-#mv -f po/{sr,sr at latin}.po
-#mv -f po/{zh,zh_TW}.po
-
-install %{SOURCE1} lang
+mv -f po/{no,nb}.po
+mv -f po/{sr,sr at latin}.po
+mv -f po/{zh,zh_TW}.po
%build
# don't call aclocal, aclocal.m4 contains only one _local_ macro
@@ -141,13 +161,13 @@ install %{SOURCE3} $RPM_BUILD_ROOT%{_sbindir}/webalizer.cron
install %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/cron.d/webalizer
ln -s webalizer $RPM_BUILD_ROOT%{_bindir}/webazolver
-#for mo in po/*.mo; do
-# file=${mo#po/*}
-# lang=${file%*.mo}
-# install -D $mo $RPM_BUILD_ROOT%{_datadir}/locale/$lang/LC_MESSAGES/webalizer.mo
-#done
+for mo in po/*.mo; do
+ file=${mo#po/*}
+ lang=${file%*.mo}
+ install -D $mo $RPM_BUILD_ROOT%{_datadir}/locale/$lang/LC_MESSAGES/webalizer.mo
+done
-#%%find_lang %{name}
+%find_lang %{name}
%clean
rm -rf $RPM_BUILD_ROOT
@@ -164,7 +184,6 @@ for dir in `grep ^OutputDir %{_sysconfdir}/webalizer/*.conf | awk '{ print $2; }
fi
done
-#%%files -f %{name}.lang
%files
%defattr(644,root,root,755)
%attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) /etc/cron.d/webalizer
@@ -172,7 +191,7 @@ done
%attr(755,root,root) %{_sbindir}/webalizer.cron
%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/webalizer
-%files base
+%files base -f %{name}.lang
%defattr(644,root,root,755)
%doc CHANGES *README* country-codes.txt
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/webalizer.conf
diff --git a/01_symlink_vulnerability.diff b/01_symlink_vulnerability.diff
new file mode 100644
index 0000000..af6a8db
--- /dev/null
+++ b/01_symlink_vulnerability.diff
@@ -0,0 +1,33 @@
+From: Julien Viard de Galbert <julien at 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/02_fix_a_spelling_error.diff b/02_fix_a_spelling_error.diff
new file mode 100644
index 0000000..01b02b4
--- /dev/null
+++ b/02_fix_a_spelling_error.diff
@@ -0,0 +1,28 @@
+From: Julien Viard de Galbert <julien at 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/05_apache_logio.diff b/05_apache_logio.diff
new file mode 100644
index 0000000..d442aa5
--- /dev/null
+++ b/05_apache_logio.diff
@@ -0,0 +1,3109 @@
+From: Jose Carlos Medeiros <debian at 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 at vdg.blogsite.org>
+And later adapted to webalizer 2.23-03 with the help
+from Pim van den Berg <pim at nethuis.nl>, Thanks !
+
+ 1: 05_apache_logio.dpatch by Jose Carlos Medeiros <debian at 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ô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éfé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é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ü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ê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ärdnamn"; // HTML
+ char *msg_h_hname = "V�rdnamn"; // GD
+ char *msg_h_url = "URL";
+@@ -272,7 +274,9 @@
+ char *msg_mtot_ms = "Månatlig statistik för";
+ char *msg_mtot_th = "Totalt antal trä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ä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ö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ä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/06_apache_logio_optional.diff b/06_apache_logio_optional.diff
new file mode 100644
index 0000000..7f6b347
--- /dev/null
+++ b/06_apache_logio_optional.diff
@@ -0,0 +1,1407 @@
+From: Julien Viard de Galbert <julien at 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 @@
<Skipped 83386 lines>
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/webalizer.git/commitdiff/82ee0757db2ac33256a8a52225dda5d6d7aa061d
More information about the pld-cvs-commit
mailing list